Docker swarm:';构建';堆栈部署期间忽略docker compose文件中的配置
我们已经创建了一个包含多个服务的docker compose文件。这些服务的映像是在运行时使用“build”配置选项生成的。相应的Dockerfile在相应的目录中给出 示例docker编写文件Docker swarm:';构建';堆栈部署期间忽略docker compose文件中的配置,docker,docker-compose,dockerfile,docker-swarm,Docker,Docker Compose,Dockerfile,Docker Swarm,我们已经创建了一个包含多个服务的docker compose文件。这些服务的映像是在运行时使用“build”配置选项生成的。相应的Dockerfile在相应的目录中给出 示例docker编写文件 version: '3' services: db2server: build: ./db2server ports: - "50005:50000" command: ["db2start"] appruntime: build: ./apprunt
version: '3'
services:
db2server:
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
build: ./appruntime
depends_on:
- db2server
此docker compose文件使用docker compose
命令
- 映像是在运行时从
和db2server
目录中的Dockerfile构建的appruntime
- 这些映像将部署在主机中
我们如何在docker swarm中部署docker compose文件中定义的这些服务(使用构建选项)。简而言之,您不能将
build
命令用于docker stack deploy
从:
注意:在swarm模式下使用(版本3)Compose文件部署堆栈时,忽略docker stack
命令build
选项。docker stack
命令只接受预构建的图像
另一种方法是在部署swarm集群之前构建docker映像
使用命令创建docker图像;将创建的映像推送到(公共或私有)
docker注册表
;并在您的docker compose
文件中引用它。compose文件提供两种工具:docker compose
cli和docker stack
cli。“构建”选项在docker compose
中工作,但被堆栈命令忽略,“部署”选项在堆栈命令中工作,但被docker compose
忽略
Swarm不是为你打造形象而设计的。它假定您的图像在图像注册表中可用。群中的多个节点无法彼此共享图像,因此注册表(远程或在群上运行)是确保它们都可以提取相同的精确图像的唯一方法
因此,典型的例子是让Docker Hub根据代码提交自动构建映像,或者让CI/CD平台构建映像并推送到注册表。然后,您的
stack deploy
命令将从该注册表中提取正确的映像。如果有人仍在该注册表中,您可以通过设置image参数和build参数在compose中标记内置映像,如您在。因此,该文件应该如下所示:
version: '3'
services:
db2server:
image: <your registry here>/db2server
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
image: <your registry here>/appruntime
build: ./appruntime
depends_on:
- db2server
我发现构建、推送图像对于较小的开发修改非常耗时,是否有更省时的替代方案?您可以使用设置开发节点,您可以将堆栈限制为仅在该节点中运行,这样,如果您在同一节点上构建映像,就不必推送映像。如果
docker stack
支持诸如--build
之类的标志,这将非常好,这些标志仅在使用例如--orchestrator none
或--orchestrator singlenode
时可用
version: '3'
services:
db2server:
image: <your registry here>/db2server
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
image: <your registry here>/appruntime
build: ./appruntime
depends_on:
- db2server
docker-compose build
docker-compose push
docker stack deploy -c /home/docker/docker-compose.yml app