Docker组合和外部映像的多阶段构建

时间:2019-01-15 22:37:21

标签: docker docker-compose dockerfile docker-multi-stage-build

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

1 个答案:

答案 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个映像