本帖最后由 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中比较常见的一些代码,这个文件有需要也可以当范本进行使用。
- version: "3.9" # 指定 Docker Compose 文件的版本
- services: # 定义服务列表
- service_name: # 定义一个服务的名称
- image: # 指定要使用的 Docker 镜像
- container_name: # 指定容器的名称
- environment: # 定义环境变量
- env_file: # 指定环境变量文件
- ports: # 定义端口映射
- volumes: # 定义卷挂载
- devices: # 定义设备挂载
复制代码 代码对比
了解了Compose后,让我们来看cd2官方提供的两段代码!
代码一:Docker Compose
- version: "2.1" # 指定 Docker Compose 文件的版本
- services: # 定义服务列表
- cloudnas: # 定义一个名为 cloudnas 的服务
- image: cloudnas/clouddrive2 # 指定要使用的 Docker 镜像
- container_name: clouddrive2 # 指定容器的名称
- environment: # 定义环境变量
- - TZ=Asia/Shanghai # 设置时区为亚洲/上海
- - CLOUDDRIVE_HOME=/Config # 设置 CLOUDDRIVE_HOME 环境变量的值为 /Config
- volumes: # 定义卷挂载
- - <path to accept cloud mounts>:/CloudNAS:shared # 将主机上的 <指定目录> 挂载到容器内的 /CloudNAS 路径,并设置为共享模式
- - <path to app data>:/Config # 将主机上的 <指定目录> 挂载到容器内的 /Config 路径
- - <other local shared path>:/media:shared # 将主机上的 <指定目录> 挂载到容器内的 /media 路径,并设置为共享模式(可选)
- devices: # 定义设备挂载
- - /dev/fuse:/dev/fuse # 将主机上的 /dev/fuse 设备文件挂载到容器内的 /dev/fuse 路径
- restart: unless-stopped # 设置容器的重启策略为除非手动停止,否则自动重启
- pid: "host" # 设置容器的 PID 命名空间与主机相同
- privileged: true # 启用特权模式,容器拥有几乎所有的权限
- network_mode: "host" # 设置容器的网络模式为 host,共享主机的网络接口和端口
复制代码 代码二:Docker CLI
- docker run -d \ # 后台运行容器
- --name clouddrive \ # 指定容器的名称
- --restart unless-stopped \ # 设置容器的重启策略为除非手动停止,否则自动重启
- --env CLOUDDRIVE_HOME=/Config \ # 设置环境变量 CLOUDDRIVE_HOME 的值为 /Config
- -v <path to accept cloud mounts>:/CloudNAS:shared \ # 将主机上的 <指定目录> 挂载到容器内的 /CloudNAS 路径,并设置为共享模式
- -v <path to app data>:/Config \ # 将主机上的 <指定目录> 挂载到容器内的 /Config 路径
- -v <other local shared path>:/media:shared \ # 将主机上的 <指定目录> 挂载到容器内的 /media 路径,并设置为共享模式(可选)
- --network host \ # 设置容器的网络模式为 host,共享主机的网络接口和端口
- --pid host \ # 设置容器的 PID 命名空间与主机相同
- --privileged \ # 启用特权模式,容器拥有几乎所有的权限
- --device /dev/fuse:/dev/fuse \ # 将主机上的 /dev/fuse 设备文件挂载到容器内的 /dev/fuse 路径
- cloudnas/clouddrive2 # 指定要使用的 Docker 镜像
复制代码 可以看到,两段代码的效果其实是一样,只是写法不同,但Compose的写法更加有条理,配合格式缩进能更快的找到我们要修改的地方。
现在让我们一起写一个简单的用于安装Alist容器的Docker Compose代码:
- version: '3.3' #Compose版本号
- services: #服务列表
- alist: #服务名称
- image: 'xhofe/alist:latest' #使用的镜像
- container_name: alist #容器名称
- volumes: #挂载定义
- - '/vol1/1000/docker/alist:/opt/alist/data' #将/vol1/1000/docker/alist挂载到/opt/alist/data
- network_mode: "host" #网络模式,host
- #ports: #端口映射,使用host模式与主机共享端口,不需要进行映射
- # - '5244:5244' #如果要开启端口映射可以直接把上面network_mode: "host"前面加个#,进行注释,并把这两行的#去掉
- restart: always #重启策略:总是重启,避免断 电导致的异常停止后不重启,使用unless-stopped有概率出现这个情况
复制代码
是不是很简单!!如果对Compose命令感兴趣,可以查看Docker Compose指令大全
至此,相信大家对Compose的作用也有了一定了解,应该讲,在Docker的日常使用中绝大部分的要求Compose都可以帮你解决,而且更加简便。
温馨提示,不管做什么,请务必做好相关备份,避免翻车。
最后,祝各位牛友玩的愉快!!
|