如何在 docker-compose.yml 中针对不同的构建环境 运行 不同的 ENTRYPOINT 命令?
How to run different ENTRYPOINT commands in docker-compose.yml for different build environments?
现在我有一个 docker-compose.yml
:
version: "3"
services:
hello-world:
image: hello-world
build: .
environment:
NODE_ENV: development
ports:
- 3000:3000
entrypoint: npm run dev
# entrypoint: npm start
working_dir: /
volumes:
- ./distService:/distService
您看到 entrypoint
命令有 2 个选项。当我开发时,我需要它 运行 npm run dev
。当我部署它时,我需要它 运行 npm start
.
如何在保留单个 docker-compose.yml
文件的同时执行此操作?
有没有办法将某种构建参数/ENV 变量传递给 docker-compose?人们通常如何处理这个问题?
好吧,首先,您想使用生产默认值(例如 ENTRYPOINT)构建 Dockerfile。
然后,很容易利用 docker-compose 默认情况下会同时处理 docker-compose.yml
和 docker-compose.override.yml
的事实。
因此,在 docker-compose.yml
中构建基本的生产就绪定义,并在覆盖文件中添加特定的开发覆盖,例如本地卷映射和入口点。
docker-compose up
等命令将自动与您的开发堆栈一起使用,生产部署可以通过明确指定 -f docker-compose.yml
来完成。
这是一个可能如何构建的示例。
Docker 文件
FROM node AS builder
# Your usual setup here
WORKDIR /src
FROM builder AS build
COPY /src .
RUN npm build
FROM node AS final
COPY --from=build /src/build /app
WORKDIR /app
ENTRYPOINT ["npm", "start"]
docker-compose.yml
version: '3.8'
services:
hello-world:
image: hello-world:prod
build: .
ports:
- 3000:3000
docker-compose.override.yml
version: '3.8'
services:
hello-world:
image: hello-world:dev
environment:
NODE_ENV: development
entrypoint: npm run dev
build:
target: builder
volumes:
- ./src:/src
现在我有一个 docker-compose.yml
:
version: "3"
services:
hello-world:
image: hello-world
build: .
environment:
NODE_ENV: development
ports:
- 3000:3000
entrypoint: npm run dev
# entrypoint: npm start
working_dir: /
volumes:
- ./distService:/distService
您看到 entrypoint
命令有 2 个选项。当我开发时,我需要它 运行 npm run dev
。当我部署它时,我需要它 运行 npm start
.
如何在保留单个 docker-compose.yml
文件的同时执行此操作?
有没有办法将某种构建参数/ENV 变量传递给 docker-compose?人们通常如何处理这个问题?
好吧,首先,您想使用生产默认值(例如 ENTRYPOINT)构建 Dockerfile。
然后,很容易利用 docker-compose 默认情况下会同时处理 docker-compose.yml
和 docker-compose.override.yml
的事实。
因此,在 docker-compose.yml
中构建基本的生产就绪定义,并在覆盖文件中添加特定的开发覆盖,例如本地卷映射和入口点。
docker-compose up
等命令将自动与您的开发堆栈一起使用,生产部署可以通过明确指定 -f docker-compose.yml
来完成。
这是一个可能如何构建的示例。
Docker 文件
FROM node AS builder
# Your usual setup here
WORKDIR /src
FROM builder AS build
COPY /src .
RUN npm build
FROM node AS final
COPY --from=build /src/build /app
WORKDIR /app
ENTRYPOINT ["npm", "start"]
docker-compose.yml
version: '3.8'
services:
hello-world:
image: hello-world:prod
build: .
ports:
- 3000:3000
docker-compose.override.yml
version: '3.8'
services:
hello-world:
image: hello-world:dev
environment:
NODE_ENV: development
entrypoint: npm run dev
build:
target: builder
volumes:
- ./src:/src