Dockerfile :: 容器构建脚本语法解析
简单的介绍如何编写Dockerfile,Dockerfile是一个构建容器的基本的脚本,有自己的语法
FROM alpine as builder
RUN apk update ; \
apk add git go;\
export GOPATH=/opt/go; \
mkdir -p /opt/gohttpproxy
COPY . /opt/gohttpproxy
RUN cd /opt/gohttpproxy && ls -al && go mod download && go build . && ls -al
RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64 \
&& chmod +x /usr/bin/dumb-init
FROM alpine
COPY --from=builder /opt/gohttpproxy/gohttpproxy /usr/bin/gohttpproxy
COPY --from=builder /usr/bin/dumb-init /usr/bin/dumb-init
ENTRYPOINT [ "/usr/bin/dumb-init" , "--" ]
CMD ["gohttpproxy", "--addr", ":8123"]
我们这个示例,分了两阶段构建,来最大限度的压缩最终生成的镜像的文件大小。
以这个项目为例,最终生成的镜像大小为14MB,是不是很小。
FROM 关键字,在这个Dockerfile中出现了两次,分别代表 构建Builder,和最终容器
第一次为: FROM alpine as builder #意思是:自alpine镜像,创建一个名为builder的构建worker
第二次为: FROM alpine #这里开始到最终,就是最终的组装容器镜像的所有流畅
我们先看Builder阶段,就是第一个FROM开始到第二个FROM之间
RUN 命令是在镜像的shell里面,执行各种命令,你安装软件,下载源代码,总之各种操作都可以,就跟你平时手输入linux命令执行一样
COPY 是复制文件或者目录,注意 . 这个符号,表示你存放源代码的 当前目录,
COPY . /opt/gohttpproxy #这个命令的意思,是把我当前目录的源代码,一股脑都拷贝到镜像容器里面的/opt/xxx目录下面
然后你就可以继续用RUN命令编译了
编译阶段完成之后,到了组装阶段
我们可以看到就是把各种编译之后的静态可执行文件,拷贝到对应的位置。最终有ENTRYPOINT和 CMD
ENTRYPOINT 这里,我们用了dumb-init来作为容器的init系统,用它的好处是可以接受各种发给容器的指令,信号。推荐用它。
CMD是各种你需要执行和部署,以及运行的应用命令。后面还可以带参数。
到CMD这一步,你所有的构建步骤都完毕了,最终就生产出你需要的镜像了。
分类: 默认 标签: 发布于: 2022-01-30 15:36:51, 更新于: 2022-01-30 15:36:51