Dockerfile 多阶段构建
参考链接
https://blog.csdn.net/baidu_23959681/article/details/82422225
1、编写一个拥有2个构建过程的dockerfile文件,编译的源码是我再github上的一个测试文件。
#第一阶段,创建一个ubuntu的容器,里面安装gcc编译工具,并下载源码编译
#对不同的架构需要安装相应的gcc工具链,这里演示x86平台
FROM ubuntu@sha256:3e83eca7870ee14a03b8026660e71ba761e6919b6982fb920d10254688a363d4 as builder
WORKDIR /work
RUN apt-get update &&\
apt-get install -y wget unzip gcc
RUN wget https://github.com/lshjn/docker-335x-test/archive/master.zip &&\
unzip master.zip &&\
cd docker-335x-test-master &&\
gcc -o test test.c
#第二阶段,新建基于busybox的镜像,里面包括程序运行需要的必要环境
FROM busybox@sha256:fe81fcea1790604cb78c3191507809fcaea34a7d81afeb71526ad8b138f81268
WORKDIR /work_test
COPY --from=builder /work/docker-335x-test-master/test .
CMD ["./test"]
2、执行镜像编译命令,并给镜像加了个标签 ubuntu-compile-test 编译成功会有如下打印,如图
docker build -t ubuntu-compile-test .

3、查看制作成功的镜像,size=208M的是第一阶段的镜像。size=5.21M的是第二阶段的最终应用程序执行镜像
docker images

4、新建一个容器
docker create -it ubuntu-compile-test /bin/sh
5、启动容器,status显示容器已经运行31秒
docker start c056e820d6ba

6、可以手动进入容器后台,手动运行./test可以看见程序里的打印信息
docker exec -it c056e820d6ba /bin/sh

7、如果要交叉编译,需要在Dockerfile第一阶段安装交叉编译工具链,并交叉编译应用程序,在第二阶段一定要选择平台对应的busybox镜像
浙公网安备 33010602011771号