简介
- 突然有一些需求,本来在非容器中是很好实现的,但是在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
直接构建新的容器服务
- 删除旧的容器(不赘述)
- 进入配置目录:
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
- 查看了 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 服务,一切正常,简直不要太顺利。
结束