Docker 可视化管理工具:Portainer 与 Lazydocker
在 Linux 服务器上管理 Docker 通常依赖命令行,但对于不熟悉 Docker CLI 的开发者,或者需要更直观地查看容器状态、日志和资源的场景,图形化管理工具能大幅提升效率。本节介绍两款 Docker 管理工具:Portainer(Web UI)和 Lazydocker(终端 UI)。
Portainer:Web 端容器管理平台
Portainer 是一个功能强大的容器管理平台,提供 Web 图形界面,支持 Docker、Docker Swarm、Kubernetes、Podman 等多种容器环境。
核心功能
- 容器管理 -- 创建、启动、停止、删除容器,查看日志和状态
- 镜像管理 -- 拉取、推送、删除镜像,查看镜像详情和 Dockerfile
- 网络管理 -- 创建和管理 Docker 网络
- 数据卷管理 -- 管理持久化存储
- 用户与权限 -- 多用户、多团队权限管理
- 集群支持 -- 支持 Docker Standalone、Docker Swarm、Kubernetes 环境
版本选择
| 版本 | 适用场景 | 价格 |
|---|---|---|
| Community Edition (CE) | 个人学习、实验室环境、小型团队 | 免费 |
| Business Edition (BE) | 企业生产环境,支持 5 节点以上 | 付费 |
Community Edition 是开源软件,适合学习和开发环境使用。
安装 Portainer CE(Docker Standalone)
以下步骤在 Linux 上使用 Docker 部署 Portainer CE。
第一步:创建数据卷
数据卷用于持久化 Portainer 的配置和数据库,即使容器被删除,数据也不会丢失。
docker volume create portainer_data
bash
第二步:运行 Portainer 容器
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:lts
bash
参数详解:
| 参数 | 说明 |
|---|---|
-d | 后台运行 |
-p 8000:8000 | 映射 TCP 隧道端口(Edge Agent 通信用,可选) |
-p 9443:9443 | 映射 Web UI 的 HTTPS 端口 |
--name portainer | 容器名称 |
--restart=always | Docker 守护进程启动时自动启动容器 |
-v /var/run/docker.sock:/var/run/docker.sock | 挂载 Docker 守护进程 socket,允许 Portainer 管理本机 Docker |
-v portainer_data:/data | 挂载持久化数据卷 |
默认使用自签名 SSL 证书。如需自定义证书,参考 Portainer 官方文档。
第三步:验证容器运行
docker ps
bash
确认 Status 列显示 Up 状态,且端口映射正确:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
a1b2c3d4e5f6 portainer/portainer-ce:lts "/portainer" 10 seconds ago Up 9 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:9443->9443/tcp
text
第四步:初始化 Portainer
- 浏览器访问
https://<服务器IP>:9443(注意是 HTTPS) - 首次访问需要设置管理员密码(至少 12 位)
- 选择环境类型,点击 Get Started
- 选择 Docker Standalone 连接本地 Docker 环境
注意:如果服务器不在本地,不能使用
localhost,需要使用服务器的实际 IP 地址访问。
端口映射注意事项
理解端口映射的内外关系至关重要:
- 冒号前面(宿主机端口) -- 外部访问的端口,需要在防火墙中放行
- 冒号后面(容器端口) -- 容器内部服务的监听端口,不可随意修改
-p 9443:9443
^ ^
| +-- 容器内部 Portainer Web UI 的 HTTPS 端口
+------- 宿主机暴露给外部的端口
text
如果宿主机 8000 端口已被占用,可以改为 -p 18000:8000,此时防火墙放行的是 18000。
数据卷挂载说明
-v 参数(Volume Mount)用于将宿主机资源挂载到容器内部:
| 挂载项 | 说明 |
|---|---|
/var/run/docker.sock | Docker 守护进程的 Unix socket,Portainer 通过它与 Docker API 通信 |
portainer_data:/data | 持久化 Portainer 自身的数据库和配置,防止容器删除后数据丢失 |
使用 Portainer 管理容器
连接成功后,可以在 Dashboard 中看到:
- Containers -- 查看所有容器的运行状态、CPU/内存占用
- Images -- 查看本地镜像,拉取新镜像
- Volumes -- 管理数据卷
- Networks -- 查看 Docker 网络
- Logs -- 点击容器即可查看实时日志,方便排查问题
通过 Web UI 创建 MySQL 容器
- 点击 Containers -> Add Container
- 填写名称:
mysql-test - 选择镜像:
mysql:latest - 配置端口映射:
33060:3306(手动指定,避免与已存在的 MySQL 冲突) - 添加环境变量:
MYSQL_ROOT_PASSWORD = 123456 - 点击 Deploy the container
容器创建后,可以直接在界面上进行 start / stop / restart / remove 操作,也可以查看实时日志。
架构概览
Portainer 支持多种部署架构:
Portainer Server
┌──────────────────┐
│ Web UI (9443) │
│ API │
└────────┬─────────┘
│
┌──────────────┼──────────────┐
v v v
Docker Standalone Docker Swarm Kubernetes
(docker.sock) (Agent) (Agent)
text
对于单节点开发环境,使用 Docker Standalone 模式最为简单。
Lazydocker:终端 UI 管理工具
如果更喜欢在终端中操作,但需要比纯 CLI 更直观的界面,Lazydocker 是一个优秀的选择。
安装 Lazydocker
# macOS
brew install lazydocker
# Linux
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
# Windows (Scoop)
scoop install lazydocker
bash
前置要求
| 依赖 | 版本要求 |
|---|---|
| Docker | >= 1.13.0 |
| Docker Compose | >= 1.23.2(可选) |
使用方式
# 在终端中启动
lazydocker
bash
Lazydocker 提供了一个类似 lazygit 的终端交互界面,可以:
- 查看所有容器和镜像的运行状态
- 查看容器日志
- 重启、停止、删除容器
- 查看镜像层级结构
- 检查 Docker Compose 服务状态
Portainer vs Lazydocker
| 对比维度 | Portainer | Lazydocker |
|---|---|---|
| 界面类型 | Web UI(浏览器) | 终端 UI(命令行) |
| 安装方式 | Docker 容器部署 | 本地二进制安装 |
| 功能丰富度 | 功能全面,支持集群管理 | 轻量级,核心功能 |
| 多用户支持 | 支持 | 不支持 |
| 适用场景 | 远程服务器管理、团队协作 | 本地开发、快速查看 |
| 学习成本 | 中等 | 低 |
小结
| 工具 | 要点 |
|---|---|
| Portainer | 功能全面的 Web 端容器管理平台,CE 版免费,适合个人和团队使用 |
| 安装步骤 | 创建数据卷 -> 运行容器 -> 访问 Web UI 初始化 |
| 端口映射 | -p 参数冒号前是宿主机端口(需防火墙放行),冒号后是容器内部端口 |
| 数据持久化 | 使用 Docker Volume 存放 Portainer 数据,防止容器删除后丢失 |
| Lazydocker | 终端 UI 工具,轻量快速,适合本地开发调试 |
| 选择建议 | 远程服务器用 Portainer,本地开发用 Lazydocker,两者可结合使用 |
↑