Nic*_*ick 19 docker docker-compose
我docker-compose.yml指定了多个图像.其中两个图像使用相同的本地构建Dockerfile.它们共享相同的图像名称,但每个都有不同的命令.
在开发过程中,我经常使用docker-compose up --build重建图像.问题是docker构建了myimage两次 - 花费的时间超过了必要的时间.
有没有办法表达图像只需要构建一次?
version: '2'
services:
abc:
image: myimage
command: abc
build:
context: .
dockerfile: Dockerfile
xyz:
image: myimage
command: xyz
build:
context: .
dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)
ama*_*ath 26
根据用于构建的docker-compose文件文档,指定build:和image:用于第一个服务,然后仅image:用于后续服务.
这是您的示例的修改版本,仅构建映像一次(对于abc服务)并将该映像重用于xyz服务.
version: '2'
services:
abc:
image: myimage
command: abc
build:
context: .
dockerfile: Dockerfile
xyz:
image: myimage
command: xyz
Run Code Online (Sandbox Code Playgroud)
luc*_*ald 16
您可以伪造仅构建服务来构建映像,然后将依赖项用于实际工作人员。这样做的优点是,如果您想启动其他服务,则不会自动启动其中一项服务。
您需要添加一个图像名称来指定build:构建image:服务,并确保它终止并且永远不会自动重新启动。然后image:为depends_on: first_service您服务。
像这样:
version: '2'
services:
_myimage_build:
image: myimage
command: ['echo', 'build completed'] # any linux command which directly terminates.
build:
context: .
dockerfile: Dockerfile
first_service:
image: myimage
depends_on:
- _myimage_build
command: abc
second_service:
image: myimage
depends_on:
- _myimage_build
command: xyz
Run Code Online (Sandbox Code Playgroud)
感谢@amath 的回答。
确保先构建myimage镜像 ( _myimage_build),然后再尝试使用其他镜像:docker compose build _myimage_build
让@amath 的好答案更清晰一点
您需要添加一个图像名称来指定build:和image:用于第一个服务,然后image:和depends_on: first_service用于后续服务。
像这样:
version: '2'
services:
first_service:
image: myimage
command: abc
build:
context: .
dockerfile: Dockerfile
second_service:
image: myimage
command: xyz
depends_on:
- first_service
Run Code Online (Sandbox Code Playgroud)
感谢@DrSensor 的评论
| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |