云原生之容器编排实践-Docker使用JDK-Alpine镜像的时区问题导致定时任务不执行

简介: 云原生之容器编排实践-Docker使用JDK-Alpine镜像的时区问题导致定时任务不执行

9{$RSQC}JWITIOT]J`BRUXT.png

背景


偶然发现程序中的一个定时任务在 Docker 容器中部署后并没有按照既定的时间执行。经过排查后发现,定时任务与实际时间有关联,而容器内(openjdk:8-jdk-alpine)的时间与实际时间相差了8小时,应该是时区问题。


那么,如何解决容器内的时区问题呢?网上有给出各类方式解决这个问题,而且针对了不同的操作系统的镜像都给出了方案。我这里用的是比较简单的 JDK-Alpine 镜像,参考其官方文档后,直接在构建自己的镜像时设置好时区。


设置时区


根据 Alpine 的文档提示:docs.alpinelinux.org/user-handbo…Dockerfile 中:

T01KDHHZ%L2EVF~RTFD)}CU.png


RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*

完整Dockfile


FROM openjdk:8-jdk-alpine
RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Reference


后记


一开始安装启动 minikube 时报错,原因之一是说操作系统的内核版本不支持。。其实,后来我指定了 Kubernetes 的版本就可以了,也就没有用到升级后的内核: minikube start --force --kubernetes-version=v1.23.1 。这里记录下 CentOS7 升级内核版本的操作。

升级前的 CentOS7 升级内核版本信息如下:


# 系统版本信息
[root@k8s1 local]# uname -a
Linux k8s1 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# 内核版本信息
[root@k8s0 ~]# uname -r
3.10.0-1127.el7.x86_64

升级内核版本


[root@k8s1 local]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
获取http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
警告:/var/tmp/rpm-tmp.wEC7Ex: 头V4 DSA/SHA1 Signature, 密钥 ID baadae52: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:elrepo-release-7.0-3.el7.elrepo  ################################# [100%]
[root@k8s1 local]# yum --enablerepo=elrepo-kernel install -y kernel-lt
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: mirrors.tuna.tsinghua.edu.cn
 * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
elrepo                                                                                                                              | 3.0 kB  00:00:00     
elrepo-kernel                                                                                                                       | 3.0 kB  00:00:00     
(1/2): elrepo/primary_db                                                                                                            | 388 kB  00:00:00     
(2/2): elrepo-kernel/primary_db                                                                                                     | 2.1 MB  00:00:01     
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel-lt.x86_64.0.5.4.207-1.el7.elrepo 将被 安装
--> 解决依赖关系完成
依赖关系解决
=============================================================================================================================
 Package                           架构                           版本                                         源                                     大小
=============================================================================================================================
正在安装:
 kernel-lt                         x86_64                         5.4.207-1.el7.elrepo                         elrepo-kernel                          50 M
事务概要
=============================================================================================================================
安装  1 软件包
总下载量:50 M
安装大小:227 M
Downloading packages:
警告:/var/cache/yum/x86_64/7/elrepo-kernel/packages/kernel-lt-5.4.207-1.el7.elrepo.x86_64.rpm: 头V4 DSA/SHA256 Signature, 密钥 ID baadae52: NOKEY0:00 ETA 
kernel-lt-5.4.207-1.el7.elrepo.x86_64.rpm 的公钥尚未安装
kernel-lt-5.4.207-1.el7.elrepo.x86_64.rpm                                                                                           |  50 MB  00:00:11     
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org 检索密钥
导入 GPG key 0xBAADAE52:
 用户ID     : "elrepo.org (RPM Signing Key for elrepo.org) <secure@elrepo.org>"
 指纹       : 96c0 104f 6315 4731 1e0b b1ae 309b c305 baad ae52
 软件包     : elrepo-release-7.0-3.el7.elrepo.noarch (installed)
 来自       : /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改。
  正在安装    : kernel-lt-5.4.207-1.el7.elrepo.x86_64                                                                                                  1/1 
  验证中      : kernel-lt-5.4.207-1.el7.elrepo.x86_64                                                                                                  1/1 
已安装:
  kernel-lt.x86_64 0:5.4.207-1.el7.elrepo                                                                                                                  
完毕!

设置默认内核


先查看内核默认启动顺序,然后设置默认内核。


# 查看内核默认启动顺序
[root@k8s1 local]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg 
CentOS Linux (5.4.207-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-37761db4ce554629afd046b89323275e) 7 (Core)
# 默认启动的顺序是从0开始,新内核是从头插入(而5.4.207的位置是在0),所以需要选择0
[root@k8s1 local]# grub2-set-default 0

验证内核版本


Note:需要reboot重启生效。


# 重启前
[root@k8s1 local]# uname -r
3.10.0-1127.el7.x86_64
# 需要reboot重启生效
[root@k8s1 local]# reboot
# 重启后
[root@k8s1 ~]# uname -r
5.4.207-1.el7.elrepo.x86_64

If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
943 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1118 6
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
1051 6
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
773 16
|
存储 运维 Kubernetes
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(4)
阿里云数字新基建系列包括5本书,题材涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书中又一套重磅作品! 本书是阿里云容器服务产品线上实践的技术沉淀,主要包括理论篇和实践篇两部分内容。理论篇注重理论介绍,核心是Kubernetes on Cloud,即着重介绍Kubernetes和阿里云产品的结合。实践篇是疑难问题的诊断案例,希望通过案例来和读者分享Kubernetes深度问题诊断......
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(4)
|
运维 Kubernetes Cloud Native
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(3)
阿里云数字新基建系列包括5本书,题材涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书中又一套重磅作品! 本书是阿里云容器服务产品线上实践的技术沉淀,主要包括理论篇和实践篇两部分内容。理论篇注重理论介绍,核心是Kubernetes on Cloud,即着重介绍Kubernetes和阿里云产品的结合。实践篇是疑难问题的诊断案例,希望通过案例来和读者分享Kubernetes深度问题诊断......
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(3)
|
存储 弹性计算 Kubernetes
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(2)
阿里云数字新基建系列包括5本书,题材涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书中又一套重磅作品! 本书是阿里云容器服务产品线上实践的技术沉淀,主要包括理论篇和实践篇两部分内容。理论篇注重理论介绍,核心是Kubernetes on Cloud,即着重介绍Kubernetes和阿里云产品的结合。实践篇是疑难问题的诊断案例,希望通过案例来和读者分享Kubernetes深度问题诊断......
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(2)