Docker alpine 添加cst时区并发布镜像到docker.io

Posted nickchou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker alpine 添加cst时区并发布镜像到docker.io相关的知识,希望对你有一定的参考价值。

本来准备用scratch来运行golang程序的,运行是可以但是遇到了时区的问题,且scratch是一个空镜像也不方便做定制化
alpine是精简版镜像(约5.6M),虽然默认不带timezone,但提供是包管理工具apk。也正是由于其精简性便于在alpine的基础上做定制化

测试看下alpine里的时间

docker pull alpine拉取镜像,再执行docker run --rm alpine date -R 查看alpine里的时间
看到时间后面的+0000就说明alpine默认是格林威治时间
技术图片

解决办法在alpine基础上下载时区的一些配置,然后打包成新的镜像,镜像比alpine会稍微大2M左右,然后基于定制化的alpine基础上再build自己想要的镜像来解决时间问题,步骤如下:

一、创建Dockerfile

vi Dockerfile

复制以下内容保存退出

FROM alpine

# 设置时区为上海
RUN apk -U add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime     && echo "Asia/Shanghai" > /etc/timezone     && apk del tzdata

二、根据创建好的Dockerfile Build镜像

创建好Dockerfile后直接build,注意在镜像名称前面要加上你的dockerid(我的dockerid是nickchou),不然后面没法push

docker build -t nickchou/alpinecst .

技术图片

build好之后查看build成功后的alpinecst镜像

docker images

技术图片

三、把本地镜像alpinecst上传到hub.docker.com,便于跨服务器使用,不用每次都编译

先登录,填写账号密码,提示success说明登录成功(没有账号可以去注册一个 https://hub.docker.com/

docker login

技术图片

登录成功后把本地镜像push到官方

docker image push nickchou/alpinecst:latest

push成功的截图
技术图片
登录自己的账户也可以看到镜像
技术图片
push成功后可以退出登录

docker logout

技术图片

四、测试镜像

先删除本地镜像,如果本地没有build的话跳过

docker rmi nickchou/alpinecst

重新远程拉最新镜像

docker pull nickchou/alpinecst

技术图片
分别查看alpine和nickchou/alpinecst的时区

docker run --rm  alpine date -R
docker run --rm  nickchou/alpinecst date -R

看到nickchou/alpinecst时间后面的+0800就说明已经是东八区了
技术图片

小结 :现在就可以基于这个镜像去发布golang等就不存在时区问题了,在Dockerfile第一行改为 FROM nickchou/alpinecst就可以用现成的了,当然你也可以自己打包一个。
步骤三里面的发布docker.io只是为了方便以后其他服务器也可以直接用,如果只有一台服务器,步骤三可以忽略

以上是关于Docker alpine 添加cst时区并发布镜像到docker.io的主要内容,如果未能解决你的问题,请参考以下文章

docker 下 alpine 镜像设置时区的有效办法

docker 下 alpine 镜像设置时区的有效办法

Docker openjdk-8-jdk-alpine 容器时间与jdk时区不同修改方法

Docker 基础镜像

sbt-native-packager:Alpine Docker Image 上的 Scala 应用程序失败,权限被拒绝

Nginx官方镜像私有化定制,实现时区同步及自动挂载配置文件到宿主机