-
文档概述
有些业务场景要在docker镜像中运行定时任务,此手册基于base镜像制作带crontab定时任务的docker镜像。
-
操作前准备工作
- 需要base镜像
- 需要安装crontabs软件包, 环境要有yum源
-
操作步骤
-
1. 新建Dockerfile文件
# mkdir -p /root/crontest; cd /root/crontest
# vim Dockfile
#导入base镜像
FROM cr.kylinos.cn/v10sp3-2403/kylin-server-v10-sp3-2403-general-alpha20-x86_64-init:202405
#安装cron需要yum源,准备kylin_x86_64.repo文件,并将其拷贝到容器内/etc/yum.repos.d/,赋予644权限
ADD kylin_x86_64.repo /etc/yum.repos.d/kylin_x86_64.repo
RUN chmod 0644 /etc/yum.repos.d/kylin_x86_64.repo
#安装crontab相关软件包
RUN yum install -y cronie crontabs
#将crontab定时任务文件拷贝到/etc/cron.d/目录
ADD crontab-file /etc/cron.d/user-cron
#拷贝业务脚本到容器内
ADD date.sh /home
#配置好权限,并起用定时任务
RUN chmod 0644 /etc/cron.d/user-cron && crontab /etc/cron.d/user-cron
RUN chmod +x /home/date.sh
#新建业务脚本的日志文件
RUN touch /var/log/date.log
#设置entrypoint,方便容器内通过systemd管理crond服务
ENTRYPOINT ["/sbin/init"]
-
2. 新建业务脚本
# cat /root/crontest/date.sh
#/bin/bash
echo "The time is:$(date)"
3. 新建crontab文件
# cat /root/crontest/
示例脚本,每隔1分钟打印一次date时间,记录到/var/log/date.log日志。
*/1 * * * * /usr/bin/sh /home/date.sh 2>&1 >> /var/log/date.log
4. 提供yum源文件
# cat /root/crontest/kylin_x86_64.repo
###Kylin Linux Advanced Server 10 - os repo###
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/base/$basearch/
gpgcheck = 0
enabled = 1
[ks10-adv-updates]
name = Kylin Linux Advanced Server 10 - Updates
baseurl = https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/updates/$basearch/
gpgcheck = 0
enabled = 1
注意:由于容器内缺少gpgkey校验文件,此处gpgcheck=0一定要为0.
5. 构建镜像
# docker build -t crontest .
6. 运行容器
# docker images |grep crontest
# docker run -itd --privileged=true --name crontest crontest:latest bash
# docker exec -it crontest bash
7. 运行cron定时任务
# crontab -l
# systemctl enable --now crond
# systemctl status crond
# tail -f /var/log/date.log
至此,运行crontab定时任务的docker镜像制作完成。