多个图像,一个Dockerfile

Joh*_*ohn 9 docker dockerfile

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

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

Dockerfile:

FROM alpine as img1
COPY file1.txt .

FROM alpine as img2
COPY file2.txt .
Run Code Online (Sandbox Code Playgroud)

相反,这是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
Run Code Online (Sandbox Code Playgroud)

Seb*_*sch 11

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

version: '3.4'
services:
  img1:
    build:
      context: .
      target: img1
  img2:
    build:
      context: .
      target: img2
Run Code Online (Sandbox Code Playgroud)

使用您Dockerfile的以下内容:

FROM alpine as img1
COPY file1.txt .

FROM alpine as img2
COPY file2.txt .
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以从一个 Docker 文件构建多个映像,方法是针对要从 Dockerfile ( ) 中挑选的docker build每个构建阶段运行。nameFROM alpine as name

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

docker build -t image1 --target img1 .
Run Code Online (Sandbox Code Playgroud)

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