如何在一个Dockerfile中创建两个映像,它们只复制不同的文件。
这不应该产生两个图像img1和img2,而是产生两个未命名的图像d00a6fc336b3和a88fbba7eede
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