Featured image of post Portainer 容器可视化管理:单 Docker 与集群一站搞定

Portainer 容器可视化管理:单 Docker 与集群一站搞定

Portainer Community Edition 容器化部署、Socket 挂载、初始账号、单 Docker 模式与 Swarm/K8s 集群接入

命令行的 docker psdocker logs 用得再熟,新人 onboard 时一句"这容器跑哪了"还是能把人问住。Portainer 就是一个"看得见的 Docker 管理面板"——容器、镜像、网络、存储卷、用户、权限,一站式在 Web 界面操作,特别适合给非运维同学用。这篇文章讲清楚容器化部署、Socket 挂载、初始账号、单 Docker / 集群模式选择。

阅读对象:想给团队/客户提供一个"点开就能用"的 Docker 管理界面的同学
覆盖范围:Portainer CE 容器化部署、Docker Socket 挂载、初始账号、单 Docker 模式 / Swarm 模式 / K8s 模式差异

一、为什么是 Portainer

容器管理工具不少,但定位不同:

工具定位适用场景
Portainer CE通用、轻量、社区版单 Docker / 小团队 / 给非运维用
Rancher重量级、企业 K8s 管理多 K8s 集群管理(已转型到 Rancher Prime)
Docker Desktop本地开发macOS / Windows 上单机使用
LazydockerTUI命令行党、SSH 远程
Cockpit + podman系统管理RHEL 系

Portainer 的"杀手锏"是零学习成本——只要能开浏览器就能用 docker,比着文档点点鼠标就能拉镜像、起容器、看日志。

When to use:当你的团队里有人不熟 docker 命令行,或者要给客户演示/验收容器部署,Portainer 几乎是不二之选。如果只是个人开发用,且只需要起一两个容器,Portainer 会"杀鸡用牛刀"。

二、容器化部署

2.1 单 Docker 模式(最常见)

1
2
3
4
5
6
7
docker run -d \
  --restart=unless-stopped \
  --name portainer \
  -p 9900:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /home/docker/portainer/data:/data \
  portainer/portainer

挂载说明:

挂载点作用
/var/run/docker.sock:/var/run/docker.sock接管宿主机 Docker Daemon,让 Portainer 能 list/start/stop 容器
/home/docker/portainer/data:/dataPortainer 自己的数据(账号、配置、堆栈)持久化

访问 http://{{HOST}}:9900

  • 首次进入会要求设置 admin 账号(不是默认账号!)
  • 然后选择 “Get started” / “Local” 进入单 Docker 模式

2.2 初始账号

重要:新版本 Portainer 不再有默认账号,首次启动强制让你创建 admin 账号(最少 12 位密码)。网上很多老教程说"admin/admin123456789"那是过期文档。

2.3 Community Edition vs Business Edition

Portainer 有两个版本:

  • CE(Community Edition):免费,单一环境(单 Docker / 单 Swarm / 单 K8s),基础 RBAC
  • BE(Business Edition):商业授权,多环境管理、LDAP/AD 集成、细粒度 RBAC、合规审计

绝大多数中小团队用 CE 足够。如果企业有合规、审计、SSO 需求,再考虑 BE。

三、核心功能

进入 Portainer 后,左侧导航是核心功能区:

3.1 Stacks(Compose 一键部署)

Stacks → Add stack,把 docker-compose.yml 内容贴进去(支持 Git 仓库、Web editor、Upload),点 Deploy 就能拉起一整套服务。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
version: "3"
services:
  redis:
    image: redis:7-alpine
    restart: always
    ports:
      - 6379:6379
  postgres:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_PASSWORD: "{{REDACTED}}"
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

变量插值:Portainer 支持 {{VAR}} 占位符,在 Stack 部署时填入。不要把明文密码写进 yaml 文件,用环境变量注入。

3.2 Containers / Images / Volumes / Networks

点进去就能 list、inspect、start、stop、kill、remove、exec。Container logs 还支持 tail -f 实时跟随——比 SSH 进去 docker logs -f 还方便。

3.3 Swarm 模式(多节点)

如果宿主机是 Docker Swarm 集群,Portainer 能识别并显示所有 worker 节点,统一管理。前提是 Swarm 集群已经初始化:

1
docker swarm init

集群里其它节点执行 docker swarm join --token ... 加入后,Portainer 自动发现。

3.4 K8s 模式

Add Environment → Kubernetes,填 kubeconfig 或者 service account,就能把 Portainer 接到 K8s 集群。但 K8s 模式功能比 CE 版还基础(命名空间、Deployment、Service、Pod 管理),复杂场景推荐用 Rancher / Lens / Octant

