前言:
基于LNMP的开发工作中往往需要使用到一组容器,包括一些服务。这里的L为CentOS7/8(Tencent OS Server也可以),Nginx,PHP,Mysql,Redis。甚至还有使用gitlab容器等用来管理代码。根据个人的使用习惯,我一般会把这些容器的创建工作做成VM或实体开发机里的1个服务,让它们开机启动。走起,步骤如下:
- 提前编制好容器组。形成docker-compose.yml。本文为/home/docker/docker-compose.yml这个路径。docker-compose.yml编写需要读者另行学习。
- 编写docker.sh脚本供myContainers.service调用。本文为/home/docker/docker.sh这个路径;这个sh脚本代码如下:
#!/bin/bash OPS=$1 OLD_IFS="$IFS" IFS="," OPSLIST=(${OPS:="restart"}) IFS="$OLD_IFS" DKCMPS="/usr/local/bin/docker-compose -f /home/docker/docker-compose.yml" for OP in ${OPSLIST[@]}; do case "$OP" in start) ${DKCMPS} start ;; stop) ${DKCMPS} stop ;; restart) ${DKCMPS} restart ;; up) ${DKCMPS} up -d --force-recreate ;; *) echo $"${OP} bad option, Usage: {start|stop|restart|up}, split action queue with','" exit 1 ;; esac done
- 给这个docker.sh脚本可执行权限: chmod +x /home/docker/docker.sh
- 编写系统服务文档myContainers.service。myContainers.service文档放置于/etc/systemd/system路径下。myContainers.service的代码如下:
[Unit] Description=My Container Service Requires=docker.service After=docker.service [Service] Restart=always ExecStart=bash /home/docker/docker.sh start ExecStop=bash /home/docker/docker.sh stop ExecRestart=bash /home/docker/docker.sh up [Install] WantedBy=default.target
启动创建容器组服务:systemctl start myContainers.service
-
设置开机启动: systemctl enable myContainers.service
提示:当然,你也可以不需要docker.sh这个脚本,直接在myContainers.service里使用docker-compose 命令。需要修改的内容如下:ExecStart=/usr/local/bin/docker-compose start -f /home/docker/docker-compose.yml ExecStop=/usr/local/bin/docker-compose stop -f /home/docker/docker-compose.yml ExecRestart=/usr/local/bin/docker-compose -f /home/docker/docker-compose.yml up -d --force-recreate