多个图像,一个Dockerfile

时间:2018-04-10 12:54:57

标签: docker dockerfile

如何在一个Dockerfile中创建两个图像,它们只复制不同的文件。

这不应该产生两个图像 img1 & img2 ,而是生成两个未命名的图像 d00a6fc336b3 &的 a88fbba7eede

Dockerfile:

FROM alpine as img1
COPY file1.txt .

FROM alpine as img2
COPY file2.txt .

相反,这是 docker build。

的结果
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              d00a6fc336b3        4 seconds ago       4.15 MB
<none>              <none>              a88fbba7eede        5 seconds ago       4.15 MB
alpine              latest              3fd9065eaf02        3 months ago        4.15 MB

2 个答案:

答案 0 :(得分:7)

您可以使用docker-compose选项使用target文件:

version: '3.4'
services:
  img1:
    build:
      context: .
      target: img1
  img2:
    build:
      context: .
      target: img2

使用包含以下内容的Dockerfile

FROM alpine as img1
COPY file1.txt .

FROM alpine as img2
COPY file2.txt .

答案 1 :(得分:1)

您可以通过为每个要从Dockerfile(docker build中挑选出来的构建阶段name运行FROM alpine as name来从一个Docker文件构建多个映像。

默认情况下,docker从Dockerfile中的最后一条命令构建映像,但是您可以将构建目标定位到中间层。从问题中的示例Dockerfile扩展,可以:

docker build -t image1 --target img1 .

ref:https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target