缺省状态下Alpine镜像下的timezone会设定成UTC,相较于东八区的CST北京时间来说本地时间比UTC早了8个小时。这篇文章介绍一下时区相关的基础知识以及如何在Alpine中将时间从UTC设定为CST。

时区基础概念

在处理时间相关的设定之前,最好首先了解如下几个基本概念:

GMT:格林尼治标准时间

GMT(格林尼治标准时间)是Greenwich Mean Time的缩写,这个时间所在的实际地址是伦敦郊区的皇家格林尼治天文台,由于本初子午线被定义为通过此处的经线,格林尼治时间就被作为标准时间使用。但是实际上地球的自转是不规则的,而且速度在减缓,所以GMT的时间和实际的时间之间存在者相应的差距,所以GMT也不是非常准确,无法精确到秒。

UTC:协调世界时

由于GMT时间不能足够精确,被称为协调世界时的UTC实际上是将原子钟提供的时间作为标准时间对外提供。原子钟的时间基本上非常精确,一般2000万年才有1秒左右的误差,这个完全能够满足目前系统对于时间的精确度需求。2010年2月,由美国国家标准局研制的铝离子光钟已达到37亿年误差不超过1秒的惊人水平,这一水平已经距今近10年的时间了,个人认为,UTC在地球毁灭之前精读很有可能已经够我们用的了。 需要注意的是UTC和GMT的关系,简单来说,UTC提供了基于标准GMT的准确时间,可以理解为GMT的准确版的时间,从1924年2月5日开始,格林尼治天文台每隔一小时向世界发放UTC时间。一般来说如果不需要精确到秒的情况下,GMT和UTC基本是等同的,由于精确计时的需求越来越多,UTC才应运而生。

时区

格林尼治标准时间是19世纪中期英国的基准时间,由于日不落帝国当时的世界地位和影响力,此时间为事实上的世界标准时间,当时出现的背景之一是为了1840年之后的铁路系统服务方便而产生的,以格林尼治的本初子午线为0度经线,将世界分为了24个时区,中国横跨多个时区,时间上统一使用东八区的时间。

夏令时

夏令时DST是Daylight Saving Time的缩写,正如它的名称一样是为了节约能源而进行时间调整的制度,夏天白昼较长,天亮较早,所以将夏季的时间调快一小时,早起早睡,节省能源(Saving Daylight),据称此项提议最早源自于本杰明富兰克林,那位印在100美元上的魅力男子,此项决议目前仍有100多个国家在执行,但是中国已不再其中。中国从1986年至1991年的六年中,每年从5月4日开始到9月14日开始实行夏令时,在1992年夏令时暂停实行。对于计算机的系统来说,这是一项减少bug的有效举动。因为不同的国家在夏令时的实施时间等方面都有着不同的规定,实在是给系统的运维增加作业的有效方式。在系统需要跨多个国家进行不中断的服务,并且系统之间具有实时连接性的实时性交易系统来说,时区与夏令时都是需要特别注意的关键因素。

Alpine镜像的缺省时区

使用Alpine的镜像启动一个容器并确认时间,便可以看出其与宿主机器之间的时间差以及时区的不同。

  • 宿主机器的时间与时区信息

[root@host132 ~]# date
Sat Sep 14 08:07:08 CST 2019
[root@host132 ~]#

  • Alpine容器的时间与时区信息

[root@host132 ~]# docker run --rm -it alpine date
Sat Sep 14 00:07:11 UTC 2019
[root@host132 ~]#

从上述的示例输出中可以看出,Alpine中使用的是UTC的时间,与CST的宿主机的本地时间相比刚好差了8个小时。

修改镜像

在Alpine镜像的基础之上,作如下修改,并重新构建镜像。

[root@host132 ~]# cd cst
[root@host132 cst]# ls
Dockerfile
[root@host132 cst]# cat Dockerfile
FROM alpine:3.10.2RUN apk update \&& apk add tzdata \&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo "Asia/Shanghai" > /etc/timezone
[root@host132 cst]#

重新构建镜像,生成名为alpinecst的本地镜像。

