在php-docker上新增自动启动脚本

简介

  • 突然有一些需求,本来在非容器中是很好实现的,但是在docker中就有点困难了,这是因为docker实际上还是一个容器线程,而不是万整的虚拟机。
  • 我的要求是在 php-docker 容器启动后自动启动 crond 服务和 supervisor 服务,本来很简单的事情搞了半天
  • 我甚至安装了,sysv-rc-conf 服务,但是一切都是徒劳的,没有反应。
  • 于是我只能想到基于 php-docker 重构一个服务镜像,这个镜像启动的时候会先运行一个 /lin/start.sh 脚本,这样不就可以让我想搞什么就高什么了么?

创建 Dockerfile

  • 这个就比较简单了,直接加入 /lin/start.sh 的运行。
FROM docker.cancanyou.com:5000/ksoft-php73:v15
ENTRYPOINT /lin/start.sh && docker-php-entrypoint --

构建新的镜像:

  • 直接上命令:
# 最后有一个 . 不要丢了,这是 Dockerfile 所在的目录,我的就是当前目录
docker build -t docker.cancanyou.com:5000/ksoft-php73:v17 .
  • 把镜像传到我的服务器上:
docker push docker.cancanyou.com:5000/ksoft-php73:v17
很Nice

直接构建新的容器服务

  • 删除旧的容器(不赘述)
  • 进入配置目录:cd /datadisk/git-files/docker-config/mysite/
  • 启动v17版本的新容器:
docker run -itd --privileged=true --name php-site.jk-wxopen.dev -i -d -v $PWD/../../:/var/www/html -v $PWD/config/php_etc:/usr/local/etc -p 9000:9000 --net=knet --ip 172.18.0.2 docker.cancanyou.com:5000/ksoft-php73:v17
  • 容器成功启动:
image.png
  • 查看了 crond 服务,这个服务我通过 /lin/start.sh 启动 /etc/init.d/cron status 显示 【ok】成功启动了,简直不要太顺利?

我的 /lin/start.sh 脚本

#!/bin/sh

/etc/init.d/cron start
/etc/init.d/supervisor start

重启容器后测试服务是否已经完整启动

  • 重启已经运行的 v17 容器。docker restart php-site.jk-wxopen.dev 我这重启有点慢呢,不过还是重启成功了。
  • 进入容器查看服务 docker exec -it php-site.jk-wxopen.dev bash
  • 然后分别查看了 cron、supervisor 服务,一切正常,简直不要太顺利。
一切正常,简直不要太顺利。

结束

  • 感谢阅读。

推荐阅读更多精彩内容