Skip to main content

Docker compose 文件中多个服务共用 build

wKevin

docker-compose.yml 文件中,如果你为两个或多个服务指定了相同的 build 配置,那么每个服务都会使用相同的构建上下文和 Dockerfile 来构建镜像。这意味着它们不会共享同一个镜像实例,而是每个服务会独立地构建自己的镜像。

具体来说,如果你的 docker-compose.yml 文件如下所示:

version: "3.8"

services:
service1:
build:
context: ./app
dockerfile: Dockerfile.gpu

service2:
build:
context: ./app
dockerfile: Dockerfile.gpu

在这种情况下,service1service2 都会从 ./app 目录和 Dockerfile.gpu 文件构建自己的镜像。虽然它们使用相同的构建上下文和 Dockerfile,但最终生成的镜像是独立的。

如果你希望两个服务共享同一个镜像实例,可以在 docker-compose.yml 中为一个服务指定 image 属性,并在另一个服务中引用这个镜像:

version: "3.8"

services:
service1:
build:
context: ./app
dockerfile: Dockerfile.gpu
image: my_shared_image

service2:
image: my_shared_image

这样,service1 会构建镜像并将其标记为 my_shared_image,而 service2 会直接使用这个已经存在的镜像。

总结一下:

  • 如果两个服务的 build 配置相同,它们不会共享同一个镜像实例,而是每个服务都会独立地构建自己的镜像。
  • 如果你希望两个服务共享同一个镜像实例,可以在一个服务中指定 image 属性,并在另一个服务中引用这个镜像。