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并不是一个最优写法。

先来看有选择镜像的三个基本原则。

  • 官方镜像优于非官方的镜像;

    image-20211127100217119

  • 固定版本的Tag,而不是每次都使用latest;

    image-20211127100322494

  • 功能满足,选择体积小的镜像;

    Golang镜像为例,有些是带alpine环境的,有些是不带的。他们的镜像体积大小相差 一半。

    这个原则不好把握,需要些经验。前提是满足你需求的情况下,所以这就要对镜像有充分的了解,然后再根据需求选择小的。(alpine (Alpine Linux)是一款独立的非商业性的通用Linux发行版、关注安全性、简单性和资源效率。它小巧的特点受广大IT人士的喜爱。)

    image-20211127100434794

注意这是基础镜像,在这个基础上,你还会加入很多自己的东西和应用。当你再次build时,镜像体积就会很大,越大的镜像,代表复杂度越高。所以让自己的镜像变的简洁,是我们的责任。

本作品采用《CC 协议》,转载必须注明作者和本文链接
CunWang@Ch
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!