Alpine镜像中时区的设置
缺省状态下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镜像中时区的设置相关推荐
- Alpine镜像中not found引出的gnu libc和musl libc的争论
在一个使用旧版的Oracle的JDK的Alpine版本的镜像时出现了问题,这篇文章作为后续的整理,以此为契机,简单介绍一下Alpine版本中的musl libc和gnu libc的设定. 事前准备 运 ...
- Docker 镜像,基于 alpine 系统的时区配置
在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 ...
- alpine linux时区,Docker 镜像,基于 alpine 系统的时区配置
在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 ...
- docker中使用golang:alpine镜像制作开启goweb的dockerfile
docker中使用golang:alpine镜像制作开启goweb的dockerfile go的web代码 package mainimport("net/http""f ...
- 群晖nas中使用registry搭建docker镜像私人服务器以及设置群晖远程docker服务
群晖nas中使用registry搭建docker镜像私人服务器以及设置群晖远程docker服务 折腾群晖服务器很有快感,一是因为自家群晖ds216+低功耗,24小时开机也不觉得费电,二是因为群晖系统也 ...
- 使用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 ...
- Alpine镜像介绍
Alpine 介绍 基础配置方法 网络配置 安装软件包apk 介绍 Alpine 操作系统是一个面向安全的轻型 Linux 发行版.它不同于通常 Linux 发行版,Alpine 采用了 musl l ...
- 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法
路由器中虚拟服务器设置方法 内容精选 换一换 购买独享带宽或是共享带宽时都需要选择带宽大小,该值为出云带宽的最大上限.如果出现依赖于公网的web应用程序出现卡顿等情况,请先排查该弹性云服务器绑定的EI ...
- 在docker镜像中加入环境变量
原文链接 前言 reference:https://vsupalov.com/docker-build-time-env-values/ 很多时候,我们需要在docker镜像中加入环境变量,本人了解的 ...
最新文章
- mysql中 group_concat长度限制
- 如何为你的 Github 博客添砖加瓦
- linux shell脚本关闭指定端口号的进程
- Zookeeper系列(一)
- LTE物理传输资源(2)-频带、信道带宽和频点号EARFCN
- CSS word-wrap强制换行截断长字符串
- ES6新特性_ES6语法糖class介绍与初体验_就是个语法糖而已---JavaScript_ECMAScript_ES6-ES11新特性工作笔记033
- element ui中el-image不显示图片
- JavaScript 上传文件并展示
- Linux内核学习书籍
- 计算机软件工程常用英语词汇,职业常用英文词汇
- Inverse design of 3d molecular structures with conditional generative neural networks(2022论文阅读)
- U盘插入电脑提示未能成功安装设备驱动程序,这个要怎么处理呢
- 中国与印度软件工程师之比较
- 人脸识别服务器端软件设计(delphi XE10)
- unicloud云开发---uniapp云开发(四)---本机手机号一键登录以及第三方登陆
- 单线双向模块_UART学习
- pyaudio usb playback_利用python工具包pyaudio实现录音
- Luzj's Zte 中兴认证客户端Linux版
- win10 蓝牙耳机配对成功,但无法连接