设置Docker开机自启动并设置容器自动重启可以使用systemd作为服务管理器来达成。下面是实现的具体步骤:
- 编写Docker Compose文件
首先需要编写好你的Docker Compose文件,然后把它放在一个指定的目录下,可以参考以下示例:
version: "3"
services:
nginx:
image: nginx:latest
container_name: my_nginx
restart: always
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
这是一个简单的Nginx服务,镜像使用的是官方的最新版本,启用了容器自动重启,同时将宿主机的“nginx.conf”文件挂载到容器内。
- 创建systemd文件
创建systemd文件的具体步骤如下:
(1)在“/etc/systemd/system”目录下新建一个“docker-compose.service”文件,文件名可以自行定义。
(2)编辑docker-compose.service文件,写入以下内容:
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/path/to/your/compose/directory
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
- Description:服务的描述;
- Requires:必需的服务,也就是指定依赖Docker;
- After:在Docker启动之后启动该服务;
- Type:指定服务启动类型为oneshot;
- RemainAfterExit:在退出时仍然保持唤醒状态;
- WorkingDirectory:指定Docker Compose文件所在目录;
- ExecStart:指定启动命令,这里使用了docker-compose up -d命令,启动服务并且以后台方式运行;
- ExecStop:指定服务关闭命令,这里使用了docker-compose down命令;
-
TimeoutStartSec:指定启动命令的超时时间。
-
启动服务
使用下面的命令启动服务:
sudo systemctl daemon-reload #重新载入systemd文件
sudo systemctl enable docker-compose.service #启用容器自启动
sudo systemctl start docker-compose.service #启动服务
至此,Docker开机自启动已经配置完成。当然,在每次更新docker-compose.yml文件后,需要重新执行以下命令来使改动生效:
sudo systemctl daemon-reload
sudo systemctl restart docker-compose.service
- 示例说明
这里提供两个示例说明:
(1)使用Nginx作为负载均衡器,反向代理多个Web服务
version: '3.7'
services:
nginx:
image: nginx:stable
container_name: nginx
ports:
- "80:80"
- "443:443"
depends_on:
- web1
- web2
- web3
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/nginx/ssl
web1:
image: php:7.4-apache
container_name: web1
volumes:
- ./web1:/var/www/html
web2:
image: php:7.4-apache
container_name: web2
volumes:
- ./web2:/var/www/html
web3:
image: php:7.4-apache
container_name: web3
volumes:
- ./web3:/var/www/html
Certbot是一个用于自动部署Let's Encrypt SSL证书的神器,安装好之后可以使用官方提供的API接口自动获取和更新SSL证书:
version: '3.7'
services:
certbot:
image: certbot/certbot
container_name: certbot
command: certonly --webroot --webroot-path=/data/letsencrypt -d example.com -d www.example.com
volumes:
- ./letsencrypt:/etc/letsencrypt
- ./html:/data/letsencrypt
- ./certbot/log:/var/log/letsencrypt
entrypoint: /bin/sh -c "trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;"
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何设置docker开机自启动,并设置容器自动重启 - Python技术站