使用dockerfile制作定时执行任务镜像
基于debian系统制作定时执行任务镜像。制作过程遇到几个难题:
1.怎么让docker运行时,crontab的服务是启动状态?
2.dockerfile的环境变量怎么传递给脚本使用?
3.怎样在crontab中添加定时任务?
所有的问题都在下面的这个dockerfile文件中解决了。
1.编写dockerfile文件:
FROM debian:10
ADD test.sh /opt/test.sh
#获取cron下载资源列表
RUN sed -i '/jessie-updates/d' /etc/apt/sources.list # Now archived
#cron下载
RUN apt-get update && apt-get -y install cron
ADD stup.sh /etc/init.d/stup.sh
#将启动cron的脚本放在/ect/init.d/目录下,开机自启动cron,ENTRYPOINT执行脚本
ENTRYPOINT ["./etc/init.d/stup.sh"]
#添加环境变量到容器内部的/etc/profile中,crontab无法识别dockefile中ENV设置的环境变量
RUN echo 'HELLO_WORLD="hello world" \nLIGHT_HOUSE="light house" \nexport HELLO_WORLD \nexport LIGHT_HOUSE' >> /etc/profile
#为crontab添加定时任务,执行 . /etc/profile 使配置的环境变量生效
RUN echo '* * * * * . /etc/profile && /opt/test.sh >> /opt/test.log 2>&1 &' | crontab
2.编写cron启动脚本stup.sh:
#!/bin/bash
/etc/init.d/cron start
#将容器挂起,防止容器后台启动后自动退出
tail -f /dev/null
3.编写要执行的脚本内容,并输出到日志文件中:
#!/bin/bash
echo ${HELLO_WORLD} ${LIGHT_HOUSE}
4.构建镜像
docker build -t cron_test:0.1 .
5.启动docker容器
docker run -id --name crondt cron_test:0.1
6.进入容器(docker exec -it crond bash),查看cron服务运行状态(service cron status),查看设置的环境变量(cat etc/profile)
并查看定时任务输出的文件(cat opt/test.log),确认定时任务有执行(最好保证执行的脚本和输出日志都是绝对路径,不然定时任务可能无法执行
)
--------------------------------------------------------分割线----------------------------------------------------------------
对于第一个问题,做点补充,镜像启动时,其实是运行的docker-entrypoint.sh脚本,运行命令
ENTRYPOINT ['docker-entrypoint.sh'],因为我已经在dockersfile里面设置了ENTRYPOINT这个命令,且这个命令是只生效一次且是覆盖,以最后一次为准。所以,还有一种方法是在本地编辑一个docker-entrypoint.sh,在脚本里面添加启动cron的命令(/etc/init.d/cron),替换docker里面的脚本,这样运行docker时也会启动crontab服务。
dockerfile:
ADD docker-entrypoint.sh /usr/local/bin/docker-entrypoint.shRUN chmod 760 /usr/local/bin/docker-entrypoint.sh#注释掉
#ENTRYPOINT ["./etc/init.d/stup.sh"]
PS:把docker内部的docker-entrypoint.sh拷贝到本地,然后再添加启动命令。如果不这样操作可能会报错:warning: here-document at line 163 delimited by end-of-file (wanted `EOF')
使用dockerfile制作定时执行任务镜像相关推荐
- dockerfile安装yum_Docker镜像-基于DockerFile制作yum版nginx镜像
Docker镜像-基于DockerFile制作yum版nginx镜像 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. DockerFile可以说是一种能被Docker程序解释的脚本, ...
- Dockerfile制作jdk镜像和微服务镜像部署的最佳实践【Dockerfile实战】
因为公司之前搭建测试服务器是我搭建的,其中包含使用docker来部署微服务项目,于是将这篇Dockerfile的最佳实践记录于此,为避免大家被坑,希望此文能帮你解除疑惑~ ps:因为是公司服务器不是个 ...
- Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像
2019独角兽企业重金招聘Python工程师标准>>> 在前一篇文章:Docker入门系列之一:在一个Docker容器里运行指定的web应用 里, 我们已经成功地将我们在本地开发的一 ...
- ad如何镜像器件_使用 Dockerfile 制作镜像
前面几篇文章已经给大家介绍了 Docker 的基本概念,相信大家也会使用 Docker 运行自己想要的容器了.但是只有学会制作镜像,才能将 Docker 应用到我们的项目中去.下面我们就来学习如何使用 ...
- Docker搭建个人网盘和私人仓库,创建Dockerfile制作镜像
1.使用mysql:5.6和 owncloud 镜像,构建一个个人网盘. 2.安装搭建私有仓库 Harbor 3.编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1 ...
- 基于Dockerfile制作镜像
<基于Dockerfile制作镜像> 目录... 2 一.Dockerfile简介及书写规则... 3 1.FROM(指定基础image)... 3 2.MAINTAINER(用来指定镜像 ...
- dockerfile制作mysql镜像
dockerfile制作mysql镜像 1. 编写dockerfile_mysql5.7 2. 编写容器启动脚本setup.sh 3. 编写数据库文件 4.mysql权限设置命令privileges. ...
- dockerfile制作自定义字体的java环境镜像
目录 1.简述 2.镜像制作(基于centos7) 2.1 前期准备 java8包 需要用到的字体 2.2 配置Dockerfile文件 2.3 打包镜像 2.4 验证 3.镜像制作(基于openjd ...
- 使用Dockerfile制作java运行环境的镜像
1.基础环境Docker安装 1.1 创建安装脚本文件 vim install-docker.sh 1.2 写入以下内容 #!/bin/bash echo "------------开始安装 ...
最新文章
- 用python画月亮的代码-用Python画一个超级月亮
- python画折线图代码-Python折线图的分析过程和画图的方法
- Mysql计算出年纪
- [HNOIAHOI2018] 转盘(线段树维护单调栈)
- 关于伪类:after和content的实际应用
- win10浏览器闪退_Win10专业版下Edge浏览器闪退的多种解决技巧
- 基于Vue3在线商城(Vue3+VueCLI+VueRouter+vuex+axios+Bootstrap)
- 玩转web表单网页快速开发(❤建议收藏❤)
- AS常用指令,常用功能,以及常见问题
- 程序员该怎么学习---弱水三千,只取一瓢
- 20155201 2016-2017-2 《Java程序设计》第六周学习总结
- 什么是反射(Reflection)?它能做什么?
- 根据userAgent获取浏览器/操作系统/设备类型等信息
- 写在20110918:Eclipse中的outline标识以及常用快捷键
- xmanager5链接linux配置,xmanager连接linux5的方法
- 区块链主流开源技术体系介绍(转)
- 信用支付一路狂奔,未来这块蛋糕该怎么吃
- 基于 OTA 场景的电控信息安全研究
- 【每天学点管理】—绩效面谈的两个技巧
- 在windows下批量修改文件名