通常来说,我们都会使用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" ]