docker运行laravel项目,有没有必要安装一个新的容器运行消息队列?

目前有的容器:nginx、php、mysql,我想的是再单独安装一个ubuntu容器,专门运行消息队列

让PHP再次伟大
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 31

必须是分开的, 假如你要运行 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...

11个月前 评论
zhangrongwang 10个月前
lun1bz 10个月前
lun1bz 10个月前
seth-shi (作者) 10个月前
lun1bz 10个月前

在原有的容器中加入一个新的进程来处理消息队列,不大需要单独再创建一个 Ubuntu 容器吧。用Supervisor啥的

11个月前 评论

我是用的同一个镜像,启动多个容器来处理

github.com/dora-exku/php-env

11个月前 评论

可以有,想把压力分散就可以这么做

11个月前 评论

本地调试 不需要吧

11个月前 评论

消息队列有多种实现的后端,如果mysql就不需要,因为你已经有了。如果rabbitmq,则需要安装新的容器。

11个月前 评论
勇敢的心 (楼主) 11个月前

需要用到 Redis 或 MQ 这种软件的话,就再弄几个容器,不用都塞在 PHP 那个容器里。比如我用 laradock,用到哪些就启动哪些

11个月前 评论

意思是单独起一个容器ubuntu 来在这个容器里面安装消息队列的东?

11个月前 评论
skarner

常驻进程的,应该单独启一个进程来跑

11个月前 评论

建议分开,两个互不影响!

11个月前 评论

话说docker开发,你们的开发环境怎么做的配置.有相关链接吗

11个月前 评论
lun1bz 10个月前
sanders

用 sail 都解决了,还很简单。

11个月前 评论

再加上 reids、laravel-horizon两个容器

11个月前 评论
陈先生

docker 的原则就是一个进程一个容器,单一进程原则。 不要看网上都在搞的那个启动容器后直接启动 supervisor,然后 supervisor 拉起来 php-fpm & queue。都是些离谱的东西。简单说你想一个容器跑两个进程,就意味着你无法确保你的每一个进程都是健康的。一个 php-cli 容器吃不了几个内存的,建议加一个容器用来跑 queue

11个月前 评论
陈先生 (作者) 10个月前
lun1bz 10个月前
lun1bz 10个月前
陈先生 (作者) 10个月前
lun1bz 10个月前
lun1bz 10个月前
陈先生 (作者) 10个月前
lun1bz 10个月前
Pon 2个月前

当然是分开。 如果是本地自己使用的话,那什么还要使用容器来处理消费问题呢。 如果是做单元测试,那应该直接用方法来替代消费者? 如果是性能测试,那在自己的机器上多开容器是不是也挺折磨的 :grin:

11个月前 评论

必须是分开的, 假如你要运行 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...

11个月前 评论
zhangrongwang 10个月前
lun1bz 10个月前
lun1bz 10个月前
seth-shi (作者) 10个月前
lun1bz 10个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!