码头工人的Cron容器 – 它们实际上如何工作?

前端之家收集整理的这篇文章主要介绍了码头工人的Cron容器 – 它们实际上如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经使用docker几个月了,我正致力于将各种不同的服务器映像停泊.一个一致的问题是许多服务器需要运行cron作业.关于那个在线(包括Stackoverflow)有很多讨论,但我并不完全理解它的机制.

目前,我正在使用主机的cron和docker exec进入每个容器来运行脚本.我创建了一个关于脚本名称和位置的约定;我的所有容器都有相同的脚本.这样可以避免主机的cron取决于容器.

基本上,每分钟一次,主持人的cron会这样做:

for each container
   docker exec -it 

这可行,但使容器依赖于主机.

我想要做的是创建一个cron容器,在每个其他容器中启动脚本 – 但我不知道相当于“docker exec”从一个容器到另一个容器.

我现在的具体情况是在MysqL容器中运行备份,并且运行cron作业Moodle需要每分钟运行一次.最终,我还需要通过cron做更多的事情. Moodle使用命令行PHP脚本.

从另一个容器中的一个容器启动脚本的“正确”的dockerized方法是什么?

更新:也许有助于提及我的具体用例,尽管随着时间的推移会有更多.

目前,cron需要执行以下操作:

>从MysqL执行数据库转储.我可以通过来自cron容器的MysqLdump TCP链接来做到这一点;这里的缺点是我无法将备份用户限制为主机127.0.0.1.我也许能够以某种方式通过卷将MysqL套接字导入到cron容器中.
>对Moodle安装进行定期维护. Moodle包含一个运行所有维护任务的PHP命令行脚本.这对我来说很重要.我可以通过一个卷来运行这个脚本,但Moodle并没有考虑到这种情况,我不排除竞争条件.另外,我不希望我的moodle安装在卷中,因为它使得更容易更新容器(请记住,在Docker中,当您使用新映像更新容器时,卷不会重新初始化).
>未来:对我的许多其他服务器执行例行维护,例如清理电子邮件队列等.

我的解决方案是:

>在容器内安装crond
>安装你的软
>将cron作为守护进程运行
>跑你的软

我的Dockerfile的一部分

FROM debian:jessie

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY .crontab /usr/src/app

# Set timezone
RUN echo "Europe/Warsaw" > /etc/timezone \
    && dpkg-reconfigure --frontend noninteractive tzdata

# Cron,mail
RUN set -x \
    && apt-get update \
    && apt-get install -y cron rsyslog mailutils --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

CMD rsyslogd && env > /tmp/crontab && cat .crontab >> /tmp/crontab && crontab /tmp/crontab && cron -f

描述

>设置时区,因为cron需要这个才能正常运行任务
>安装cron包 – 包含cron守护程序的包
>安装rsyslog包以记录cron任务输出
>如果要从cron任务发送电子邮件,请安装mailutils包
>运行rsyslogd
>将ENV变量复制到tmp文件,因为cron以最少的ENV运行任务而你的任务可能需要访问容器ENV变量
>将.crontab文件(包含您的任务)附加到tmp文件
>从tmp文件设置root crontab
>运行cron守护进程

我在容器中使用它并且工作得很好.

一过程每次容器

如果你喜欢这个范例,那么每个cron任务制作一个Dockerfile.例如

> Dockerfile – 主程序
> Dockerfile_cron_task_1 – cron任务1
> Dockerfile_cron_task_1 – cron任务2

并构建所有容器:

docker build -f Dockerfile_cron_task_1 ...
原文链接:https://www.f2er.com/docker/436901.html

猜你在找的Docker相关文章