折腾 Docker 管理:一个自力更生的 DinD 工具是怎么来的

说起来,玩 Docker 的朋友估计都有同样的感受:这玩意儿好用是好用,但管起来真有点头疼。市面上不是没有工具,像 Portainer 这种,功能是强大,可总觉得有点“重”。对于我这种只想简单管理几个服务、又不想折腾太多配置的人来说,它就像是开着一辆大卡车去买菜,有点过了。而且,它那套数据备份机制,说实话,我一直觉得不太顺手,总担心哪天数据丢了咋办。

正是因为这些小烦恼,心里就一直琢磨着,能不能自己搞一个更轻便、更好用的 Docker 管理工具呢?毕竟,自己的需求自己最清楚。加上这几年 AI 编程发展得挺快,就想着是不是能借力 AI,把这个想法落地。说干就干,断断续续地折腾了一阵子,还真捣鼓出来一个“Docker in Docker”的维护工具。为啥是 Docker in Docker 呢?因为我觉得这样管理起来更方便,整个工具本身也是一个 Docker 容器,便于部署和迁移,而且特别符合我对“轻量”的追求。


从“麻烦”到“方便”:这工具到底解决了啥?

一开始,我的出发点就很简单:让管理 Docker 容器变得像管理文件一样方便。所以,这个工具的核心思想就是基于 Docker Compose 来维护服务。Compose 文件嘛,大家都知道,就是用 YAML 格式描述你的服务栈,简单明了。把管理重点放在 Compose 文件上,就天然地实现了像文件系统一样的管理方式。

下面,我跟大家聊聊,这个工具目前都能干点啥,解决了我的哪些痛点:

1. Compose 文件管理:就像管理普通文件一样

这是我觉得最核心的功能。以前,Compose 文件散落在各个地方,管理起来比较乱。现在,我把所有的 Compose 文件都集中管理起来。

  • 编辑、启动、停止: 你可以直接在界面上看到你的所有 Compose 项目,点一点就能编辑 YAML 文件,保存后直接启动、停止。再也不用每次都敲 docker-compose up -d 或者 docker-compose down 了。特别是修改配置后,直接在界面上改,保存即生效,这效率一下就上来了。
  • 版本控制和备份: 因为是基于文件系统来管理 Compose 文件,所以这个工具和 NAS(网络附加存储)简直是绝配。NAS 通常都有非常成熟的快照和备份功能。这意味着,我的所有 Docker 服务配置,都像普通文件一样,可以轻松地做快照,做增量备份。就算哪天不小心改错了 Compose 文件,或者机器硬盘挂了,也能非常方便地恢复到之前的状态。这点对数据安全来说,简直是福音。想想以前,如果 Portainer 的数据损坏了,那种抓狂的感觉……现在完全不用担心了。

2. 容器日志检查:一眼看穿问题所在

服务跑起来了,最怕的就是出问题。出问题了,第一个想到的就是看日志。

  • 实时查看日志: 这个工具可以直接查看运行中容器的实时日志。你不需要 SSH 登录服务器,也不用敲 docker logs 命令,直接在网页上就能看到日志输出。这对于快速排查问题来说,简直是太方便了。特别是有些服务日志刷得飞快,能实时看到,效率高很多。
  • 筛选和搜索: 当然,日志多了也容易眼花。我还在考虑加上一些日志筛选和搜索功能,比如按关键词搜索、按时间段过滤,这样就能更快地定位到关键信息。目前虽然还比较基础,但已经比没有好太多了。

3. 镜像管理:瘦身和加速下载两不误

Docker 玩久了,镜像会越来越多,硬盘空间也会越来越紧张。

  • 拉取和删除镜像: 这个工具可以很方便地拉取新的镜像,也能删除不再需要的镜像。界面上能清晰地看到本地有哪些镜像,占用了多少空间。定期清理一下,保持系统“身材”,挺重要的。
  • 代理设置: 这个功能真是解决了一个大痛点!在国内,大家拉取 Docker 镜像经常会遇到网络问题,慢得让人抓狂,甚至直接超时。我把代理设置功能集成进来了,你可以直接配置 Docker Daemon 的代理,这样以后拉取镜像就快多了,再也不用眼巴巴地看着进度条了。对于经常需要拉取新镜像的朋友来说,这简直是救星。

4. 运行统计:对资源使用情况心里有数

