深色模式
Portainer
概述
Docker 用命令行管理并不难,但只要容器一多,日常操作就会开始变得分散:哪个容器挂了什么卷,哪个项目连了哪个网络,镜像是不是该清了,光靠 docker ps 和 docker inspect 当然能看,只是效率不一定高。
Portainer 做的事,就是给 Docker 提供一层 Web 管理界面。它不是 Docker 的替代品,也不是新的容器运行时,更像一个建立在 Docker 之上的可视化控制台。
Portainer 适合什么场景
Portainer 最适合这些场景:
- 需要用图形界面查看容器、镜像、网络、卷
- 一台服务器上跑了多个 Compose 项目,想集中看状态
- 团队里有人不想长期直接操作 Docker CLI
- 需要一个比“SSH 上去手敲命令”更直观的日常入口
它尤其适合轻量服务器、个人项目、小团队内网环境这类场景。要说它能不能替代所有命令行操作,答案通常是否定的,但拿来做日常查看和基础管理,确实省事很多。
它能管什么
Portainer 接上本机 Docker 以后,常见可以管理这些对象:
- 容器
- 镜像
- 卷
- 网络
- Compose Stack
- Docker 环境终端和日志查看
这也是它最直接的价值所在。原本需要切换多条命令才能拼出来的信息,界面里通常能集中看到。
它不是什么
Portainer 有用,但边界也要先讲清楚:
- 它不是 Docker Engine
- 它不会替你理解 Dockerfile、网络、卷这些概念
- 它不等于完整的 CI/CD 平台
- 它也不应该代替版本化配置文件
换句话说,Portainer 能让管理更直观,但不会自动把一套混乱的 Docker 使用方式变成整洁系统。Compose 文件该写还是得写,镜像构建流程该规范还是得规范。
最常见的部署方式
Portainer 自己就是一个容器,所以部署它最常见的方式仍然是 Docker。
先创建一个命名卷保存 Portainer 数据:
sh
docker volume create portainer_data再启动容器:
sh
docker run -d \
--name portainer \
--restart=always \
-p 9000:9000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:lts这里最重要的两个挂载是:
/var/run/docker.sock:/var/run/docker.sockportainer_data:/data
第一个让 Portainer 能和本机 Docker daemon 通信,第二个用来保存 Portainer 自己的配置和状态数据。
为什么一定会看到 docker.sock
Portainer 要管理本机 Docker,就得有办法连接 Docker daemon。最常见的方式,就是把宿主机的 /var/run/docker.sock 挂进去。
这件事的含义必须说清楚:一旦某个容器拿到了 Docker socket,它通常就拥有了很高的宿主机控制能力。Portainer 之所以能管理 Docker,靠的正是这个能力入口。
所以 Portainer 适合放在受控环境里,不适合随手暴露在公网,然后再指望“反正有登录页”。登录页不是护身符。
用 Compose 管理会更顺手
如果服务器上的服务本来就是 Compose 管理,Portainer 自己也更适合用 Compose 部署:
yaml
services:
portainer:
image: portainer/portainer-ce:lts
container_name: portainer
restart: always
ports:
- "9000:9000"
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:启动:
sh
docker compose up -d这样做的好处很直接,Portainer 自己也纳入了和其他服务一致的管理方式,后面迁移、备份、重建都更顺手。
初次访问以后会做什么
Portainer 首次打开后,通常会先要求创建管理员账号,然后选择要连接的环境。最常见的选择就是本地环境,也就是当前这台宿主机的 Docker。
对单机场景来说,这已经够用。多环境、多节点、远端 agent 这些能力当然也有,但它们不是 Docker 系列入门阶段最该先展开的内容。
Portainer 和 CLI 怎么分工
一个比较稳的分工方式是:
- Dockerfile、Compose 文件、镜像构建流程:继续用代码和命令行维护
- 容器状态查看、日志浏览、基础启停、卷和网络巡检:交给 Portainer
这类分工的好处是,配置和部署逻辑仍然留在可版本化的文本文件里,Portainer 负责提高日常可见性和操作效率。这样不容易把“图形界面操作”变成无法追踪的配置来源。
几个实际使用上的建议
- Portainer 自己的数据目录要持久化,不要让它跟着容器一起消失
- 尽量放在内网,或者至少放在反向代理和访问控制之后
- 不要把它当成唯一管理入口,CLI 仍然要会用
- Compose 项目本身仍然建议保留在代码仓库里,不要只留在界面里手点
Portainer 最适合扮演的角色,是一块好用的管理面板,而不是整套 Docker 工作流的真相来源。
