首页 / 服务中心 / 教程中心 / 进阶教程 / 快速了解使用Docker和Docker Compose的区别,拓展NAS应用能力
快速了解使用Docker和Docker Compose的区别,拓展NAS应用能力
2025/02/25

在 NAS 系统中,Docker 是一款非常重要的应用程序,它可以极大地拓展 NAS 的应用能力。本指南将带您深入了解 Docker 及其配套工具 Docker Compose,帮助绿联 NAS 新手用户快速掌握这些工具的使用。

什么是 Docker?

Docker 是一个开源的容器引擎,它允许开发者将应用程序及其所有依赖打包到一个便携的容器中。这些容器可以运行在任何流行的 Linux 或 Windows 系统上,甚至支持虚拟化。与虚拟机不同,Docker 容器非常轻量,因此它们非常适合部署微服务以及构建 CI/CD(持续集成/持续交付)工作流。

简单来说:Docker 可以看作是类似虚拟机的工具,但它更轻量。您可以把 Docker 容器类比为一个小型的操作系统环境,比如 CentOS 和 MySQL 

Docker 的关键概念

为了帮助您更好地理解 Docker,以下是一些基本术语:

  • 镜像(Image):Docker 镜像是用于创建容器的只读模板。镜像包含了运行应用程序所需的所有内容:代码、运行时环境、库、环境变量、配置文件等。您可以把它想象成一个 Windows 的 .exe 安装包。

  • 容器(Container):容器是从镜像创建的可执行实体,可以被启动、停止、移动或删除。每个容器都是独立的,拥有自己的文件系统、网络接口和进程空间。可以把它类比为一个已经安装好的程序。

  • 镜像仓库(Repository):Docker Hub 是公共的 Docker 镜像仓库。在 UGOS Pro 系统中,镜像仓库默认仅展示 Docker Hub 官方镜像,若需下载其它仓库的镜像请按镜像名下载,查看 操作指引

Docker 的优势

  • 高效性:相比虚拟机,Docker 容器更轻量,启动速度更快。

  • 隔离性:每个容器都有自己的文件系统、网络栈和进程空间,确保容器之间相互隔离。

  • 易于维护:更新或回滚应用只需替换镜像,操作非常简单。

什么是Docker Compose(项目) ?

Docker Compose 是用于定义和运行多容器应用程序的工具。通过一个 YAML 文件(通常命名为 docker-compose.yml)配置应用程序的服务,然后使用一个命令即可启动和管理所有服务。

简单来说:Docker Compose 是 Docker 的一个工具,可以实现类似“全自动安装”的效果,帮助您避免每次手动配置。

使用 Docker Compose 的优点

  • 集中管理:通过一个配置文件管理多个容器和服务。

  • 自动化部署:只需一个命令即可启动、停止或重启所有容器。

  • 可移植性docker-compose.yaml 文件让您可以轻松地在不同环境中重复相同的配置。

Docker Compose 的基本结构

Docker Compose 文件通常命名为 docker-compose.yaml,它使用 YAML 语法来描述服务、网络和存储空间。

  • 文件扩展名可以是 .yml 或 .yaml,两者没有任何区别。

  • 在 docker-compose.yml 文件中,您可以定义服务、网络和存储空间的配置,保证应用程序的高效运行。

  • 您可以在【Docker>项目】页面创建或导入 docker-compose.yml 文件。

一个基本的 Compose 文件结构如下:

version:  # 指定 Docker Compose 文件格式的版本
services:  # 定义服务列表
   image: # 使用的镜像  
   ports:   # 指定端口映射  
   volumes:  # 存储空间挂载  
   environment:  # 设置环境变量    

如何写 Docker Compose 配置文件

以下通过一个简单的 docker-compose.yml 示例来讲解具体配置,展示如何通过 Compose 创建一个由 Nginx 服务器和 MySQL 数据库组成的 Web 应用程序:

