Dockerfile 小记之FROM
1.FROM
语法的使用
回顾之前项目写的dockerfile
文件
FROM golang:latest AS builder
#维护者信息
# MAINTAINER Dong Lei
# MAINTAINER 2781897595@qq.com
LABEL Dong Lei <2781897595@qq.com>
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64\
GOPROXY="https://goproxy.cn,direct"
# 类似于cd命令 cd 到工作目录:/build
WORKDIR /build
# 将代码复制到容器中 /build目录
COPY . .
# 将我们的代码编译成二进制可执行文件 app
RUN go build -o app .
###################
# 接下来创建一个小镜像
###################
FROM scratch
# 从builder镜像中把/dist/app 拷贝到当前目录
COPY ./config /conf
COPY --from=builder /build/app /
# 需要运行的命令
ENTRYPOINT ["/app","/conf"]
第一句就是FROM golang:latest
, 它的意思是选择一个基础镜像,我这里选择的是golang
系统的最新版。
几乎所有的Dockerfile文件,要做的第一件事就是要选择一个基础镜像。但可能出乎意料,上面的这句FROM golang:latest
并不是一个最优写法。
先来看有选择镜像的三个基本原则。
官方镜像优于非官方的镜像;
固定版本的Tag,而不是每次都使用latest;
功能满足,选择体积小的镜像;
拿
Golang
镜像为例,有些是带alpine
环境的,有些是不带的。他们的镜像体积大小相差 一半。这个原则不好把握,需要些经验。前提是满足你需求的情况下,所以这就要对镜像有充分的了解,然后再根据需求选择小的。(
alpine (Alpine Linux
)是一款独立的非商业性的通用Linux发行版、关注安全性、简单性和资源效率。它小巧的特点受广大IT人士的喜爱。)
注意这是基础镜像,在这个基础上,你还会加入很多自己的东西和应用。当你再次build时,镜像体积就会很大,越大的镜像,代表复杂度越高。所以让自己的镜像变的简洁,是我们的责任。
本作品采用《CC 协议》,转载必须注明作者和本文链接