RoX*_*XaS 8 docker docker-compose docker-volume angular nrwl-nx
我有一个带有 2 个应用程序的 NX monorepo:
我希望使用 docker-compose 来运行我的整个环境,最终包含一些 API 和数据库等。
我创建了一个带有参数的 docker 文件,可以重新用于在 Nx 中运行多个角度应用程序:
# base image
FROM node
ARG APP
# # install chrome for protractor tests
# RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
# RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
# RUN apt-get update && apt-get install -yq google-chrome-stable
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /app/package.json
COPY decorate-angular-cli.js /app/decorate-angular-cli.js
RUN npm install
RUN npm install -g @angular/cli@latest
RUN npm install reflect-metadata tslib rxjs @nestjs/platform-express
# add app
COPY . /app
# start app
CMD npm start $APP -- --host 0.0.0.0 --port 4200 --disableHostCheck=true --poll 100
Run Code Online (Sandbox Code Playgroud)
我创建了一个 docker-compose 文件,用于设置 .net 5 API 和 2 个 Web 应用程序:
version: '3.4'
services:
sletsgo.user.api:
image: ${DOCKER_REGISTRY-}sletsgo.user.api
build:
context: .
dockerfile: SletsGo.User.Api/Dockerfile
ports:
- "5000:2000"
- "444:443"
sletsgo.shop:
container_name: 'SletsGo.Shop'
image: ${DOCKER_REGISTRY}sletsgo.shop:dev
build:
context: SletsGo
dockerfile: .docker/Dockerfile
args:
- APP=shop
ports:
- '4000:4200'
#volumes:
# - sletsgo-web:/app
# - '/app/node_modules'
sletsgo.landing:
container_name: 'SletsGo.Landing'
image: ${DOCKER_REGISTRY}sletsgo.landing:dev
build:
context: SletsGo
dockerfile: .docker/Dockerfile
args:
- APP=landing
ports:
- '4100:4200'
# volumes:
# - sletsgo-web:/app
# - '/app/node_modules'
#volumes:
# sletsgo-web:
# driver: local
# driver_opts:
# type: local
# device: ./SletsGo
# o: bind
Run Code Online (Sandbox Code Playgroud)
请注意,很多行都被注释掉了。问题是,如果我运行这个 docker-compose,我会得到 2 个运行的商店应用程序实例。
我怎样才能解决这个问题?
PS我还想象使用卷我可能能够简化很多事情。但我尝试安装失败,因为我在 Windows 机器上使用 Linux 容器。如果有人愿意帮助我更上一层楼,我会非常高兴,但现在我只想运行这两个 Web 应用程序。
ARG是构建时间变量。您可以在构建过程中将 的值保留ARG在图像环境中,或者覆盖services[*].commanddocker-compose.yaml.
--build-arg您可以在构建期间保留图像环境中设置的环境变量:
FROM alpine:3
ARG APP
ENV APP=${APP}
CMD echo $APP
Run Code Online (Sandbox Code Playgroud)
构建docker图像:docker build --rm --build-arg APP=123 -t so:66935830 .
运行docker容器:docker run --rm -it so:66935830
command您可以覆盖command以下中的每个服务docker-compose.yaml:
version: '3.7'
services:
a:
image: 'a'
build:
context: '.'
command: ['echo', '123']
b:
image: 'b'
build:
context: '.'
command: ['echo', '456']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10826 次 |
| 最近记录: |