bashrc 方式一(容器太多)
1: 修改 ~/.bashrc 中新增
php7 () {
tty=
tty -s && tty=--tty
docker run \
$tty \
--interactive \
--rm \
--volume /website:/website:rw \
--workdir /website/project \
--network=dnmp_dnmp \
dnmp_php php "$@"
}
–network=dnmp_dnmp 重要, 不然连不上数据库, 可通过docker inspect php | grep NetworkMode
查看
dnmp_php php “$@” dnmp_php 是在 php7 函数中定义的一个变量,用于存储包含 PHP 的 Docker 容器的名称。当您调用 php7 函数时,它会在名为 dnmp_php 的 Docker 容器中执行您传递给函数的 PHP 命令,这些命令作为参数传递给函数并以 $@ 的形式传递给 docker run 命令中的 php 命令。
2: 宿主机 supervisor 中使用
command=/bin/bash -c "source /root/.bashrc && cd /website/project && php7 index.php admin/mq/receive_stock"
这样发现, 如果supervisor 有7个应用, 就会启动7个容器
方式二 (容器少, 但是supervisor每次reload后台程序没被杀死)
优化后
1: 先运行一个容器
docker run --interactive --tty --network=dnmp_dnmp --volume /website:/www:rw --workdir /www --name php74 --ip 192.168.0.33 dnmp_php
2: ~/.bashrc 脚本
php74 () {
tty=
tty -s && tty=--tty
docker exec $tty php74 php "$@"
}
note: 通过php74函数去进入docker php74的容器, 在执行后续操作
3: supervisor 配置文件
command=/bin/bash -c "source /root/.bashrc && php74 index.php admin/mq/receive_stock"
方式三(最优); 还可以按个人随意定制
再次优化
先启动一个容器, 直接用php容器也行;
supervisorctl 会自动拉起, 所以重启mq, 杀掉进程就行,
查问题需要进入容器, php index.php admin/Mq/aaa 这样监听这查看
// 运行一个php容器
docker run -it --network=dnmp_dnmp --volume /website:/www:rw --workdir /www --name php_pod --ip 192.168.0.11 dnmp_php
// 宿主机查看mq相关进程, 杀死进程等
ps aux | grep -i php | grep -i "admin/mq"
sudo pkill -f "admin/Mq"
sudo pkill -f "admin/Mq/aaa";
// 查看docker进程
docker top php_pod
// supervisor 监控
supervisorctl status
supervisorctl reload
// docker在宿主机执行php后台程序
docker exec php_pod /bin/sh -c "cd /www/website_test/ && php index.php admin/Mq/aaa"
supervisor 配置文件写法: 注意: 不加参数 -itd 这些; 因为docker本身就是在后台运行
[program:mq-test]
directory=/website/website_test/
command=docker exec php_pod /bin/sh -c "cd /www/website_test/ && php index.php admin/Mq/aaa"