侧边栏壁纸
博主头像
惬意小蜗牛博主等级

海内存知己,天涯若比邻!

  • 累计撰写 54 篇文章
  • 累计创建 143 个标签
  • 累计收到 57 条评论

目 录CONTENT

文章目录

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

惬意小蜗牛
2021-07-20 / 0 评论 / 0 点赞 / 2,088 阅读 / 891 字 / 正在检测是否收录...

时区地图

https://www.timeanddate.com/time/map/

在 Java 开发中使用 Docker 镜像时,由于 alpine 提供的 linux 环境的镜像特别的小,只有 5M 左右,集成 openjdk 后的大小也在 100M 以内,因此应用非常广泛,在 Docker Hub 有大量基于 alpine 的镜像。
但是所有基于 alpine 的镜像使用的都是默认时区,因此在使用时,要对时区进行修改。

查看日期

首先可以进入 alpine 的镜像(默认 /bin/sh)查看日期:

[root@test-master01 ~]# docker run -i -t --rm alpine:3.9
Unable to find image 'alpine:3.9' locally
3.9: Pulling from library/alpine
31603596830f: Pull complete
Digest: sha256:414e0518bb9228d35e4cd5165567fb91d26c6a214e9c95899e1e056fcd349011
Status: Downloaded newer image for alpine:3.9
/ # date -R
Tue, 13 Oct 2020 07:39:20 +0000
/ #

修改日期

测试

[root@test-master01 ~]# docker run -i -t --rm alpine:3.9
# 安装时区设置
/ # apk add tzdata
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tzdata (2020a-r0)
Executing busybox-1.29.3-r10.trigger
OK: 9 MiB in 15 packages

# 查看已安装的时区
/ # ls /usr/share/zoneinfo
Africa        Atlantic      Canada        EST5EDT       Factory       GMT-0         Iceland       Japan         MST7MDT       PRC           ROC           US            Zulu          zone1970.tab
America       Australia     Chile         Egypt         GB            GMT0          Indian        Kwajalein     Mexico        PST8PDT       ROK           UTC           iso3166.tab
Antarctica    Brazil        Cuba          Eire          GB-Eire       Greenwich     Iran          Libya         NZ            Pacific       Singapore     Universal     posixrules
Arctic        CET           EET           Etc           GMT           HST           Israel        MET           NZ-CHAT       Poland        Turkey        W-SU          right
Asia          CST6CDT       EST           Europe        GMT+0         Hongkong      Jamaica       MST           Navajo        Portugal      UCT           WET           zone.tab

# 复制上海时区
/ # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 指定为上海时区
/ # echo "Asia/Shanghai" > /etc/timezone

# 验证
/ # date -R
# 输出,和当前时间对比
Tue, 13 Oct 2020 15:42:59 +0800

# 删除其他时区配置,节省空间
/ # apk del tzdata
(1/1) Purging tzdata (2020a-r0)
Executing busybox-1.29.3-r10.trigger
OK: 6 MiB in 14 packages

通过实验发现该方法可行,下面针对镜像(而不是镜像实例)进行修改。

修改

将下面的内容保存为 Dockerfile 文件

FROM alpine:3.9

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

保存为 Dockerfile 文件后,在 Dockerfile 目录执行命令构建镜像

## 注意最后面的点不可省略
docker build -t alpine-sh:3.9 .

通过上述方式创建后的镜像仍然很少,而且是符合需要的时区。

基于 alpine 的其他镜像的修改

例如 openjdk:8u191-jre-alpine3.9 是一个基于 alpine 的镜像。
openjdk:8u191-jre-alpine3.9 Dockerfile 地址:
https://github.com/docker-library/openjdk/tree/d93be18f4f2d5e8457169cac00e559d953b6028e/8/jre/alpine
在 openjdk:8u191-jre-alpine3.9 镜像中的时区也存在问题。

修改方式一

下载上面提供的 Dockerfile,稍作修改即可实现时区的定制

# 使用前面刚刚创建的 alpine-sh:3.9 即可修改时区
FROM alpine-sh:3.9

# 其他不变,全部省略
修改方式二

或者参考前面 alpine 的修改

FROM openjdk:8u191-jre-alpine3.9

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

所有基于 alpine 的镜像都可以采用类似的方法进行修改。

其他系统

例如 Docker 官方提供的 mysql
https://github.com/docker-library/mysql/tree/master/5.6
可以先进系统看时区,以及是否存在时区的配置文件,存在的情况下,直接修改即可。示例如下

FROM 10.10.1.243:5000/mysql:5.6.43

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo “Asia/Shanghai” > /etc/timezone

0

评论区