I use Docker 多阶段构建 https://docs.docker.com/develop/develop-images/multistage-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)构建流程二镜像
现在我可以运行“进程一”和“进程二”容器。
Problem
现在我想使用Docker Compose来自动执行“进程一”和“进程二”。
所以问题是:我如何在 Docker Compose 中指定我需要的first构建共享映像并then构建其他图像(然后运行它们的容器)?