如何设置docker开机自启动,并设置容器自动重启

yizhihongxing

设置Docker开机自启动并设置容器自动重启可以使用systemd作为服务管理器来达成。下面是实现的具体步骤:

  1. 编写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”文件挂载到容器内。

  1. 创建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. 示例说明
    这里提供两个示例说明:

(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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • centos6.8下redis的安装和配置

    下载、安装 在redis官网可以获取到最新版本的redis 进入/usr/local/目录,执行如下命令 wget http://download.redis.io/releases/redis-4.0.2.tar.gztar xzf redis-4.0.2.tar.gzcd redis-4.0.2make 执行make构建redis时报如下错误,这是因为没…

    Redis 2023年4月13日
    00
  • MySQL——简介和安装

    1.1、MySQL简介 MySQL是一个关系型数据库管理系统 前世:瑞典MySQL AB 公司 今生:属于 Oracle 旗下产品 MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,并且开源!。 优点:体积小、速度快、总体拥有成本低,招人成本比较低,所有人必须会~…

    MySQL 2023年4月12日
    00
  • MySQL之mysqldump数据备份还原

    一 mysqldump指令实现数据备份、mysql指令实现数据还原  经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。DBA的核心目标是保…

    MySQL 2023年4月16日
    00
  • MySQL 及 SQL 注入与防范方法

    MySQL 及 SQL 注入与防范方法 在讲解 MySQL 及 SQL 注入与防范方法之前,我们先来理解一下 MySQL 和 SQL。 MySQL 是一款开源的关系型数据库管理系统,被广泛应用于 Web 应用程序开发的数据存储。SQL(Structured Query Language)是一种专门用来访问和操作关系型数据库的语言。 SQL 注入攻击是指攻击者…

    database 2023年5月22日
    00
  • 创建动态MSSQL数据库表

    创建动态MSSQL数据库表的完整攻略如下: 1. 创建表 创建表需要用到以下SQL代码: CREATE TABLE {表名} ({列名1} {数据类型1}, {列名2} {数据类型2}, …); 其中,花括号内的内容需要替换成实际的表名、列名和对应数据类型。例如,创建一个名为”students”的表,包含”id”(整数类型)、”name”(字符串类型)和…

    database 2023年5月21日
    00
  • 一文介绍mysql中TINYINT取值范围

    下面是详细的攻略: 介绍TINYINT TINYINT是MYSQL中一种数据类型,占用1个字节,可以存储有符号和无符号的整数。TINYINT在MYSQL中的范围和可取值如下: 有符号(Signed)TINYINT 最小值:-128 最大值:127 无符号(Unsigned)TINYINT 最小值:0 最大值:255 使用示例 示例1:创建一张表并插入数据 我…

    database 2023年5月22日
    00
  • MongoDB在系统数据库local中无法创建用户的解决办法

    题目:MongoDB在系统数据库local中无法创建用户的解决办法 问题描述 在使用MongoDB时,有时候需要在local数据库中创建用户进行其他操作。但是在操作时,可能会遇到如下错误提示: db.createUser({ "user" : "test_user", "pwd" : "t…

    database 2023年5月18日
    00
  • mysql 触发器语法与应用示例

    下面是一份关于“mysql 触发器语法与应用示例”的攻略: 什么是mysql触发器 MySQL触发器是一种特殊的存储过程,当特定的事件(如对一张表进行的 INSERT、UPDATE 和 DELETE 等操作)发生时,MySQL触发器会自动执行一个已经定义好的SQL语句集,因此它可以在数据库发生某些操作时进行响应并执行指定的操作。 触发器语法 其基本语法如下:…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部