1. 编译镜像:尽量减小大小的故事
- 最小的镜像是 alpine,比 ubuntu,centos,redhat 小很多,很多,很多(仅 4M 多)。我正打算用这个的时候,
- 发现了空镜像 scratch,4M 也省了
现在我用
golang:1.16.4-alpine
用来编译程序,对编译好的 bin 文件,打包进 scratch
镜像中
scratch
镜像作为最终包
2. 使用镜像:时区问题
跑起来程序后,发现有关时间计算的方法全部都差 8 小时
最后定位到:镜像的时间时区为 UTC,因为缺系统时区配置文件,fxxxxxxxxxxxxxxxxxxxxxxxxxk
你别忘了咱们为了减小尺寸,是空镜像
那么:
如果你用 alpine:
Dockerfile 中加上设置时区的代码(增加识别时区的文件)
# 设置时区为上海
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata
如果你用 scratch:
Dockerfile 中加上设置时区的代码(增加识别时区的文件)(从构建的 golang1.16.4-alpine 镜像中复制过来)
# 复制时区文件,没有这个会导致镜像中的时区不正确的问题(始终是 UTC)
COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo
--from=build
这个build
是这里的名字,对上就行了,随便改
FROM golang:1.16.4-alpine as build