3

我使用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 中指定我需要首先构建共享映像,然后构建其他映像(然后运行它们的容器)?

4

1 回答 1

2

我认为你应该能够做到这一点。

码头工人撰写:

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-2 子目录中,这应该构建所有 3 个映像(按顺序)

于 2019-01-15T22:49:45.013 回答