【发布时间】:2023-04-04 16:09:01
【问题描述】:
假设我们有以下docker-compose.yml:
version: '3'
services:
db:
image: "postgres"
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=mysecretpassword
web:
build: web
depends_on: [ db ]
ports:
- "80:80"
第一个服务db 只是运行一个带有来自 Docker Hub 的官方 postgres 映像的容器。
第二个服务web 首先在一个名为web 的文件夹中基于Dockerfile 构建一个新映像,然后使用该映像运行一个容器。
在开发过程中,我们现在可以(反复)更改web 文件夹中的任何内容,然后运行docker-compose up --build 以在本地运行我们的应用程序。
假设我们现在要部署到生产环境。我的理解是docker-compose.yml 现在可用于“在 Docker 的 swarm 模式下定义堆栈”(例如,请参阅this 答案)。但是,对于web 服务的build 步骤,Docker 的compose file documentation 声明
在使用(版本 3)Compose 文件以 swarm 模式部署堆栈时,将忽略此选项。 docker stack 命令只接受预先构建的图像。
无论如何,在生产机器上构建映像可能不是一个好主意,因为这会留下构建工件(源代码);这应该发生在构建服务器上。
我的问题是,有没有推荐的方法来修改docker-compose.yml 在生产途中以某种方式将build: web 换成image: <id>?
Use Compose in production 上没有任何内容。总的来说,我的方法有问题吗?
【问题讨论】:
标签: docker docker-compose docker-swarm