基于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制作定时执行任务镜像相关推荐

  1. dockerfile安装yum_Docker镜像-基于DockerFile制作yum版nginx镜像

    Docker镜像-基于DockerFile制作yum版nginx镜像 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. DockerFile可以说是一种能被Docker程序解释的脚本, ...

  2. Dockerfile制作jdk镜像和微服务镜像部署的最佳实践【Dockerfile实战】

    因为公司之前搭建测试服务器是我搭建的,其中包含使用docker来部署微服务项目,于是将这篇Dockerfile的最佳实践记录于此,为避免大家被坑,希望此文能帮你解除疑惑~ ps:因为是公司服务器不是个 ...

  3. Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像

    2019独角兽企业重金招聘Python工程师标准>>> 在前一篇文章:Docker入门系列之一:在一个Docker容器里运行指定的web应用 里, 我们已经成功地将我们在本地开发的一 ...

  4. ad如何镜像器件_使用 Dockerfile 制作镜像

    前面几篇文章已经给大家介绍了 Docker 的基本概念,相信大家也会使用 Docker 运行自己想要的容器了.但是只有学会制作镜像,才能将 Docker 应用到我们的项目中去.下面我们就来学习如何使用 ...

  5. Docker搭建个人网盘和私人仓库,创建Dockerfile制作镜像

    1.使用mysql:5.6和 owncloud 镜像,构建一个个人网盘. 2.安装搭建私有仓库 Harbor 3.编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1 ...

  6. 基于Dockerfile制作镜像

    <基于Dockerfile制作镜像> 目录... 2 一.Dockerfile简介及书写规则... 3 1.FROM(指定基础image)... 3 2.MAINTAINER(用来指定镜像 ...

  7. dockerfile制作mysql镜像

    dockerfile制作mysql镜像 1. 编写dockerfile_mysql5.7 2. 编写容器启动脚本setup.sh 3. 编写数据库文件 4.mysql权限设置命令privileges. ...

  8. dockerfile制作自定义字体的java环境镜像

    目录 1.简述 2.镜像制作(基于centos7) 2.1 前期准备 java8包 需要用到的字体 2.2 配置Dockerfile文件 2.3 打包镜像 2.4 验证 3.镜像制作(基于openjd ...

  9. 使用Dockerfile制作java运行环境的镜像

    1.基础环境Docker安装 1.1 创建安装脚本文件 vim install-docker.sh 1.2 写入以下内容 #!/bin/bash echo "------------开始安装 ...

最新文章

  1. 用python画月亮的代码-用Python画一个超级月亮
  2. python画折线图代码-Python折线图的分析过程和画图的方法
  3. Mysql计算出年纪
  4. [HNOIAHOI2018] 转盘(线段树维护单调栈)
  5. 关于伪类:after和content的实际应用
  6. win10浏览器闪退_Win10专业版下Edge浏览器闪退的多种解决技巧
  7. 基于Vue3在线商城(Vue3+VueCLI+VueRouter+vuex+axios+Bootstrap)
  8. 玩转web表单网页快速开发(❤建议收藏❤)
  9. AS常用指令,常用功能,以及常见问题
  10. 程序员该怎么学习---弱水三千,只取一瓢
  11. 20155201 2016-2017-2 《Java程序设计》第六周学习总结
  12. 什么是反射(Reflection)?它能做什么?
  13. 根据userAgent获取浏览器/操作系统/设备类型等信息
  14. 写在20110918:Eclipse中的outline标识以及常用快捷键
  15. xmanager5链接linux配置,xmanager连接linux5的方法
  16. 区块链主流开源技术体系介绍(转)
  17. 信用支付一路狂奔,未来这块蛋糕该怎么吃
  18. 基于 OTA 场景的电控信息安全研究
  19. 【每天学点管理】—绩效面谈的两个技巧
  20. 在windows下批量修改文件名

热门文章

  1. Python 中堪称神仙的6个内置函数
  2. VC中CTreeView控件的使用
  3. 戒烟戒的是“瘾”,EGP口含袋替烟产品尼古丁袋健康替烟
  4. 禁止滚动条滚动和移除禁止
  5. 配置http和https
  6. 今年大厂门槛高?阿里内部5份专属PDF带你激流勇进,厚积薄发,勇夺offer
  7. 沧海一粟 之 杏花村
  8. andriod 资源大全
  9. 做一个简单的java小游戏--单机版五子棋
  10. linux查看IP地址、网络端口的命令