dockerfile多阶段构建的几种用法
1.以数字标记每个构建阶段
创建Dockerfile,并在当前目录创建test1.tx和test2.txt
# vim Dockerfile
FROM alpine
COPY test1.txt /
FROM alpine
COPY test2.txt /
FROM alpine
COPY --from=0 /test1.txt /tmp
COPY --from=1 /test2.txt /tmp
执行构建并查看结果
docker build -t alpine-test .
docker run -it --rm alpine-test sh
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys test tmp usr var
/ # ls /test/
test1.txt test2.txt
2.以名称标记每个构建阶段
FROM alpine as build1
COPY test1.txt /
FROM alpine as build2
COPY test2.txt /
FROM alpine
COPY --from=build1 /test1.txt /test/
COPY --from=build2 /test2.txt /test/
执行结果与以上相同
3.从现有镜像复制文件
FROM alpine
COPY --from=busybox / /test/
执行构建并查看结果
docker build -t alpine-test .
docker run -it --rm alpine-test sh
/ # ls /test/
bin dev etc home root tmp usr var
使用dockerfile多阶段构建制作离线yum源
仓库地址:https://github.com/willzhang/docker-images/tree/master/yum-repo
#########################################################################################
FROM centos:7.4.1708 as build0
ENV EPEL_RELEASE=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
DOCKER_REPO=https://download.docker.com/linux/centos/docker-ce.repo
COPY yum-repo/pkg.list /
RUN mkdir /rpms \
&& yum install -y $EPEL_RELEASE yum-utils \
&& yum-config-manager --add-repo $DOCKER_REPO \
&& yum install -y --downloadonly --downloaddir=/rpms $(cat /pkg.list)
#########################################################################################
FROM centos:7.5.1804 as build1
ENV EPEL_RELEASE=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
DOCKER_REPO=https://download.docker.com/linux/centos/docker-ce.repo
COPY yum-repo/pkg.list /
RUN mkdir /rpms \
&& yum install -y $EPEL_RELEASE yum-utils \
&& yum-config-manager --add-repo $DOCKER_REPO \
&& yum install -y --downloadonly --downloaddir=/rpms $(cat /pkg.list)
#########################################################################################
FROM centos:7.6.1810 as build2
ENV EPEL_RELEASE=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
DOCKER_REPO=https://download.docker.com/linux/centos/docker-ce.repo
COPY yum-repo/pkg.list /
RUN mkdir /rpms \
&& yum install -y $EPEL_RELEASE yum-utils createrepo \
&& yum-config-manager --add-repo $DOCKER_REPO \
&& yum install -y --downloadonly --downloaddir=/rpms $(cat /pkg.list)
COPY --from=build0 /rpms/* /rpms/
COPY --from=build1 /rpms/* /rpms/
RUN createrepo /rpms/
#########################################################################################
FROM nginx:alpine
RUN mkdir /usr/share/nginx/html/rpms
COPY --from=build2 /rpms/* /usr/share/nginx/html/rpms/
COPY yum-repo/index.html /usr/share/nginx/html/
COPY yum-repo/nginx.conf /etc/nginx/conf.d/default.conf/