docker打包使用supervisor进程管理启动php:7.4-fpm、laravel6、swoole的镜像
后台-插件-广告管理-内容页头部广告(手机) |
简介
docker打包一个简单的supervisor管理php:7.4-fpm、laravel6、swoole进程的包。
大体步骤是容器启动后CMD将supervisor服务启动,再用supervisor管理php:7.4-fpm、laravel6、swoole进程
配置supervisord.conf
supervisor是通过在配置文件supervisord.conf来管理进程的,在supervisord.conf定义需要被管理进程的相关配置项
下面是一些常用的配置项:
- program:定义要监控的程序。
- command:指定要运行的命令。
- process_name:指定进程的名称格式。
- numprocs:指定要启动的进程数。
- autostart:当Supervisor启动时,这个程序是否自动启动 true or false。
- autorestart:表示当程序意外终止时,Supervisor是否自动重新启动它 true or false。
- startretries:指定在尝试启动进程时的重试次数。
- stopwaitsecs:指定了停止等待的时间。
- redirect_stderr:表示将标准错误重定向到标准输出。这样就可以在终端看到输出的错误信息。
其他: - stdout_logfile=/dev/stdout:将标准输出重定向到 /dev/stdout,这意味着程序的标准输出将被写入到标准输出设备。
- stdout_logfile_maxbytes=0:指定标准输出日志文件的最大字节数,这里设置为0表示没有大小限制。
- stdout_logfile_backups=0:指定保留的标准输出日志文件的备份数,这里设置为0表示不保留备份。
- stderr_logfile=/var/log/swoole-server.err.log:将标准错误重定向到 /var/log/swoole-server.err.log,这意味着程序的标准错误输出将被写入到指定的错误日志文件中。
- stdout_logfile=/var/log/swoole-server.out.log:将标准输出重定向到 /var/log/swoole-server.out.log,这意味着程序的标准输出将被写入到指定的输出日志文件中。
php:7.4-fpm
[program:php-fpm] //监控php-fpm command=php-fpm -R //php-fpm -R 运行php process_name=%(program_name)s_%(process_num)02d //指定了进程的名称格式 numprocs=1 //启动几个这个进程,我们启动一个就ok autostart=true //设置启动supervisor时启动该进程 startretries=3 //进程出错时重启,只重启三次 autorestart=true //进程出错自动重启 stopwaitsecs=60 //指定了进程停止时等待的时间 redirect_stderr=true //将错误输出重定向到标准输出- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
tips:
-
php-fpm -R 是用于以复用模式启动 PHP-FPM 进程的命令。在这种模式下,PHP-FPM 进程会在处理完一个请求后保持在内存中,以便能够更快地处理后续的请求。这种模式可以提高 PHP-FPM 的性能和效率。
-
%(program_name)s:表示使用程序的名称作为进程名称的一部分。
%(process_num)02d:表示使用进程编号作为进程名称的一部分,其中 %02d 是一个格式化字符串,表示使用两位数字来表示进程编号,不足两位时在前面补零。
举个例子,如果程序名称是 example,那么对应的进程名称可能是 example_01、example_02 等,根据进程编号的不同而变化。
这样的命名格式可以帮助您更清晰地识别和管理不同的进程实例。
cron
[program:cron] command=cron -f process_name=%(program_name)s_%(process_num)02d numprocs=1 autostart=true startretries=3 autorestart=true stopwaitsecs=60 redirect_stderr=true- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
laravel6
[program:laravel-worker] command=php /var/www/html/artisan serve --host=0.0.0.0 --port=8000 process_name=%(program_name)s_%(process_num)02d numprocs=1 autostart=true autorestart=true stopwaitsecs=60 redirect_stderr=true- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- –host=0.0.0.0:指定了要绑定的主机地址,这里是0.0.0.0,表示接受来自任何网络接口的请求。
- –port=8000:指定了要监听的端口号,这里是8000,表示服务器将在8000端口上接受传入的连接。
swoole
[program:swoole-server] command=php /var/www/html/artisan swoole:http start directory=/var/www/html autostart=true autorestart=true numprocs=1 stopwaitsecs=60- 1
- 2
- 3
- 4
- 5
- 6
- 7
配置Deckerfile
1 . 使用php:7.4-fpm作为原镜像
FROM php:7.4-fpm- 1
2 . 设置工作目录/var/www/html
WORKDIR /var/www/html- 1
3 . COPY supervisor配置文件
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf- 1
4 . 安装相关扩展
RUN apt-get update && apt-get install -y \ libzip-dev \ zip \ supervisor \ cron \ && pecl install swoole-4.6.7 \ && docker-php-ext-enable swoole- 1
- 2
- 3
- 4
- 5
- 6
- 7
这里是先更新了软件包,再安装了一系列必要包
- libzip-dev 、zip用于解压和启动后面安装的的composer
- supervisor 安装进程管理
- cron 是一个用于在Unix和类Unix操作系统上运行计划任务的工具。它允许用户在预定的时间执行命令或脚本,例如每天、每周或每月。Cron是一个非常强大和灵活的工具,常用于自动化系统维护任务、定期备份、日志清理等。Cron通过crontab文件来管理计划任务的配置。
- pecl install swoole-4.6.7 安装swoole,应为php的版本是7.4所以要安装指定版本的swoole
- docker-php-ext-enable swoole 告诉Docker在PHP中启用Swoole扩展
tips :这里的Unix是一种多用户、多任务操作系统,有许多版本,包括商业版本和开源版本。类Unix操作系统是指受Unix启发或与Unix兼容的其他操作系统,例如Linux、FreeBSD、Solaris等。
5 . 将laravel内容copy到工作目录
COPY . .- 1
6 . 安装composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer- 1
7 . 将swoole集成到laravel
RUN composer install && composer require swooletw/laravel-swoole- 1
因为Swoole扩展并不是Laravel框架的默认功能,所以这里要为laravel安装swoole扩展
8 . 设置容器启动时启动supervisor服务
CMD ["supervisord","-c","/etc/supervisor/supervisord.conf","-n"]- 1
启动supervisord进程,-c是使用/etc/supervisor/supervisord.conf配置文件来管理进程。-n参数表示以非守护进程模式运行supervisord。
以非守护模式运行目的是为了将supervisor放在前台运行让进程的输出直接显示在终端上方便查看
打包
####正常打包即可
docker build -t you_name:latest .- 1
运行
docker run -p 8888:8000 you_name:latest- 1
- 宿主机端口号映射上面laravel进程坚挺的端口号8000
终端看到日志输出四个进程已经全部成功启动
浏览器 ip+8888访问
supervisord.conf
[program:php-fpm] command=php-fpm -R process_name=%(program_name)s_%(process_num)02d numprocs=1 autostart=true startretries=3 autorestart=true stopwaitsecs=60 redirect_stderr=true # stdout_logfile=/dev/stdout # stdout_logfile_maxbytes=0 # stdout_logfile_backups=0 [program:cron] command=cron -f process_name=%(program_name)s_%(process_num)02d numprocs=1 autostart=true startretries=3 autorestart=true stopwaitsecs=60 redirect_stderr=true # stdout_logfile=/dev/stdout # stdout_logfile_maxbytes=0 # stdout_logfile_backups=0 [program:laravel-worker] command=php /var/www/html/artisan serve --host=0.0.0.0 --port=8000 process_name=%(program_name)s_%(process_num)02d numprocs=1 autostart=true autorestart=true stopwaitsecs=60 redirect_stderr=true # stdout_logfile=/var/www/html/storage/logs/worker.log [program:swoole-server] command=php /var/www/html/artisan swoole:http start directory=/var/www/html autostart=true autorestart=true numprocs=1 stopwaitsecs=60 # # stderr_logfile=/var/log/swoole-server.err.log # # stdout_logfile=/var/log/swoole-server.out.log- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
Dockerfile
FROM php:7.4-fpm WORKDIR /var/www/html COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN apt-get update && apt-get install -y \ libzip-dev \ zip \ supervisor \ cron \ && pecl install swoole-4.6.7 \ && docker-php-ext-enable swoole COPY . . RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN composer install && composer require swooletw/laravel-swoole CMD ["supervisord","-c","/etc/supervisor/supervisord.conf","-n"]- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |