Reputation: 725
How to create two images in one Dockerfile, they only copy different files.
Shouldn't this produce two images img1 & img2, instead it produces two unnamed images d00a6fc336b3 & a88fbba7eede
Dockerfile:
FROM alpine as img1
COPY file1.txt .
FROM alpine as img2
COPY file2.txt .
Instead this is the result of 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
Upvotes: 49
Views: 69680
Reputation: 544
for several images I usually build a fake image that requires them all
FROM scratch AS tmp
COPY --from=web /etc/passwd /
COPY --from=ocr /etc/passwd /
COPY --from=postgres /etc/passwd /
COPY --from=requests /etc/passwd /
COPY --from=cron /etc/passwd /
docker build "."
after that I perform docker build --target stage -t export-name "."
for each required stage
Upvotes: -1
Reputation: 2014
You can build multiple images from one Docker file by running docker build
for each build stage name
want to pick out of the Dockerfile (FROM alpine as name
).
By default docker builds the image from the last command in the Dockerfile, however you can target the build to an intermediate layer. Extending from the example Dockerfile in the question, one can:
docker build -t image1 --target img1 .
ref: https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target
Upvotes: 45
Reputation: 43564
You can use a docker-compose
file using the target
option:
version: '3.4'
services:
img1:
build:
context: .
target: img1
img2:
build:
context: .
target: img2
using your Dockerfile
with the following content:
FROM alpine as img1
COPY file1.txt .
FROM alpine as img2
COPY file2.txt .
Upvotes: 55