您现在的位置是:首页 > 技术教程 正文

docker打包使用supervisor进程管理启动php:7.4-fpm、laravel6、swoole的镜像

admin 阅读: 2024-03-16
后台-插件-广告管理-内容页头部广告(手机)

简介

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

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索