玩自建服务有一段时间的朋友应该都有同感:Docker 这东西装服务是方便,但管理全靠命令行。容器跑起来了想改个端口,得先停掉删掉重建;想看看哪个容器在吃内存,docker stats 刷一屏数字眼睛都花;隔几天不管,自己都忘了服务器上到底跑着些什么东西。
我之前就是这样,服务器上七八个容器,每次维护都要翻聊天记录找当初敲的命令。后来装了 Portainer,一个开源的 Docker 可视化管理面板,容器、镜像、网络、数据卷全在网页里管理,状态一目了然,这才算把服务器理顺了。今天把部署过程和日常用法分享一下。
一、准备工作
Portainer 本身非常轻量,对配置没什么要求:
| 项目 | 建议 |
|---|---|
| 系统 | Ubuntu 22.04 LTS |
| CPU | 1 核起步 |
| 内存 | 1G 起步 |
| 硬盘 | 20G 以上 |
我自己的机器是雨云rainyun-com的 2 核 2G,上面跑着 Portainer 加六七个常用服务,几个月下来很稳,注册填码:2026off,可领5折,一个月也就十几块钱。如果在大厂开同等配置的轻量服务器,价格通常要贵一些,不过大厂胜在节点多、文档全,按自己的预算和习惯选就行。
先在 Ubuntu 22.04 上装好 Docker,直接用系统仓库里的版本就可以:
bash
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
最后一条是把当前用户加进 docker 组,之后敲 docker 命令不用加 sudo。执行完退出重新登录一次才生效,用 docker version 验证一下能正常输出版本信息就行。
二、一条命令部署 Portainer
Portainer 官方就是容器分发,两条命令搞定。先建一个数据卷存它的配置:
bash
docker volume create portainer_data
然后启动容器:
bash
docker run -d \
-p 8000:8000 -p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
几个关键点说明一下:
9443是网页面板的访问端口,走的是 https 协议;8000是它给远程 agent 预留的通信端口,只用本地管理的话不映射也可以- 挂载
/var/run/docker.sock是它能管理本机 Docker 的关键,千万别漏 --restart=always保证服务器重启后面板自己起来
启动后在浏览器里访问服务器 IP 的 9443 端口,注意协议选 https,浏览器提示证书不受信是正常现象,继续访问即可。第一次打开会要求设置管理员账号和密码,密码要求 12 位以上。设完进入环境选择页,选本地的 Docker 环境连上去,就能看到容器列表了。
三、日常最常用的几个功能
容器管理:Containers 页面列出所有容器,运行状态、端口映射、镜像版本一屏看全。启动、停止、重启都是界面上的按钮,不用记命令。想改配置的话用 Duplicate/Edit,改完它会自动重建容器。
看日志和进终端:每个容器详情页里有 Logs 和 Console。日志页面支持搜索和自动刷新,排查问题比在命令行里翻方便得多;Console 可以直接开一个容器内的终端,选 /bin/sh 或 /bin/bash 连进去。
镜像和卷管理:Images 页面能看到每个镜像占了多少空间,不用的旧镜像勾选删掉,能省不少硬盘。Volumes 页面同理,删容器遗留的孤儿卷前先确认没在用。
Stacks 批量部署:习惯用 docker-compose 的,可以把 compose 文件粘进 Stacks 页面统一部署,之后整组服务一起启停,还能直接在网页里改配置重新部署。比如一个网站加数据库的组合,写成一份 compose 交给 Stacks 管,以后改环境变量、升镜像版本都在一个页面里完成,比翻历史命令靠谱多了。
资源占用一目了然:首页的 Dashboard 会汇总容器、镜像、卷的数量和状态,哪个容器挂了会有明显标记。我现在的习惯是每天早上打开面板扫一眼,有异常马上能发现,不用等服务出问题用户来反馈。
四、两个安全建议
面板权限很大,等于把 Docker 的 root 级操作开到了网页上,务必上心:
- 管理员密码设强一点,不要用常见弱密码。
- 不建议把 9443 直接暴露到公网。简单做法是装个 ufw 防火墙,只允许自己的常用 IP 段访问:
bash
sudo ufw allow from 你的IP地址 to any port 9443
sudo ufw enable
有域名的话也可以用反向代理加访问控制,这里不展开。
五、常见问题
问:打不开面板,浏览器一直转圈?
答:先确认 9443 端口在防火墙和云平台的安全组里都放行了;再确认访问时用的是 https 而不是 http。
问:Portainer 自己怎么升级?
答:停掉删掉旧容器,重新执行一遍启动命令就行,配置存在 portainer_data 卷里不会丢:
bash
docker stop portainer && docker rm portainer
docker pull portainer/portainer-ce:latest
# 再执行一遍上面的 docker run 命令
问:学生党预算有限,想先练手怎么办?
答:雨云rainyun-com最低配的机器月付就十几块钱,先开一个月把 Docker 和面板玩熟,不合适随时退掉也不心疼。
问:面板能管多台服务器吗?
答:能。在别的服务器上装它的 agent,回到面板里添加环境就能集中管理。我只有一台机器用不上这功能,多机玩家可以研究一下,比每台机器各开一个面板省心。
六、总结
Portainer 解决的是"管理成本"问题:服务装得越多,命令行维护越乱,有个面板统一看着才不容易出岔子。它本身几乎不占资源,装一次就长期受益,算是自建服务路上的基础设施。建议刚入门 Docker 的朋友早点装上,后面再折腾别的服务会顺很多。