昨天建立 demo 这个 静态执行档是使用 gcc 这个 build container,然後在 scratch 内直接 ADD
执行档
从 code 编译成为 执行档的过程中常需要常会用到许多其他额外的工具
接着 编译完成的执行档也可能会需要适当的环境或是其他背景才有办法『成功执行』
虽然昨天达成了建构一个 『瘦瘦的』image ,但是在建构的过程当中如果需要很多额外应用的话仍复杂
docker 在 17版後引进了一个叫做 multistage build 这个厉害的东东
multistage build 使我可以在单一 dockerfile 中编排复杂的 build 工作
可以定义一个 or 多个 parent image
可以建立编译过程中需要的所有环境
最後 只复制必要的素材到下一阶段,就能获得最低限度可以使用的轻量化 image
准备一个 app.c
#include <stdio.h>
void main(){
printf("Try multistage build");
}
准备一个 multistage Dockerfile
FROM gcc:7.2 AS builder
COPY src /src
RUN gcc -static -o /src/app /src/app.c && strip -R .comment -s /src/app
FROM scratch
COPY --from=builder /src/app .
CMD ["./app"]
资料夹分布如下
build
docker build -t multistage .
run
docker run --rm multistage
成功印出 app.c 中 printf 的内容
在这个 dockerfile 中,作了两次的 FROM
第一次建立一个静态执行档
第二次 FROM scratch 只 COPY 了 静态执行档
可以看到这次 build 出来的 image 跟 trytry/nginx image 的容量差异
232000/738 ≒ 314 倍
去除了大部分的 docker image history
增加了 携带/传送 的方便性
青蛙过河 教学原文参考:青蛙过河 这篇文章会介绍,如何在 Scratch 3 里使用多个角色,搭配重...
资讯安全管理制度运行过程中,会对即有的企业或机构文化带来一定的冲击。 顾问有教过、学员有学过都是真的...
撰写中 在求发展的道路上,又过了一日...... 这时,成员 18 人。 ...
storyboard 有三个概念是最容易混淆: xib:实际是个xml文件,xib = XML n...
强型闯入DenoLand[35] - 完赛心得 年度回顾 今年对笔者我来说是相当特别的一年,从升上...