Docker compose docker compose build尽可能多地构建每个docker文件

Docker compose docker compose build尽可能多地构建每个docker文件,docker-compose,Docker Compose,我有一个docker-compose.yml,其中包含使用同一Dockerfile(django、芹菜等)的多个服务。当我使用docker compose build时,它会多次构建容器 这使得我的“应用更改并重新启动”过程代价高昂。是否有一种只构建Dockerfile一次的好方法?我应该只构建一个容器并希望它更新所有容器吗 在我的例子中,我有5个Dockerfile实例,只是使用不同的命令、不同的卷…使用--build标志以及docker compose up使docker构建所有容器。如果只

我有一个docker-compose.yml,其中包含使用同一Dockerfile(django、芹菜等)的多个服务。当我使用docker compose build时,它会多次构建容器

这使得我的“应用更改并重新启动”过程代价高昂。是否有一种只构建Dockerfile一次的好方法?我应该只构建一个容器并希望它更新所有容器吗

在我的例子中,我有5个Dockerfile实例,只是使用不同的命令、不同的卷…

使用
--build
标志以及
docker compose up
使docker构建所有容器。如果只想构建一次,则可以命名在一个服务和其他服务中构建的映像,而不是使用dockerfile,您可以使用新构建的映像

version: '3'
services:

  wordpress-site-1:
    image: wordpress:custom
    build:
      context: ./wordpress
      dockerfile: wordpress.dockerfile
    container_name: wordpress-site-1
    links:
      - mysql-database
    depends_on:
      - mysql-database
    ports:
      - 8080:80

  wordpress-site-2:
    image: wordpress:custom
    container_name: wordpress-site-2
    links:
      - mysql-database
    depends_on:
      - mysql-database
      - wordpress-site-1
    ports:
      - 8888:80
注意:
build
image
用于第一次服务,而只有
image
用于第二次服务

这是一个生成两个wordpress容器的示例用法,其中一个是从上下文中指定的dockerfile构建的,并将生成的图像命名为
wordpress:custom
,另一个是从图像
wordpress:custom
构建的。容器名称不同,但在两个服务中使用的映像相同。一个服务使用构建上下文构建映像,另一个使用该映像。为了安全起见,您可以删除任何以前的
wordpress:custom
图像。这样wordpress-site-2就不会使用缓存图像


编辑1:扩展答案以显示如何使用同一图像构建两个容器。不能使用相同的容器名称。

Ha,我刚刚在之前的回答中发现了缺陷,我测试了运行测试的容器,该容器的副本上有卷,因此,我的回答是错误的/错误的。你能把你的答案和你的答案用相同的容器名称显示两个服务吗?@christophe31我已经更新了我的答案。不能使用相同的容器名称,但可以使用相同的映像运行不同的容器。嗯,我的问题是Docker文件不是托管的,而是在项目中…没有映像。如果我不能使用相同的容器名称,那么如何避免在使用相同dockfile的服务条目时应用构建?图像
wordpress:custom
由第一个服务在本地构建。它不是托管的,而是通过使用wordpress.dockerfile(代码中的第7行)在本地构建的,该图像用于其他服务,这里是
wordpress-site-2
。hoo,如果它有效,我会尝试接受这个答案,听起来很不错