虽然是个轻量工具,但对系统资源的监控也不能少。

  • CPU、内存、网络使用: 工具能显示各个容器的 CPU、内存占用情况,以及网络流量。这样你就能大致了解哪些服务是“耗电大户”,哪些服务跑得比较轻。对于优化资源分配,或者判断服务是否正常运行,都有很大帮助。虽然不是专业的监控工具,但对于个人使用来说,足够了。

5. 最近活动:一目了然的操作记录

谁操作了什么,什么时候操作的,这些信息有时候挺重要的。

  • 操作日志: 工具会记录一些最近的操作,比如哪个 Compose 项目被启动了,哪个镜像被删除了等等。这样你就能知道系统最近发生了什么,也方便追溯一些异常操作。

6. 接入群晖 SSO 登录:为了方便,也为了安全

因为我自己是群晖 NAS 用户,经常会用到群晖的 SSO(单点登录)功能。为了方便,也为了安全性,我把这个工具接入了群晖 SSO。

  • 无缝登录: 这样一来,我可以直接用群晖账号登录这个 Docker 管理工具,不用再单独记住一套账号密码。方便不说,安全性也提高了不少,毕竟群晖的账号通常都会设置两步验证。

AI 辅助编程:这工具咋来的?

讲到这里,估计有朋友会好奇,这些功能都是怎么实现的?老实说,我不是专业的全栈开发者,很多技术点我之前都不是很熟悉。这次能够把这个工具落地,AI 辅助编程功不可没。

可以说,这个工具 90% 以上的代码,都是在 AI 的帮助下完成的。一开始,我只是把我的想法和需求告诉 AI,比如“我需要一个网页界面,可以上传 Docker Compose 文件”,“我需要能实时查看容器日志”。AI 会根据我的描述,生成一些代码片段,或者提供一些实现思路。

在开发过程中,可以直接截图沟通,粘贴错误代码、错误运行日志,或者进行功能沟通、页面拆分等,尽量不要直接手动修改代码。实际发现手动修改后会影响 AI 对代码库的理解。有时候,AI 提供的代码可能不是最完美的,甚至会有一些小错误,但它提供了一个非常好的起点。

这种开发模式,让一个本来对前端都不算精通的人,也能独立开发出一些实用的工具。它大大降低了开发的门槛,让更多有想法的人有机会把想法变成现实。让 AI 根据我的需求来创建,先上一个万能模板,后续可以直接修改关键信息让 AI 生成不同的项目。

1
2
3
4
5
6
你是一位产品经理+UI设计师+全栈工程师,同时精通UI设计,基于当前 docker compose html 页面进行全面修改:
1、使用FontAwesome等开源图标库,让原型显得更精美和接近真实i0S/Android设计规范的界面;
2、引入tailwind css来完成,而不是变成style样式,图片使用unsplash;
3、结合现有页面功能,美化界面展示样式,对于按钮弹窗和列表进行优化,考虑后端接口响应速度慢优化操作体验;
4、以设计师的视角去输出完整的UI/UX,以产品经理的视角去规划APP的功能、页面和交互,要求移动设备自适应;
5、使用 flask 模板 + Python,输出 index.html,可以通过多个模板页面,内容完整。

未来展望:还有哪些可以折腾的?

虽然这个工具已经解决了我的不少痛点,但肯定还有很多可以改进和扩展的地方。

  • 更完善的监控: 比如可以加入更多的容器性能指标,做成图表展示,让资源使用情况更直观。
  • 模板功能: 可以预设一些常用的 Compose 模板,这样创建新服务的时候就更快了。
  • Web Shell: 如果能直接在网页上提供一个容器的 Shell 界面,那排查问题就更方便了。

当然,所有这些,都会继续秉承“轻量”、“易用”的原则。我还是希望它能保持简洁,而不是变成一个大而全、功能臃肿的工具。


结语

折腾这个 Docker 管理工具,从最开始的一个小念头,到现在能基本满足我的日常需求,整个过程还是挺有意思的。它让我体会到了“自己动手,丰衣足食”的乐趣,也让我看到了 AI 辅助编程的巨大潜力。目前这个工具仅仅应用在我的 NAS 上管理众多的 docker 服务,后续优化后再考虑开源出来。

这个工具可能不像那些专业的商业产品那么光鲜亮丽,但它是我根据自己的实际需求,一点点打磨出来的。它简单、实用,对我来说,这就够了。如果你也有类似的烦恼,或者对这种“轻量级”的 Docker 管理方式感兴趣,也许我的这些折腾能给你一些启发。