如何在一个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
答案 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