关于我和 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

你可能感兴趣的:(关于我和 docker 和 k8s 和 golang 的故事)