项目

什么是项目(Docker Compose)

Docker Compose 是 Docker 的一个工具,专门用于定义和管理多容器的 Docker 应用程序,简化复杂应用的部署和管理。简而言之,它允许你通过一个 YAML 文件来描述一个应用的多个服务、网络、存储空间等配置,然后用一条命令就能启动所有服务。如果你在 UGOS Pro 上运行多个应用,或者希望简化部署过程,Docker Compose 将是一个不可或缺的工具。

适用场景

在 UGOS Pro 上使用 Docker Compose 通常适用于以下几种场景:

多服务应用的管理

如果您在 NAS 上运行一个复杂的应用程序,例如包含 Web 服务器、数据库、缓存、反向代理等多个服务的应用,使用 Docker Compose 可以将这些服务整合到一个配置文件中,方便统一管理和维护。例如,一个典型的 WordPress 项目可能包括 WordPress 容器和 MySQL 容器,使用 Compose 可以同时启动这两个服务,并确保它们之间的连接配置正确。

简化应用的部署

通过 Docker Compose 文件,您可以定义容器应用的各个服务及其所需的网络和存储空间。通过一键启动所有定义的服务,Docker Compose 会自动处理服务之间的依赖关系,从而简化了在Docker面板中部署复杂应用的过程。

应用的可移植性

使用 Docker Compose 可以使容器应用具有高度的可移植性。你可以将整个应用的配置打包成一个 Compose 文件,然后在不同的 UGOS Pro 设备上快速部署。

Docker Compose 文件结构

Docker Compose 文件通常命名为 docker-compose.yaml,它使用 YAML 语法来描述服务、网络和存储空间。一个基本的 Compose 文件结构如下:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "90:80"
    volumes:
      - ./html:/usr/share/nginx/html

  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - ./data:/var/lib/mysql

version:定义 Docker Compose 文件的版本。

services:定义应用中的各个服务。在这个例子中,定义了 webdb 两个服务。

image:指定服务使用的 Docker 镜像,例如 nginxmysql

ports:定义主机与容器之间的端口映射,90:80 意思是着将NAS主机的 90 端口映射到容器的 80 端口,容器可以通过NAS_IP+90端口访问NAS主机。

volumes:定义 NAS 存储空间目录与容器目录的映射关系,用于数据持久化。

environment:用于为容器中的服务设置环境变量,例如设置数据库密码、API 密钥和其他配置选项。

环境变量详解

在这个例子中:

  • MYSQL_ROOT_PASSWORD:设置 MySQL 数据库的根密码为 example

  • MYSQL_DATABASE:创建一个名为 mydatabase 的数据库。

  • MYSQL_USER:创建一个名为 user 的数据库用户。

  • MYSQL_PASSWORD:为上述用户设置密码为 password

这些环境变量会在容器启动时传递给 MySQL 服务,并用于初始化数据库。

存储空间挂载 (volumes) 的工作原理

在 Docker Compose 文件中,./html:/usr/share/nginx/html 是一种存储空间挂载配置,其中 ./ 代表当前 Docker Compose 文件所在的目录。

  • ./html:在这个上下文中,./ 代表当前 Docker Compose 文件所在的目录,./html指的是UGOS Pro上的一个目录,具体来说,是 Docker Compose 文件所在目录下的 html 子目录。

  • /usr/share/nginx/html:指的是容器内部的一个目录。在 Nginx 容器中,这是存放网站静态文件的默认路径。

通过这种配置,Docker 会将主机上的 ./html 目录挂载到容器中的 /usr/share/nginx/html 目录。这样:

  • 当你在主机的 ./html 目录下添加、修改或删除文件时,这些更改会立即反映在容器的 /usr/share/nginx/html 目录中。

  • 反之亦然,容器内的更改也会同步到主机的 ./html 目录。

相关链接:如何在 Docker Compose 配置文件中正确表示 volumes 挂载路径?

如何在 UGOS Pro 上使用 Docker Compose

假设您在 绿联NAS 上运行一个家庭媒体中心,您可以使用 Docker Compose 来管理 Jellyfin(媒体服务器)、MariaDB(数据库)、Redis(缓存)等服务。你可以通过一个 docker-compose.yml 文件来定义这些服务的依赖关系、存储空间挂载和网络配置,并通过简单的命令来管理整个媒体中心的运行。

操作步骤:

  1. 进入项目: 在 UGOS Pro 中打开 Docker 应用,点击【项目】>【创建】,填写以下内容:

  • 项目名称:为项目命名。

  • 存放路径:指定 Compose 配置文件 docker-compose.yaml 的存放路径。

  • Compose 配置:在配置中填写 YAML 配置信息。如果你已经有 YAML 文件,可以直接导入。

  1. 设置 PUID 和 PGID: 如果需要设置 PUID 和 PGID 值,建议使用推荐的当前用户的用户ID和用户组ID。这可以避免因权限不足导致的容器异常问题。

  2. 确认配置无误后,点击“立即部署”构建项目。

通过上述操作,你可以使用 Docker Compose 启动和管理整个家庭媒体中心。所有服务将在后台运行,并且服务之间的依赖关系已被正确配置。