三款 Docker 管理工具对比:Portainer vs Dockge vs LazyDocker
结论先行:管理多容器不用纠结复杂选型,按「几台机器 × 多少人用 × 内存底噪」三维度决策:单机 VPS 纯 Docker Compose 编排直接选 Dockge(常驻仅 30-50MB 内存,直面原生 YAML 文件,备份迁移只需复制目录);多台服务器集中纳管或需要精细化团队权限选 Portainer CE(功能最全,常驻约 80-150MB 内存);终端党或 512MB 极限小内存 VPS 选 LazyDocker(纯 Go 编写的 TUI 终端界面,用完即退,常驻内存为 0)。
0、写在前面
在出海独立开发者的服务器上,容器化几乎是部署标配。
项目初期只有 1 至 2 个容器时,在终端敲击 docker run、docker ps 和 docker logs 足够高效。但当业务逐步演进,机器上同时跑着反向代理、前端、API 后端、PostgreSQL、Redis 和监控时,纯命令行的运维摩擦力会迅速放大:
- 容器名字或 ID 难以凭记忆迅速输入;
- 手机或平板在外临时收到告警时,在小屏幕上敲击长命令极易输入失误;
- 排查多容器日志需要频繁切换终端会话;
- 无法直观确认哪些停用的镜像和无主数据卷正在蚕食有限的磁盘空间。
本文挑选开源社区中热度最高、特色最分明的三款 Docker 管理工具进行全方位实测对比:Portainer、Dockge 与 LazyDocker,给出针对不同团队规模与机器配置的精准选型决策。
1、期望目标
阅读并实操本文后,你将达成以下目标:
- [ ] 掌握 Portainer、Dockge 与 LazyDocker 的架构差异与资源消耗基准;
- [ ] 能够依据「VPS 内存规格、管理节点数量、团队协作人数」完成技术选型;
- [ ] 掌握每款工具的标准化安装命令与生产级最小权限配置;
- [ ] 掌握 LazyDocker 快捷键位矩阵,在纯终端环境中实现亚秒级容器排障;
- [ ] 掌握 Web 管理界面的安全防御边界,避免 Docker Socket 遭到公网扫描爆破。
2、技术架构与全方位横向对比
三款工具选型对比矩阵
| 评估维度 | Portainer CE | Dockge | LazyDocker |
|---|---|---|---|
| 界面形态 | 完整 Web UI 控制台 | 极简现代化 Web UI | 终端文本界面 (TUI / Curses) |
| 内存底噪 | 约 80MB - 150MB | 约 30MB - 50MB | 0 MB(按需即开即关,运行时仅 15MB) |
| 端口依赖 | 默认占用 9443 (HTTPS) | 默认占用 5001 (HTTP) | 无需开放或监听任何网络端口 |
| Compose 交互机制 | 存入内部数据库,与宿主目录割裂 | 直面宿主 /opt/stacks 纯文本文件 |
识别当前目录的 Compose,支持重启 |
| 多服务器管理 | 支持(通过 Agent 纳管多集群) | 支持(通过内置 Agent 切换多机) | 仅限当前 SSH 会话所在主机 |
| 权限与多用户 | 支持 RBAC 权限分配与团队划分 | 仅支持单管理员账户 | 无用户系统(直接受 Linux 权限控制) |
| 操作响应速度 | 页面加载需 1-2 秒 | 轻快敏捷(毫秒级响应) | 键盘驱动(亚秒级瞬时刷新) |
| 公网安全隐患 | 若 9443 弱口令暴露,面临被提权风险 | 若 5001 暴露且无 TLS,面临爆破风险 | 极高安全性(端口不对外暴露) |
| 移动端友好度 | 支持手机浏览器自适应适配 | 页面布局自适应排版良好 | 移动端终端输入体验一般 |
| 最佳适用场景 | 跨多台 VPS 集中运维、小团队协作 | 单机 Compose 极简运维、个人开发者 | 极客运维、512MB 内存廉价 VPS |
架构模式对比
3、三款工具极速上手实操
3.1 Portainer CE 生产级部署
Portainer 功能最全,适合拥有一台主力服务器并在意可视化图表与团队管理的用户。
1 | # 1. 创建独立命名数据卷 |
启动后在浏览器访问 https://<服务器IP>:9443。
关键提醒:启动后 5 分钟内必须完成首次密码设置,否则出于安全机制容器会自动退出。超时退出后只需执行
docker restart portainer即可再次唤醒。
3.2 Dockge 生产级部署
如果你几乎所有的项目都在使用 Docker Compose,且希望 YAML 配置文件清清爽爽留在宿主机目录中,Dockge 是最契合的方案。
1 | # 1. 建立标准的宿主系统目录 |
启动后在浏览器访问 http://<服务器IP>:5001 设置管理员账号。
3.3 LazyDocker 终端神器极速部署
LazyDocker 是一款用 Go 编写的单二进制终端应用。它不需要在后台常驻运行,不需要开放任何公网端口,SSH 登录服务器后随开随用。
安装方式 A:一键下载官方预编译二进制(推荐)
1 | # 自动探测系统架构下载对应二进制并移动至 /usr/local/bin |
安装完成后,在终端直接输入:
1 | lazydocker |
安装方式 B:临时 Docker 别名运行(免安装二进制)
如果你不想在宿主机留下任何二进制文件,可在 ~/.bashrc 或 ~/.zshrc 中添加别名:
1 | alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker' |
LazyDocker 核心快捷键矩阵
打开 LazyDocker 后,整个终端会切分为:Projects、Services、Containers、Images、Volumes、Networks 与右侧实时详情面板。
| 快捷键 | 功能操作 | 说明 |
|---|---|---|
[ / ] |
切换聚焦面板 | 在服务列表、容器列表、镜像列表之间横向切换 |
j / k 或 ↑ / ↓ |
上下移动光标 | 快速挑选目标容器或镜像 |
Enter |
聚焦右侧面板 | 查看该容器的实时动态日志、ASCII 资源走势图 |
r |
重启容器 (Restart) | 光标停在容器上按下 r,瞬间触发守护进程重启 |
s |
停止容器 (Stop) | 发送终止信号 |
d |
移除容器 (Delete) | 弹出确认提示,回车即可删除已停止的容器 |
e |
进入容器终端 (Exec) | 自动判断 bash 或 sh,立刻拉起容器内部会话 |
x |
弹出全局管理菜单 | 提供一键 Prune unused images 与 Prune volumes |
m |
查看日志格式菜单 | 切换时间戳与换行规则 |
q |
退出终端面板 | 立即退出并释放当前会话所有资源,完全零内存残留 |
4、选型决策指南与落地建议
根据出海独立开发者的真实基础设施画像,推荐决策路径如下:
1 | 你的 VPS 物理内存在 1GB 以下? |
5、安全防御与生产避坑清单
避坑 1:Web 面板裸奔被全网扫描器撞库
- 风险:Portainer 的 9443 端口与 Dockge 的 5001 端口直通 Docker Socket。攻击者一旦通过弱密码渗透后台,即可利用挂载宿主机根目录(
-v /:/host)获取 VPS root 提权。 - 防御铁律:
- 使用 Tailscale 组网,仅将端口监听绑定至 Tailscale IP(例如
-p 100.x.y.z:5001:5001); - 若必须通过公网域名访问,必须配置 Nginx 反向代理启用正式 HTTPS 证书,并在反代层叠加 Basic Auth 密码验证或 IP 白名单。
- 使用 Tailscale 组网,仅将端口监听绑定至 Tailscale IP(例如
避坑 2:LazyDocker 在非 root 用户下提示 Permission Denied
- 根因:当前 SSH 用户未加入宿主机的
docker用户组,无法直接读写/var/run/docker.sock。 - 解法:
1
2
3sudo usermod -aG docker $USER
newgrp docker
lazydocker
6、FAQ
Q1:LazyDocker 适合长期替代 Web 面板吗?
对于习惯使用 SSH 登录 VPS 的独立开发者,LazyDocker 完全可以胜任 90% 的日常巡检工作。查日志不需要反复翻看历史指令,按一下 Enter 即刻查看,按一下 r 立刻重启。只有需要给非技术客户演示服务状态,或者人在户外使用手机排错时,Web 面板才具有不可替代性。
Q2:可以在同一台 VPS 上同时安装 Portainer 和 Dockge 吗?
可以。它们本质上都是对接同一个 Docker Socket 的独立客户端。只要各自配置的宿主机监听端口互不冲突(例如 Portainer 监听 9443,Dockge 监听 5001),两者可以完全共存。