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镜像

  

  

  

  

  

  

posted on 2019-11-05 18:19  紫枫术河  阅读(433)  评论(0)    收藏  举报

导航