四、生产环境建议

  1. 不要把 Portainer 暴露到公网——9000 端口直接对外是"裸奔",docker.sock 挂载意味着谁拿到 Portainer 就能控制宿主机所有容器
  2. 用 Nginx / Caddy 反向代理——加 HTTPS、加 basic auth、加 IP 白名单
  3. 管理员账号——设置复杂的 12+ 位密码
  4. 数据备份——/home/docker/portainer/data 整个目录定期 tar 备份
  5. 升级——docker pull portainer/portainer && docker restart portainer,但要看 release notes 注意破坏性变更

五、踩坑清单

  1. 看不到容器——/var/run/docker.sock 没挂载,Portainer 只是空壳。检查挂载路径
  2. Stacks 部署失败不报错——看 Events 标签页,docker daemon 的报错会写在那里
  3. Container 控制台中文乱码——容器本身的 locale 问题,进 Exec 之前先 export LANG=C.UTF-8
  4. Image 拉取超时——Portainer 不会自动用 daemon.json 里的 mirror,但 docker daemon 会(继承宿主配置),所以本质上不影响
  5. 多用户场景——CE 版的 RBAC 很基础(只支持 owner / administrator / operator / viewer 四种角色),复杂权限需要 BE

六、2024+ 视角补充

本文写于 2023-03,2024-2026 期间 Portainer 有几个显著演进:

Portainer CE 2.20+(2024 主流版本)

  • Edge Agent 模式强化:分布式 IoT / 多机房场景下,Edge Agent 可以主动连中心 Portainer(出站 NAT 友好)
  • GitOps 集成:Stack 支持从 Git 仓库自动同步(Git pull = 自动 deploy),2024 起成为 CE 版的内置能力(之前是 BE 专属)
  • RBAC 增强:CE 版 RBAC 从 4 个角色(owner / administrator / operator / viewer)扩展到可自定义团队 + 资源访问控制(Namespace 级 / Stack 级 / Container 级)
  • K8s 体验大幅提升:之前 CE 版 K8s 模式功能很基础,2.20+ 加入 Helm chart 部署、ConfigMap / Secret 管理、Ingress 编辑

Container Management 之外的扩展

  • Homepage / Dashboard 定制:每个用户可设自己的首页(“我关心的容器”)
  • 通知集成扩展:Slack / Microsoft Teams / Email / webhook / PagerDuty / Opsgenie——alert rule 可直接推 oncall
  • 审计日志:CE 2.21+ 内置审计日志(之前是 BE 专属),合规场景可用
  • 备份 / 恢复:Stack 级别的"Export / Import"——开发→测试→生产用同一份 stack 配置

Portainer 替代品(2024 视野)

  • Rancher Prime(2024 改名,原 Rancher):SUSE 把 Rancher 商业化转型,企业 K8s 多集群管理首选
  • Lens:IDE 风格的 K8s 管理工具,免费,桌面应用
  • OpenLens:Lens 6 后部分闭源,OpenLens 是 fork 继续开源
  • Headlamp:Kubernetes 官方推荐的 Web UI(取代老旧的 Dashboard)
  • LazyDocker:终端党 2024 仍活跃
  • CasaOS / Cosmos:家用 NAS / 小团队 2024+ 更推荐(Portainer 偏运维,CasaOS 偏普通人)

安全更新

  • Portainer 2024 年修复过几个严重 RCE(CVE-2024-21xxx),必须升 2.20.3+ 才是安全版本
  • Docker socket 挂载是核心风险:2024 起官方推荐用 Docker Socket Proxy(tecnativa/docker-socket-proxy)做"最小权限代理",避免 Portainer 一旦被攻破就拿整个宿主机
  • 2FA 强制开启:CE 2.18+ 强制所有 admin 必须配 2FA(之前是可选)

实战用法变化(2024 视角)

  1. + Diun 自动检测镜像更新 → Portainer 推送通知
  2. + Watchtower 自动升级非关键容器
  3. + Traefik / Caddy 自动 HTTPS 终结(Portainer 仍主攻容器编排,HTTPS 让专门的反向代理做)
  4. + Headlamp 管理 K8s 集群(Portainer 主攻 Docker,K8s 用专门工具)

经验法则更新

  • Docker 单机 / 小团队Portainer CE 2.20+ 仍是 2024+ 首选
  • K8s 集群 → 优先 Rancher Prime / Lens / Headlamp,Portainer K8s 模式为辅
  • 家用 / 个人 → CasaOS 更轻量更易用
  • 大企业 / 合规 → Portainer BE 仍是合规审计好选择

七、参考资料

  • Portainer 官方文档:https://docs.portainer.io/
  • 社区版 vs 商业版:https://www.portainer.io/products
  • Docker Compose 规范:https://docs.docker.com/compose/compose-file/
  • Portainer 安全公告:https://github.com/portainer/portainer/security/advisories
  • Docker Socket Proxy:github.com/tecnativa/docker-socket-proxy
  • Headlamp K8s UI:headlamp.io

下一步

使用 Hugo 构建
主题 StackJimmy 设计