本文最后更新于 2024-06-28,文章内容可能已经过时。

前言

大家好,这里是可爱的Cherry

最近发的文章,Cherry是越来越懒了,丢了一个compose.yml就不管了,基本在介绍项目使用上了,没想到还是有很多朋友没有接触过,或者对docker-compose使用不熟悉。

因此本期,Cherry在上一篇玩转NAS之docker的基础上,重点讲一下docker-compose如何安装、使用,并且介绍一下非SSH使用docker-compose的一些方法。


docker compose介绍

一、什么是docker compose

docker compose是docker的多容器管理应用程序,用于定义、管理、运维多个docker容器的工具。

最简单的理解,就是docker(后面特指docker run指令)管理一个容器,compose管理多个容器。

🔻docker run、docker compose、container之间的管理。不仅限于容器本身,还包括卷、网络等所有docker的一切。
image.png

二、为什么建议使用docker compose

docker-compose的优势大概总结有三点。

🙂一是容器管理简易化。
	所有容器的定义、运行都可以通过文本记录在册,通过修改yml配置文件可以轻松的更改和管理这些容器。
😊二是容器管理用持续化。
	所有容器的配置,例如卷、镜像、网络都在yml配置文件里,无论何时,我都可以在yml文件和数据卷的合作下,轻松重启我的docker容器而不用担心容器丢失。
😘三是容器管理更安全。
	compose的容器间访问,默认是互联互通,通过hostname的使用,可以让容器不暴露端口的情况下被同个项目下的容器所访问,大大提高了安全性。

三、docker compose的构成和使用

🔻核心文件
docker compose的核心是yml文件一般常用的是docker-compose.yml,或者compose.yml。
image.png
🔻核心指令(所有指令,都必须在docker-compose.yml文件所在的目录下执行)

#后台启动compose
docker-compose up -d
#关闭compose
docker-compose down
#查看日志
docker-compose logs -f
#查看当前compose容器运行情况
docker-compose ps
#进入compose容器下的某一个,hostname是ps后展示出的service名字,即上图service下一级的windows
docker-compose exec -it [hostname]

四、如何安装docker compose

🔻目前,成品NAS除群晖7.X系、威联通、铁威马外,其它NAS都还没有内置docker-compose,因此需要我们手动安全。

#输入以下指令,查看是否安装docker compose
docker-compose --version

🔻安装方法,首先通过finalshell等工具登录NAS,然后一次输入以下指令

#安装docker-compose
curl -L https://hub.gitmirror.com/https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose

#赋权
chmod +x /usr/bin/docker-compose

#验证docker compose
docker-compose -v

image.png


docker compose可视化应用

除了在SSH页面进行docker compose操作外,最重要的是docker-compose的可视化操作,先介绍2个第三方的compose可视化项目。

一、dockge

dockge是一款专门针对docker compose的可视化应用项目,由uptime kuma作者开发。该项目通过一个界面,实现了compose类目的整合。
通过可视化编辑yml文件,可以轻松管理和运维compose项目。
🟡所有dockge管理的compose项目,都必须将docker-compose.yml文件放到环境变量DOCKGE_STACKS_DIR所设置的目录下。
image.png
image.png

二、portianer

老牌dockerUI项目,放在dockge后面的原因是整合效果和运维内容不如dockge那么多,不支持直接更新镜像文件。
🟡所有portianer管理的compose项目,都必须使用portainer的界面上进行新建。
image.png

三、群晖7.2——Container Manager

image.png
image.png

四、威联通——Container Station

image.png

五、UNRAID——Compose

🔻在应用商城,搜索docker compose,安装图里的插件即可。
image.png
🔻安装以后,在docker里就有docker compose可视化页面了
image.png


docker compose示例

docker-compose.yml的语法,其实和docker run十分相似,简化了link的依赖关系,将四大元素分层级进行定义,如最主要的卷、网络、端口、环境变量其实是不变的,就是从单数增加到了复数。

一、yal文件书写要求

这里给大家讲解一下常用的docker-compose.yml文件的格式和规范。yml文件严格遵守缩进符,层级错误会导致无法部署,因此使用空格不要使用tab。
image.png

二、代码释义

➡version: "3"
代表这当前yml文件的语言版本,目前常用的是2.X和3.X版本,主流为3.X版本,可空
➡name: ABC
代表当前项目名字为ABC,可空
➡services:
代表下属层级的都是服务,就是我们的容器
➡s1:容器的hostname,理解为项目内的id,唯一且必填
➡container_names:容器名称,等同于docker run的name,可空
➡image:镜像,等同于docker run的image,必填
➡env_file:环境变量文件,等同于docker run的–env,可空
➡environment:环境变量,等同于docker run的-e,根据项目要求更改
➡volumes:存储卷,等同于docker run的-v,支持绑定和卷,如果是卷需要在下面的volumes去新增。
➡networks:网络,等同于docker run的–net,指定容器所在的网络
➡restart:重启策略,等同于docker run的restart,自定义
➡ports:端口,等同于docker run的-p,自定义
➡depends_on:依赖,等同于docker run的link,表示容器间的依赖关系
➡s2:另外一个容器
➡volumes:容器卷,这里只填写卷模式,如果是绑定模式则在容器内部定义。
➡db1:新建一个叫db1的卷
➡db2:新建一个叫db2的卷
➡networks:
➡net1:新建一个叫net1的网络,单个compose项目可以不需要,会自动生成项目名称的网络。

三、如何修改yml文件

对于部署一个docker compose项目来说,修改yml文件是最核心的工作。一般来说官方都会提供一个比较完整的yml文件,我们需要修改的仅仅是涉及到本地化部署的一些内容,那就是以下4个。
🔻端口,左侧是宿主机的端口,可以自定义;右侧是容器端口,不能修改。
image.png
🔻存储(绑定),左侧是绑定模式的宿主机路径,可以自定义;右侧是容器路径,不能修改。
比如我要改到/volume1/abc下,那就是 - /volume1/abc:/db_a
image.png
🔻存储(卷),左侧是卷模式下的卷名称,可自定义,;右侧是容器路径,不能修改。
image.png
🔻环境变量,这个根据每个项目的不同进行调整即可。
image.png


最后,关于现有docker更改为compose

经过群友介绍,有一个项目可以将本地现有的docker全部导出为compose文件,效果一等一的好。
因为时间有限,Cherry还没体验过这个项目,因此明后天体验完以后,会把该项目完整的使用方法梳理出来。