基础镜像与多阶段构建

通常来说,我们都会使用alpine系统作为容器的基础镜像,因为其足够小,而且其提供了包管理工具,方便安装必要的基础包。

基础镜像

在构建基础镜像时,常常还需要安装必要的依赖包

时区设置

安装镜像容器运行所做时区的时区设置。

FROM alpine
RUN  apk --update --no-cache add tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

证书设置

容器内服务如果有远程 HTTP 请求服务,还必须安装相应的授权证书。

FROM alpine
RUN  apk --update --no-cache add ca-certificates

依赖库

根据镜像服务程序具体的依赖要求安装相应的外部库。如下:

FROM alpine
RUN  apk --update --no-cache add libc6-compat libc-dev libstdc++ 

多阶段构建

多阶段构建镜像,可以实现镜像构建与发布的过程分开,做到最大程度的最小化。

一个简单的多阶段构建样例:

FROM golang:1.12-alpine AS builder
# 设置Go编译参数
ARG LDFLAGS
ENV LDFLAGS ${LDFLAGS}
# 设置Go编译环境变量
ENV GO111MODULE=on
ENV GOPROXY=https://[Your.Proxy]
WORKDIR /app
COPY . .
RUN GOOS=linux go build -o main -ldflags "${LDFLAGS}"

FROM  alpine
# 安装必要的工具包
RUN  apk --update --no-cache add tzdata ca-certificates \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=builder /app/main /usr/local/bin
ENTRYPOINT [ "main" ]

← 镜像原理与最小化构建 None

评论