0

(萌新折腾笔记)简单讲解系列—认识Docker Compose

发表于:5 天前 攻略分享 69
本帖最后由 EWEDL 于 2024-10-14 18:47 编辑
萌新折腾笔记)简单讲解系列—认识Docker Compose
什么是 Docker Compose?
简单来讲,Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具!!!
那么它的优势在哪里?此处列出个人认为最重要的四点,也是最常用的四点:

  • 集中配置:它通过一个 YAML 文件(通常是 docker-compose.yml),可以集中定义和配置多个服务及其依赖关系。使用 docker-compose 命令可以一次性启动所有定义的服务,简化了多容器应用的启动过程。
  • 清晰易读:它的YAML 文件格式清晰,易于阅读、理解和维护。同时,它还可以对环境变量进行配置,便于在不同环境中切换使用。
  • 灵活的服务定义:它可以定义服务之间的依赖关系,确保服务按正确的顺序启动。同时,还可以自动创建和管理 Docker 网络,使服务之间可以方便地相互通信。
  • 强大的命令行工具:它提供了丰富的命令行工具,如 up、down、ps、logs 等,方便管理和监控多容器应用。日志功能可以方便地查看和管理各个服务的日志输出,便于调试和问题排查。

Docker 安装方式
目前Docker容器的安装无非三种方式:

  • UI(用户界面)安装(很直观,一看就会,但设置繁琐。不讲~~)
  • Docker CLI 命令安装:需要在命令行界面键入执行
  • Docker Compose 安装:只需要准备好文件,可在UI直接执行或命令行docker-compose up -d即可。

Docker Compose基础代码
我将展示Compose中比较常见的一些代码,这个文件有需要也可以当范本进行使用。

  1. version: "3.9"              # 指定 Docker Compose 文件的版本
  2. services:                     # 定义服务列表
  3.    service_name:          # 定义一个服务的名称
  4.    image:                     # 指定要使用的 Docker 镜像
  5.    container_name:       # 指定容器的名称
  6.    environment:             # 定义环境变量
  7.    env_file:                   # 指定环境变量文件
  8.    ports:                       # 定义端口映射
  9.    volumes:                  # 定义卷挂载
  10.    devices:                   # 定义设备挂载
复制代码
代码对比
了解了Compose后,让我们来看cd2官方提供的两段代码
代码一:Docker Compose
  1. version: "2.1"  # 指定 Docker Compose 文件的版本
  2. services:  # 定义服务列表
  3.   cloudnas:  # 定义一个名为 cloudnas 的服务
  4.     image: cloudnas/clouddrive2  # 指定要使用的 Docker 镜像
  5.     container_name: clouddrive2  # 指定容器的名称
  6.     environment:  # 定义环境变量
  7.       - TZ=Asia/Shanghai  # 设置时区为亚洲/上海
  8.       - CLOUDDRIVE_HOME=/Config  # 设置 CLOUDDRIVE_HOME 环境变量的值为 /Config
  9.     volumes:  # 定义卷挂载
  10.       - <path to accept cloud mounts>:/CloudNAS:shared  # 将主机上的  <指定目录> 挂载到容器内的 /CloudNAS 路径,并设置为共享模式
  11.       - <path to app data>:/Config  # 将主机上的  <指定目录> 挂载到容器内的 /Config 路径
  12.       - <other local shared path>:/media:shared  # 将主机上的  <指定目录> 挂载到容器内的 /media 路径,并设置为共享模式(可选)
  13.     devices:  # 定义设备挂载
  14.       - /dev/fuse:/dev/fuse  # 将主机上的 /dev/fuse 设备文件挂载到容器内的 /dev/fuse 路径
  15.     restart: unless-stopped  # 设置容器的重启策略为除非手动停止,否则自动重启
  16.     pid: "host"  # 设置容器的 PID 命名空间与主机相同
  17.     privileged: true  # 启用特权模式,容器拥有几乎所有的权限
  18.     network_mode: "host"  # 设置容器的网络模式为 host,共享主机的网络接口和端口
复制代码
代码二:Docker CLI
  1. docker run -d \  # 后台运行容器
  2.     --name clouddrive \  # 指定容器的名称
  3.     --restart unless-stopped \  # 设置容器的重启策略为除非手动停止,否则自动重启
  4.     --env CLOUDDRIVE_HOME=/Config \  # 设置环境变量 CLOUDDRIVE_HOME 的值为 /Config
  5.     -v <path to accept cloud mounts>:/CloudNAS:shared \  # 将主机上的 <指定目录> 挂载到容器内的 /CloudNAS 路径,并设置为共享模式
  6.     -v <path to app data>:/Config \  # 将主机上的 <指定目录> 挂载到容器内的 /Config 路径
  7.     -v <other local shared path>:/media:shared \  # 将主机上的 <指定目录> 挂载到容器内的 /media 路径,并设置为共享模式(可选)
  8.     --network host \  # 设置容器的网络模式为 host,共享主机的网络接口和端口
  9.     --pid host \  # 设置容器的 PID 命名空间与主机相同
  10.     --privileged \  # 启用特权模式,容器拥有几乎所有的权限
  11.     --device /dev/fuse:/dev/fuse \  # 将主机上的 /dev/fuse 设备文件挂载到容器内的 /dev/fuse 路径
  12.     cloudnas/clouddrive2  # 指定要使用的 Docker 镜像
复制代码
可以看到,两段代码的效果其实是一样,只是写法不同,但Compose的写法更加有条理,配合格式缩进能更快的找到我们要修改的地方。
现在让我们一起写一个简单的用于安装Alist容器的Docker Compose代码:
  1. version: '3.3'      #Compose版本号
  2.    services:         #服务列表
  3.       alist:            #服务名称
  4.       image: 'xhofe/alist:latest'   #使用的镜像
  5.       container_name: alist        #容器名称
  6.       volumes:                          #挂载定义
  7.          - '/vol1/1000/docker/alist:/opt/alist/data'  #将/vol1/1000/docker/alist挂载到/opt/alist/data
  8.       network_mode: "host"       #网络模式,host
  9.       #ports:                            #端口映射,使用host模式与主机共享端口,不需要进行映射
  10.       #   - '5244:5244'               #如果要开启端口映射可以直接把上面network_mode: "host"前面加个#,进行注释,并把这两行的#去掉
  11.       restart: always                  #重启策略:总是重启,避免断 电导致的异常停止后不重启,使用unless-stopped有概率出现这个情况
复制代码

是不是很简单!!如果对Compose命令感兴趣,可以查看Docker Compose指令大全
至此,相信大家对Compose的作用也有了一定了解,应该讲,在Docker的日常使用中绝大部分的要求Compose都可以帮你解决,而且更加简便。
温馨提示,不管做什么,请务必做好相关备份,避免翻车。

最后,祝各位牛友玩的愉快!!



收藏
送赞
分享

发表回复

评论列表(2)

作为“萌新”,表示看不懂这篇“萌新教程”
昨天 08:59 回复
哈哈,其实也还好,这是一篇介绍的文章,肯定是尽可能介绍全面一点,方便需要的时候查阅。 如果是某一方面的教程那会更有目的性,反而就不全面了。 我自己感觉这东西主要还是在兴趣和需求两个词上,在有兴趣和需求的  详情 回复
昨天 10:39
哈哈,其实也还好,这是一篇介绍的文章,肯定是尽可能介绍全面一点,方便需要的时候查阅。
如果是某一方面的教程那会更有目的性,反而就不全面了。
我自己感觉这东西主要还是在兴趣和需求两个词上,在有兴趣和需求的前提下去实践,学到的东西才会多。

昨天 10:39 回复