问答 / 6 / 31 / 创建于 1年前
目前有的容器:nginx、php、mysql,我想的是再单独安装一个ubuntu容器,专门运行消息队列
必须是分开的, 假如你要运行 100 个 api 容器, 但是队列容器只需要 10 个。 这边我的项目有两个 Dockerfile Dockerfile
FROM phpswoole/swoole:php7.4-alpine # 一个安装 PHP 扩展的脚本 COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ RUN install-php-extensions pcntl redis pdo_mysql WORKDIR /var/www COPY . . RUN chmod -R 0777 storage && \ chmod -R 0777 bootstrap/cache && \ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \ composer install --optimize-autoloader --no-dev && \ php artisan config:cache && \ php artisan route:cache && \ php artisan view:cache && \ php artisan laravels publish --no-interaction CMD ["php", "bin/laravels", "start", "--env=product"]
Dockerfile.queue
FROM phpswoole/swoole:php7.4-alpine RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && cat /etc/apk/repositories # 快速安装 PHP 扩展 COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ RUN install-php-extensions pcntl redis pdo_mysql zip WORKDIR /var/www COPY . . RUN chmod -R 0777 storage && \ chmod -R 0777 bootstrap/cache && \ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \ composer install --optimize-autoloader --no-dev ## 安装 supervisor 守护进程 RUN apk add supervisor ## 修改配置文件 RUN mkdir /etc/supervisor.d/ && echo $'\n\ [program:laravel-worker] \n\ process_name=%(program_name)s_%(process_num)02d \n\ command=/usr/local/bin/php /var/www/artisan queue:work --sleep=3 --tries=3 \n\ numprocs=12 \n\ autostart=true \n\ autorestart=true \n\ ## 重定向错误到 stdout \n\ redirect_stderr=true \n\ stdout_logfile_maxbytes=10MB \n\ stdout_logfile=/var/www/storage/logs/queue.log \n'\ > /etc/supervisor.d/laravel-worker.ini ## 启动队列服务: 必须增加 --nodaemon 参数 CMD ["/usr/bin/supervisord", "--nodaemon", "-c", "/etc/supervisord.conf"]
参考我的博客链接: www.shiguopeng.cn/posts/2022030118...
在原有的容器中加入一个新的进程来处理消息队列,不大需要单独再创建一个 Ubuntu 容器吧。用Supervisor啥的
我是用的同一个镜像,启动多个容器来处理
github.com/dora-exku/php-env
可以有,想把压力分散就可以这么做
本地调试 不需要吧
消息队列有多种实现的后端,如果mysql就不需要,因为你已经有了。如果rabbitmq,则需要安装新的容器。
需要用到 Redis 或 MQ 这种软件的话,就再弄几个容器,不用都塞在 PHP 那个容器里。比如我用 laradock,用到哪些就启动哪些
意思是单独起一个容器ubuntu 来在这个容器里面安装消息队列的东?
常驻进程的,应该单独启一个进程来跑
建议分开,两个互不影响!
话说docker开发,你们的开发环境怎么做的配置.有相关链接吗
用 sail 都解决了,还很简单。
再加上 reids、laravel-horizon两个容器
docker 的原则就是一个进程一个容器,单一进程原则。 不要看网上都在搞的那个启动容器后直接启动 supervisor,然后 supervisor 拉起来 php-fpm & queue。都是些离谱的东西。简单说你想一个容器跑两个进程,就意味着你无法确保你的每一个进程都是健康的。一个 php-cli 容器吃不了几个内存的,建议加一个容器用来跑 queue
@lun1bz 我觉得你完全没有认真审题,我描述的使用 supervisor 来守护队列的情况是 FPM+Queue 在一个容器内,因为 Docker 无法守护多进程,很多人就会装一个 supervisor 来守护 fpm 和 queue。如果你启动一个单独的容器来运行队列服务,那和 supervisor 完全没关系,因为你的 queue:work 本身就是 pid 为 1 的进程了,Docker 会帮你守护。
当然是分开。 如果是本地自己使用的话,那什么还要使用容器来处理消费问题呢。 如果是做单元测试,那应该直接用方法来替代消费者? 如果是性能测试,那在自己的机器上多开容器是不是也挺折磨的 :grin:
我要举报该,理由是:
高认可度评论:
必须是分开的, 假如你要运行 100 个 api 容器, 但是队列容器只需要 10 个。 这边我的项目有两个 Dockerfile Dockerfile
Dockerfile.queue
参考我的博客链接: www.shiguopeng.cn/posts/2022030118...
在原有的容器中加入一个新的进程来处理消息队列,不大需要单独再创建一个 Ubuntu 容器吧。用Supervisor啥的
我是用的同一个镜像,启动多个容器来处理
github.com/dora-exku/php-env
可以有,想把压力分散就可以这么做
本地调试 不需要吧
消息队列有多种实现的后端,如果mysql就不需要,因为你已经有了。如果rabbitmq,则需要安装新的容器。
需要用到 Redis 或 MQ 这种软件的话,就再弄几个容器,不用都塞在 PHP 那个容器里。比如我用 laradock,用到哪些就启动哪些
意思是单独起一个容器ubuntu 来在这个容器里面安装消息队列的东?
常驻进程的,应该单独启一个进程来跑
建议分开,两个互不影响!
话说docker开发,你们的开发环境怎么做的配置.有相关链接吗
用 sail 都解决了,还很简单。
再加上 reids、laravel-horizon两个容器
docker 的原则就是一个进程一个容器,单一进程原则。 不要看网上都在搞的那个启动容器后直接启动 supervisor,然后 supervisor 拉起来 php-fpm & queue。都是些离谱的东西。简单说你想一个容器跑两个进程,就意味着你无法确保你的每一个进程都是健康的。一个 php-cli 容器吃不了几个内存的,建议加一个容器用来跑 queue
当然是分开。 如果是本地自己使用的话,那什么还要使用容器来处理消费问题呢。 如果是做单元测试,那应该直接用方法来替代消费者? 如果是性能测试,那在自己的机器上多开容器是不是也挺折磨的 :grin:
必须是分开的, 假如你要运行 100 个 api 容器, 但是队列容器只需要 10 个。 这边我的项目有两个 Dockerfile Dockerfile
Dockerfile.queue
参考我的博客链接: www.shiguopeng.cn/posts/2022030118...