Docker设置开机启动实现方法

发布时间:2023-05-20

一、Docker开机启动介绍

Docker是一种基于Linux容器的操作系统虚拟化技术,它可以很好地实现应用程序的封装和自动化部署。在开发和测试阶段,我们可以通过手动启动容器来完成应用程序的测试和调试;而在生产环境中,我们需要将容器自动化部署到一组服务器上,并确保它们能够在服务器重启后自动启动。 本文将详细介绍如何使用systemd来实现Docker容器的开机自动启动。

二、Docker容器设置开机启动

为了实现Docker容器的开机启动,我们需要在服务器上设置一个systemd服务单元。它将包含一个简单的脚本,用于启动和停止Docker容器。

1、创建systemd服务文件

打开一个终端,并使用root用户创建一个名为docker-container@.service的systemd服务文件:

sudo vi /etc/systemd/system/docker-container@.service

在文件中添加以下内容:

[Unit]
Description=Docker Container: %i
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a %i
ExecStop=/usr/bin/docker stop -t 2 %i
[Install]
WantedBy=default.target

在这个文件中,%i可以被替换成你想要启动的容器的名称。RequiresAfter语句用于将服务单元链接到Docker服务单元。Restart语句告诉systemd,在容器被关闭或失败后自动重启。ExecStartExecStop语句用于在服务单元启动和停止时分别启动和停止Docker容器。

2、启动systemd服务单元

一旦你创建了服务文件,就可以通过以下命令来启动服务单元:

sudo systemctl start docker-container@<container-name>.service

要替换<container-name>为你的容器名称,例如my-docker-container

3、设置systemd服务单元开机自动启动

现在,你可以使用以下命令将服务单元设置为开机自动启动:

sudo systemctl enable docker-container@<container-name>.service

要替换<container-name>为你的容器名称。

三、Docker Compose设置开机启动

Docker Compose是一个用于编排多个Docker容器的工具。它通过一个YAML文件来描述多个容器之间的依赖关系和配置信息,从而实现容器的组合启动。

1、创建Docker Compose文件

打开一个终端,并在应用程序目录中创建一个名为docker-compose.yml的文件:

sudo vi docker-compose.yml

在这个文件中,你可以定义多个容器,并设置它们的启动顺序和配置参数。以下是一个示例文件:

version: '3'
services:
  postgres:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: dbuser
      POSTGRES_PASSWORD: dbpass
  web:
    build: .
    depends_on:
      - postgres
    ports:
      - "8000:8000"
    links:
      - postgres
    restart: always
    environment:
      DATABASE_URL: postgres://dbuser:dbpass@postgres:5432/dbname

在这个示例文件中,我们定义了两个服务:postgreswebpostgres服务使用官方的PostgreSQL镜像,并设置了一个用户名、密码和默认数据库。web服务使用Dockerfile构建,并链接到postgres服务。我们还将Web服务的端口映射到主机的8000端口。

2、创建systemd服务文件

为了实现Docker Compose的开机启动,我们需要在服务器上创建一个systemd服务单元。它将包含一个脚本,用于启动和停止Docker Compose。

sudo vi /etc/systemd/system/docker-compose.service

在文件中添加以下内容:

[Unit]
Description=Docker Compose
Requires=docker.service
After=docker.service
[Service]
Restart=always
WorkingDirectory=/path/to/app
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down --volumes
[Install]
WantedBy=default.target

在这个文件中,/path/to/app应该指向你的应用程序目录,docker-compose up命令用于启动Docker Compose,docker-compose down --volumes命令用于停止Docker Compose和相关的网络和卷。

3、启动systemd服务单元

一旦你创建了服务单元,就可以使用以下命令来启动服务单元:

sudo systemctl start docker-compose.service

4、设置systemd服务单元开机自动启动

最后,你可以使用以下命令将服务单元设置为开机自动启动:

sudo systemctl enable docker-compose.service

四、总结

本文介绍了如何使用systemd来实现Docker容器和Docker Compose的开机自动启动。通过这些设置,我们可以轻松地将Docker容器应用程序部署到生产环境中,并确保它们能够自动启动并运行。