Docker – 为Cron容器使用PHP Cli基础镜像
所以我最近对Docker和Docker-Compose一直很有兴趣,但需要社区的build议。 我有一个docker-compose文件,包含:
- 一个Nginx容器(基于
nginx:1.12-alpine
形象) - 一个PHP-7.0 FPM容器(基于
php:7.0-fpm-alpine
图片) - 一个MySQL容器(基于
alpine:3.6
镜像)
为了与Docker将进程分离成单个容器的原理保持一致,现在我想添加第四个容器来运行Cron。 crontab将会是简单的:
*/5 * * * * www-data sh /var/www/html/cron.sh
这是一个Magento网站,而cron通常需要体面的计算能力 – 因此,我认为将它放在自己的容器中会很好。
我有3个问题关于这个…
1)Magento的cron.sh运行一些检查,然后运行cron.php ,所以我认为我的新的cron容器必须安装php并运行 – 正确吗?
2)假设我需要在cron容器中运行php,那么我不确定是否应该创build一个基于php:7.0-cli-alpine
图像的Dockerfile或使用替代方法? 我已经读过CLI映像不能在守护进程模式下运行,所以这个容器可能会在运行docker-compose up -d
后立即退出。
3)假设我在上面的(1)和(2)中是正确的,我是否需要确保在我的自定义PHP-7.0 FPM映像中安装的任何PHP / PECL扩展也安装在这个新的cron映像中?
谢谢你的时间!
好的,所以我做了一些进展。 我创build了一个基于php:7.0-cli-alpine
的新图像php:7.0-cli-alpine
这里是我的Dockerfile的样子:
FROM php:7.0-cli-alpine COPY mycrontab /mycrontab RUN mkdir /var/log/cron RUN touch /var/log/cron/cron.log RUN chown -R www-data:www-data /var/log/cron RUN /usr/bin/crontab -u www-data /crontab CMD ["crond", "-f", "-l", "8"]
这里是mycrontab的样子:
*/1 * * * * echo "This is a test" >> /var/log/cron/cron.log 2>&1
build造它: docker build -t test/cron:latest .
docker run --rm -it -v /home/magz/devtest/cron/cron.log:/var/log/cron/cron.log
它: docker run --rm -it -v /home/magz/devtest/cron/cron.log:/var/log/cron/cron.log
一分钟后(或如此),我有一个预期的输出到cron.log 🙂
所以,到目前为止,这么好。 我还没有用我的Magento网站的docker-compose设置来testing这个,但是我相信这样做会起作用。
我唯一的问题是是否确保新的Cron映像具有与我的PHP-FPM映像相同的PHP / PECL扩展。