引言
在企业级环境中,由于安全策略或网络限制,服务器往往无法直接访问互联网。在这种离线环境下,如何安装和部署Docker容器管理工具Portainer成为了运维人员面临的重要挑战。本文将详细介绍在离线环境下安装Portainer的完整流程,包括镜像准备、传输、部署等关键步骤。
什么是Portainer
Portainer是一个轻量级的Docker管理界面,提供了直观的Web UI来管理Docker容器、镜像、网络和数据卷。它支持单机和集群模式,是Docker环境下最受欢迎的可视化管理工具之一。
Portainer的核心优势
- 直观的Web界面:无需命令行即可管理Docker资源
- 轻量级设计:资源占用极少,部署简单
- 多环境支持:支持Docker、Docker Swarm、Kubernetes
- 权限管理:提供细粒度的用户权限控制
- 实时监控:容器状态、资源使用情况一目了然
离线安装准备工作
环境要求
在开始离线安装之前,确保目标环境满足以下要求:
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Docker | ≥ 17.06 | 支持Docker API 1.30+ |
| 操作系统 | Linux/Windows/macOS | 推荐使用Linux |
| 内存 | ≥ 512MB | 推荐1GB以上 |
| 存储空间 | ≥ 1GB | 用于存储镜像和数据 |
所需文件清单
离线安装需要准备以下文件:
- Portainer镜像文件:
portainer-ce.tar - Portainer Agent镜像文件(可选):
portainer-agent.tar - 安装脚本:
install-portainer.sh - 配置文件:
docker-compose.yml
步骤一:在联网环境下载镜像
下载Portainer CE镜像
在有网络连接的机器上执行以下命令:
# 拉取最新版本的Portainer CE镜像
docker pull portainer/portainer-ce:latest
# 查看镜像信息
docker images | grep portainer下载Portainer Agent镜像(集群环境需要)
如果需要管理多个Docker主机,还需要下载Agent镜像:
# 拉取Portainer Agent镜像
docker pull portainer/agent:latest
# 验证镜像下载
docker images | grep agent导出镜像为tar文件
将下载的镜像导出为tar文件,便于传输到离线环境:
# 导出Portainer CE镜像
docker save -o portainer-ce.tar portainer/portainer-ce:latest
# 导出Portainer Agent镜像(可选)
docker save -o portainer-agent.tar portainer/agent:latest
# 检查导出的文件
ls -lh *.tar步骤二:传输文件到离线环境
文件传输方式
根据实际情况选择合适的传输方式:
方式一:USB存储设备
# 将文件复制到USB设备
cp portainer-ce.tar /media/usb/
cp portainer-agent.tar /media/usb/
cp install-portainer.sh /media/usb/方式二:SCP传输(内网可达)
# 使用SCP传输到目标服务器
scp portainer-ce.tar user@target-server:/tmp/
scp install-portainer.sh user@target-server:/tmp/方式三:网络共享
# 通过NFS或SMB共享传输
# 具体命令根据网络环境而定步骤三:在离线环境导入镜像
导入Docker镜像
在目标离线服务器上执行:
# 导入Portainer CE镜像
docker load -i portainer-ce.tar
# 导入Portainer Agent镜像(如果需要)
docker load -i portainer-agent.tar
# 验证镜像导入成功
docker images | grep portainer验证镜像完整性
# 检查镜像详细信息
docker inspect portainer/portainer-ce:latest
# 验证镜像层完整性
docker history portainer/portainer-ce:latest步骤四:部署Portainer
单机模式部署
创建数据卷
# 创建Portainer数据卷
docker volume create portainer_data
# 查看创建的数据卷
docker volume ls | grep portainer启动Portainer容器
# 启动Portainer CE容器
docker run -d \
--name portainer \
--restart=always \
-p 8000:8000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest参数说明
| 参数 | 说明 |
|---|---|
-d | 后台运行容器 |
--name portainer | 设置容器名称 |
--restart=always | 容器自动重启 |
-p 8000:8000 | Edge Agent端口映射 |
-p 9443:9443 | HTTPS Web界面端口 |
-v /var/run/docker.sock | Docker socket挂载 |
-v portainer_data:/data | 数据持久化 |
使用Docker Compose部署
创建docker-compose.yml
version: '3.8'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "8000:8000"
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
environment:
- PORTAINER_ADMIN_PASSWORD_FILE=/run/secrets/portainer_admin_password
secrets:
- portainer_admin_password
volumes:
portainer_data:
secrets:
portainer_admin_password:
file: ./admin_password.txt启动服务
# 创建管理员密码文件
echo "your_secure_password" > admin_password.txt
# 启动Portainer服务
docker-compose up -d
# 查看服务状态
docker-compose ps步骤五:集群模式部署(可选)
在管理节点部署Portainer
# 在Swarm管理节点部署Portainer
docker service create \
--name portainer \
--publish published=9443,target=9443 \
--publish published=8000,target=8000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=volume,src=portainer_data,dst=/data \
portainer/portainer-ce:latest在工作节点部署Agent
# 在每个工作节点部署Agent
docker service create \
--name portainer_agent \
--network portainer_agent_network \
--mode global \
--constraint 'node.platform.os == linux' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=/var/lib/docker/volumes,dst=/var/lib/docker/volumes \
portainer/agent:latest步骤六:初始化配置
首次访问设置
-
访问Web界面
# 通过浏览器访问 https://your-server-ip:9443 -
创建管理员账户
- 用户名:admin
- 密码:至少12位字符
- 确认密码
-
选择环境类型
- Docker(单机模式)
- Docker Swarm(集群模式)
- Kubernetes(K8s环境)
安全配置建议
SSL证书配置
# 生成自签名证书(生产环境建议使用正式证书)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout portainer.key -out portainer.crt
# 将证书挂载到容器
docker run -d \
--name portainer \
--restart=always \
-p 9443:9443 \
-v /path/to/portainer.crt:/certs/portainer.crt \
-v /path/to/portainer.key:/certs/portainer.key \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest --ssl --sslcert /certs/portainer.crt --sslkey /certs/portainer.key防火墙配置
# 开放必要端口
sudo ufw allow 9443/tcp # HTTPS Web界面
sudo ufw allow 8000/tcp # Edge Agent端口
# 重新加载防火墙规则
sudo ufw reload故障排查
常见问题及解决方案
问题1:容器启动失败
# 查看容器日志
docker logs portainer
# 检查端口占用
netstat -tlnp | grep :9443
# 检查Docker socket权限
ls -la /var/run/docker.sock问题2:无法访问Web界面
# 检查容器状态
docker ps | grep portainer
# 检查端口映射
docker port portainer
# 测试端口连通性
telnet localhost 9443问题3:镜像导入失败
# 检查tar文件完整性
md5sum portainer-ce.tar
# 清理损坏的镜像
docker rmi portainer/portainer-ce:latest
# 重新导入镜像
docker load -i portainer-ce.tar