我使用Docker multi-stage build,具体来说:
使用外部图像作为“舞台”</h3>
使用多阶段构建时,您不仅限于从之前在 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 中指定我需要首先构建共享映像,然后构建其他映像(然后运行它们的容器)?