services:  # 定义服务列表  
 web:  # 服务名称    
   image: nginx:latest  # 使用的镜像和版本  
   ports:  # 端口映射      
     - "8080:80"  # 将NAS的8080端口映射到容器的80端口    
   volumes:  # 存储空间挂载      
     - ./html:/usr/share/nginx/html  # 将当前目录下的 html 文件夹挂载到容器内的 /usr/share/nginx/html    
   depends_on:  # 依赖关系      
     - db  # web 服务依赖于 db 服务    
   environment:  # 设置环境变量      
     - NGINX_PORT=80  # 设置环境变量 NGINX_PORT 的值为 80    
   networks:  # 网络设置      
     - bridge  # 指定服务所属的网络。  

 db:  # 另一个服务名称    
   image: mysql:5.7  # 使用的镜像  
   environment:  # 设置环境变量      
     MYSQL_ROOT_PASSWORD: example  # 设置 root 密码      
     MYSQL_DATABASE: testdb  # 创建一个数据库      
     MYSQL_USER: testuser  # 创建一个用户      
     MYSQL_PASSWORD: testpass  # 设置用户密码    
   volumes:      
     - db_data:/var/lib/mysql  # 将数据卷挂载到容器内的 /var/lib/mysql    
   networks:  # 网络设置
     - host  # 指定服务所属的网络。

关键参数说明

services:

这是整个配置的核心部分,定义了多个服务,每个服务都代表了一个容器。

  • web 和 db 分别是两个服务的名字,可以根据需要自定义。

  • web和db等容器名需要和services有个递进关系,一般2个字符就行,容器和容器对应的environment等参数名字之间也需要有2个字符递进,environment参数和他的下级端口映射“- NGINX_PORT=80也有2个字符递进。递进可以2个字符以上,但是同级的参数递进的层次要相同。

image:

  • image 指定了服务使用的 Docker 镜像。镜像可以是从本地或 Docker Hub 仓库中获取,通常镜像名称后会带有版本号(例如 nginx:latest)。

ports:

  • 指定端口映射,格式为 【NAS端口】:【容器内端口】。nginx在容器内本身是80端口,将80端口映射到了NAS的 8080 端口。通过NAS的8080端口就能访问容器内的80端口。

volumes:

  • 指定存储空间挂载,可以将NAS上的目录挂载到容器中,或者使用命名的数据卷。

  • 对于 Nginx 服务,我们挂载了NAS上的 ./html 目录到容器的 /usr/share/nginx/html 目录。这样可以让容器映射数据都集中在容器项目根目录下。在UGOS Pro中,一般使用“./”来代表当前 Docker Compose 文件所在的目录。

  • 对于 MySQL 服务,我们使用了命名的数据卷 db_data 来持久化数据。

  • 在 Docker 中,命名的数据卷(named volumes)是 Docker 管理的一种特殊类型的卷,用于持久化存储数据。与前面的路径挂载映射不同,命名的数据卷由 Docker 管理,并且可以独立于容器存在。即使删除了使用该数据卷的所有容器,数据卷本身仍然保留。为了便于清理,一般我们不使用数据卷功能。

depends_on:

  • 指定服务间的依赖关系。在这个例子中,web 服务会在 db 服务启动之后再启动。

environment:

  • 设置环境变量。对于 MySQL 服务,设置了数据库相关的环境变量,如密码、数据库名等。

  • MYSQL_ROOT_PASSWORD: example:设置 MySQL 数据库的 root 用户密码为 example

  • MYSQL_DATABASE: testdb:在数据库中创建一个名为 testdb 的初始数据库。

  • MYSQL_USER: testuser:创建一个名为 testuser 的 MySQL 用户。

  • MYSQL_PASSWORD: testpass:为 testuser 用户设置密码为 testpass。这些环境变量帮助在容器启动时自动配置 MySQL 实例。

networks:

  • 指定服务所属的网络。在这个例子中,bridge 网络模式意味着容器将通过虚拟网络桥接到 NAS 的网络中。容器之间可以通过这个桥接网络通信。与 bridge 不同,host 网络模式直接使用 NAS 主机的网络,容器不会有独立的 IP 地址,而是使用主机的网络栈。这意味着 MySQL 服务可以直接通过主机的 IP 进行访问。了解《bridge 和host 网络模式的区别》

点击查看《Docker玩法》了解更多有关Docker的使用教程。


在线交流
关注微信公众号
服务热线:
0755-28066995
技术支持:
0755-21044617