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

设置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日

相关文章

  • Docker搭建自己的PHP开发环境

    下面我将为您详细讲解“Docker搭建自己的PHP开发环境”的完整攻略。 1. 什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用依赖项和配置成为一个可移植的容器,然后发布到任何流行的Linux机器上,也可以实现虚拟化,称为容器虚拟化。 2. 安装Docker 安装Docker的过程比较简单,只需按照官方文档进行安装即可。…

    database 2023年5月22日
    00
  • mysql源码安装脚本分享

    下面是“mysql源码安装脚本分享”的完整攻略: 前言 本教程将介绍如何使用 mysql 源码安装脚本在 Linux 系统上安装 MySQL。使用源码安装的好处是可以更好地针对个人需求进行定制与管理,并且可以更加深入的学习 MySQL 数据库的底层原理。 环境准备 在开始操作之前,我们需要先准备好以下环境: 操作系统:Linux(Ubuntu/Debian/…

    database 2023年5月22日
    00
  • 常用SQL语句优化技巧总结【经典】

    讲解“常用SQL语句优化技巧总结【经典】”的完整攻略如下: 1. 理解SQL执行计划 SQL执行计划是指在执行SQL语句时,数据库系统通过查询优化器,根据表结构、索引等因素建立起来的一种执行路线。理解SQL执行计划是优化SQL的第一步。 在MySQL中,你可以通过 explain select语句 查看SQL的执行计划,进而判断SQL语句是否能够通过优化来提…

    database 2023年5月19日
    00
  • MySQL的CASE WHEN语句的几个使用实例

    MySQL的CASE WHEN语句是在查询时进行条件判断和赋值的工具。它可以让我们根据不同的条件进行求值,并根据其结果分支执行不同的操作。以下是几个使用实例。 示例1: 根据值进行条件判断与赋值 为了更好的演示我们的示例,我们新建一张stus表: CREATE TABLE stus ( id INT NOT NULL AUTO_INCREMENT PRIMA…

    database 2023年5月22日
    00
  • 通过Shell脚本批量创建服务器上的MySQL数据库账号

    下面是通过Shell脚本批量创建服务器上的MySQL数据库账号的完整攻略。 一、前提条件 在执行Shell脚本批量创建MySQL数据库账号之前,需要满足以下前提条件: 在服务器上安装MySQL数据库,并拥有root用户权限; 已经安装并配置好MySQL客户端程序(mysql和mysqladmin); 已经创建好目标数据库,并准备好数据库授权方式和授权对象。 …

    database 2023年5月22日
    00
  • SpringBoot项目整合Redis教程详解

    SpringBoot项目整合Redis教程详解 本文将介绍如何在SpringBoot项目中整合Redis,让你更好地使用Redis进行数据存储和访问。 1. 前置条件 在开始前,请确保你已经安装了Redis,并且已经安装了SpringBoot框架。如果你还没有安装,可以参考以下教程:Redis安装教程、SpringBoot官方文档。 2. 添加Redis依赖…

    database 2023年5月22日
    00
  • MongoDB查询操作限制返回字段的方法

    当我们使用MongoDB进行数据查询时,有时候并不需要返回所有文档中的所有字段信息,而是需要仅返回部分字段信息。这时可以通过限制返回字段的方式来提高查询效率和减少数据传输量。下面是MongoDB查询操作限制返回字段的具体方法: 1. 使用投影操作符 投影操作符($project)可以在查询时仅返回指定的字段。具体语法如下: db.collection.fin…

    database 2023年5月21日
    00
  • MySQL日期格式化yyyy-mm-dd详解(DATE_FORMAT()函数)

    MySQL中DATE_FORMAT()函数是一种将日期/时间格式化为指定格式的函数。该函数使用的语法为: DATE_FORMAT(date,format); 其中,date参数是日期/时间值,可以是一个实际的日期/时间值,也可以是常量或变量,而format参数是指定日期/时间格式的字符串。根据format参数不同的取值,日期/时间的输出也会不同。 下面我们通…

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