多个映像,一个 Dockerfile



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

这不应该产生两个图像img1和img2而是产生两个未命名的图像d00a6fc336b3a88fbba7eede

Dockerfile:

FROM alpine as img1
COPY file1.txt .
FROM alpine as img2
COPY file2.txt .

相反,这是 docker 构建的结果。

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

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

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 .

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

(。

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

docker build -t image1 --target img1 .

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

最新更新