【问题标题】:Docker - Using PHP Cli base image for Cron containerDocker - 为 Cron 容器使用 PHP Cli 基础镜像
【发布时间】:2018-04-29 06:25:43
【问题描述】:

所以我最近在 Docker 和 Docker-Compose 上玩得很开心,但在这里需要社区的建议。我有一个 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,那么我不确定是否应该基于 php:7.0-cli-alpine 图像创建 Dockerfile 或使用替代方案?我在某处读到 CLI 映像不会在守护程序模式下运行,因此该容器可能会在运行 docker-compose up -d 后立即退出。

3) 假设我在上面的 (1) 和 (2) 上是正确的,我是否需要确保我在自定义 PHP-7.0 FPM 映像中安装的任何 PHP/PECL 扩展也安装在这个新的 cron 中图片?

感谢您的宝贵时间!

【问题讨论】:

    标签: php docker cron docker-compose


    【解决方案1】:

    好的,所以我在这方面取得了一些进展。我基于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
    

    构建它:docker build -t test/cron:latest .

    运行它:docker run --rm -it -v /home/magz/devtest/cron/cron.log:/var/log/cron/cron.log

    一分钟(左右)后,我在 cron.log 中得到了预期的输出 :)

    到目前为止,一切都很好。我尚未使用我的 Magento 站点的 docker-compose 设置对此进行测试,但我相信这会奏效。

    我剩下的唯一问题是是否确保新的 Cron 映像安装了与我的 PHP-FPM 映像相同的 PHP/PECL 扩展。

    【讨论】:

    • 我正在为 Magento 进行类似的设置。您是否能够弄清楚如何从 cron 容器进行通信以在不同的容器中执行 cron.sh / cron.php 文件?这就是我卡住的地方。
    • RUN /usr/bin/crontab -u www-data /crontab 在您的示例中应替换为 RUN /usr/bin/crontab -u www-data /mycrontab
    • 回答“是否确保新的 Cron 镜像与 php fpm 镜像具有相同的 PHP/PECL 扩展”。我的猜测是,如果 php cli 进程要运行与 web 应用程序类似的代码片段(转换图像、发送电子邮件、进行加密操作......),那么可能需要相同的 php 扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2017-12-31
    相关资源
    最近更新 更多