我使用Docker multi-stage build,具体是:
使用外部图像作为“舞台”
使用多阶段构建时, 不限于从您之前在您创建的阶段中复制 Dockerfile。您可以使用COPY --from指令从 单独的图像,可以使用本地图像名称,也可以使用标签 本地或Docker注册表上,或标签ID。 Docker客户端拉 图像(如有必要)并从那里复制工件。语法 是:
就我而言,我有三个Docker文件。
一个Dockerfile只是定义了一个映像,我将其用作构建阶段以在其他两个Dockerfile之间共享:
FROM ubuntu:bionic
## do some heavy computation that will result in some files that I need to share in 2 Dockerfiles
并假设我构建了上面的Dockerfile:
docker build -t my-shared-build -f path/to/shared/Dockerfile .
所以现在我有一个my-shared-build
图像,我在两个容器之间共享,它们的dockerfile看起来像:
FROM ubuntu:bionic
# do something
COPY --from=my-shared-build some/big/folder /some/big/folder
CMD ["/my-process-one"]
FROM ubuntu:bionic
# do something
COPY --from=my-shared-build some/big/folder /some/big/folder
CMD ["/my-process-two"]
我可以构建并运行它们。
回顾一下,我目前要做的是:
1)建立共享映像 2)建立过程一图 3)建立过程两个映像
现在我可以运行“进程一”和“进程二”容器。
现在,我想使用Docker Compose自动执行“进程一”和“进程二”。
所以问题是:如何在Docker Compose中指定需要首先构建共享映像,然后然后构建其他映像(然后运行它们的映像)容器)?
答案 0 :(得分:1)
我认为您应该能够做到这一点。
docker-compose:
version: '3'
services:
my-shared-build:
image: my-shared-build:latest
build: my-shared-build
my-process-one:
image: my-process-one:latest
build: my-process-one
depends_on:
- my-shared-build
my-process-two:
image: my-process-two:latest
build: my-process-two
depends_on:
- my-shared-build
- my-process-one
假设您的Dockerfile位于子共享目录my-shared-build,my-process-one,my-process-两个中,则应该按顺序构建所有3个映像