关于我和 docker 和 k8s 和 golang 的故事

1. 编译镜像:尽量减小大小的故事

  1. 最小的镜像是 alpine,比 ubuntu,centos,redhat 小很多,很多,很多(仅 4M 多)。我正打算用这个的时候,
  2. 发现了空镜像 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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容