[root@host132 cst]# docker build -t alpinecst -f Dockerfile .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM alpine:3.10.2---> 961769676411
Step 2/2 : RUN apk update     && apk add tzdata     && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime     && echo "Asia/Shanghai" > /etc/timezone---> Running in 79968a559a5f
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
v3.10.2-51-g21ccaac25b [http://dl-cdn.alpinelinux.org/alpine/v3.10/main]
v3.10.2-42-g95d37f7648 [http://dl-cdn.alpinelinux.org/alpine/v3.10/community]
OK: 10336 distinct packages available
(1/1) Installing tzdata (2019b-r0)
Executing busybox-1.30.1-r2.trigger
OK: 9 MiB in 15 packages
Removing intermediate container 79968a559a5f---> 343a489eac27
Successfully built 343a489eac27
Successfully tagged alpinecst:latest
[root@host132 cst]#

大小较之前的镜像有所增加,那是由于对于tzdata以及update命令产生的内容未做清除导致,但是这并不是这篇文章所关注的内容,我们关注的是时区的变化。

  • 宿主机器的时间与时区信息

[root@host132 cst]# date
Sat Sep 14 08:27:43 CST 2019
[root@host132 cst]#

  • Alpine容器的时间与时区信息

[root@host132 cst]# docker run --rm -it alpinecst date
Sat Sep 14 08:27:45 CST 2019
[root@host132 cst]#

可以看到使用这种方式生成的镜像已经将时区调整为CST,和宿主机一致了。

参考内容

https://wiki.alpinelinux.org/wiki/Setting_the_timezone

Alpine镜像中时区的设置相关推荐

  1. Alpine镜像中not found引出的gnu libc和musl libc的争论

    在一个使用旧版的Oracle的JDK的Alpine版本的镜像时出现了问题,这篇文章作为后续的整理,以此为契机,简单介绍一下Alpine版本中的musl libc和gnu libc的设定. 事前准备 运 ...

  2. Docker 镜像,基于 alpine 系统的时区配置

    在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 ...

  3. alpine linux时区,Docker 镜像,基于 alpine 系统的时区配置

    在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 ...

  4. docker中使用golang:alpine镜像制作开启goweb的dockerfile

    docker中使用golang:alpine镜像制作开启goweb的dockerfile go的web代码 package mainimport("net/http""f ...

  5. 群晖nas中使用registry搭建docker镜像私人服务器以及设置群晖远程docker服务

    群晖nas中使用registry搭建docker镜像私人服务器以及设置群晖远程docker服务 折腾群晖服务器很有快感,一是因为自家群晖ds216+低功耗,24小时开机也不觉得费电,二是因为群晖系统也 ...

  6. 使用alpine镜像封装nginx 及php镜像

    环境说明 centos 7.6.1810 docker 18.09.7 alpine latest nginx 1.17.3 php 7.3.8 openssl 1.1.1c nginx docker ...

  7. Alpine镜像介绍

    Alpine 介绍 基础配置方法 网络配置 安装软件包apk 介绍 Alpine 操作系统是一个面向安全的轻型 Linux 发行版.它不同于通常 Linux 发行版,Alpine 采用了 musl l ...

  8. 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法

    路由器中虚拟服务器设置方法 内容精选 换一换 购买独享带宽或是共享带宽时都需要选择带宽大小,该值为出云带宽的最大上限.如果出现依赖于公网的web应用程序出现卡顿等情况,请先排查该弹性云服务器绑定的EI ...

  9. 在docker镜像中加入环境变量

    原文链接 前言 reference:https://vsupalov.com/docker-build-time-env-values/ 很多时候,我们需要在docker镜像中加入环境变量,本人了解的 ...

最新文章

  1. mysql中 group_concat长度限制
  2. 如何为你的 Github 博客添砖加瓦
  3. linux shell脚本关闭指定端口号的进程
  4. Zookeeper系列(一)
  5. LTE物理传输资源(2)-频带、信道带宽和频点号EARFCN
  6. CSS word-wrap强制换行截断长字符串
  7. ES6新特性_ES6语法糖class介绍与初体验_就是个语法糖而已---JavaScript_ECMAScript_ES6-ES11新特性工作笔记033
  8. element ui中el-image不显示图片
  9. JavaScript 上传文件并展示
  10. Linux内核学习书籍
  11. 计算机软件工程常用英语词汇,职业常用英文词汇
  12. Inverse design of 3d molecular structures with conditional generative neural networks(2022论文阅读)
  13. U盘插入电脑提示未能成功安装设备驱动程序,这个要怎么处理呢
  14. 中国与印度软件工程师之比较
  15. 人脸识别服务器端软件设计(delphi XE10)
  16. unicloud云开发---uniapp云开发(四)---本机手机号一键登录以及第三方登陆
  17. 单线双向模块_UART学习
  18. pyaudio usb playback_利用python工具包pyaudio实现录音
  19. Luzj's Zte 中兴认证客户端Linux版
  20. win10 蓝牙耳机配对成功,但无法连接

热门文章

  1. 数字签名,盲签名,环签名,群签名
  2. 手机电影正式亮相,华为手机不断提高影像力让手机拍电影成为可能
  3. 八卦走转--铁恩方老先生创立的健身方法
  4. 河南省计算机考试题目,河南省事业单位工勤技能考试试题(计算机信息处理)
  5. [转载]使用JDBC创建数据库对象
  6. 第三个计算机时代为,计算机三个时代的各自特点?
  7. 学校计算机室上机记录,学生上机记录表
  8. ARM base instruction -- 简单三级流水线
  9. 各国语言代码,对于多语言软件非常有用!
  10. 黑科技|感官世界与人机交互的盛宴 --未来虚拟现实养成记