📜  docker iniciar contenedor automáticamente (1)

📅  最后修改于: 2023-12-03 15:00:28.786000             🧑  作者: Mango

Docker 自动化启动容器

对于那些需要在容器中运行长时间运行的服务的应用程序,我们希望 Docker 能够自动化地管理和启动容器。在这篇文章中,我们将介绍如何使用 Docker Compose 和 Systemd 自动化启动、管理和监视 Docker 容器。

什么是 Docker Compose?

Docker Compose 是一个使用 YAML 文件来定义容器的服务、网络和卷等属性的工具。Docker Compose 可以让你轻松地在多容器环境下部署应用程序,例如 Web 服务、数据库、消息队列等等。

下面是一个简单的 Docker Compose 配置文件示例:

version: "3"

services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    restart: always

在上面的配置文件中,我们定义了一个名为 web 的服务,其中:

  • build: . 表示构建 Docker 镜像使用的 Dockerfile 文件位于当前目录(`.)下;
  • ports: - "5000:5000" 表示将容器的 5000 端口映射到主机的 5000 端口;
  • volumes: - .:/code 表示将当前目录(.)下的文件和文件夹挂载到容器的 /code` 文件夹中;
  • restart: always 表示容器将自动重新启动。
使用 Systemd 启动容器

可以使用 Systemd 单元文件来自动启动、管理和监视 Docker 容器。下面是一个简单的 Systemd 单元文件的例子:

[Unit]
Description=My Docker Compose Application
Requires=docker.service
Requires=docker-compose.service
After=docker.service
After=docker-compose.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/my-app
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down

[Install]
WantedBy=multi-user.target

在上面的 Systemd 单元文件中,我们定义了一个服务,其中:

  • Description 表示服务的描述;
  • Requires 表示该服务依赖于 docker.servicedocker-compose.service 服务;
  • After 表示该服务依赖于 docker.servicedocker-compose.service 服务,并在它们之后启动;
  • Type 表示该服务是一个一次性的服务;
  • RemainAfterExit 表示该服务在退出后应该继续存在;
  • WorkingDirectory 表示该服务的工作目录;
  • ExecStart 表示该服务启动时要执行的命令;
  • ExecStop 表示该服务停止时要执行的命令。

在上面的 Systemd 单元文件中,启动和停止 Docker 容器的命令分别是 docker-compose up -ddocker-compose down

为了使用该服务,将文件保存为 /etc/systemd/system/my-app.service,并运行以下命令:

sudo systemctl daemon-reload
sudo systemctl enable my-app.service
sudo systemctl start my-app.service

现在,Docker Compose 应用程序将在系统启动时自动启动。

总结

在本文中,我们介绍了如何使用 Docker Compose 和 Systemd 自动启动和管理 Docker 容器。通过这种方式,我们可以轻松地部署容器化应用程序,并确保它们可以自动化地启动和停止。