Ubuntu系统Docker与Portainer部署全指南
1. Docker与Portainer部署指南
在当今的开发和运维环境中,容器化技术已经成为不可或缺的一部分。作为一名长期使用容器技术的从业者,我经常被问到如何快速搭建一个可靠的容器管理环境。本文将分享我在Ubuntu系统上部署Docker引擎和Portainer管理界面的完整流程,包含从基础安装到高级配置的全部细节。
2. 环境准备与Docker安装
2.1 系统要求检查
在开始安装前,我们需要确保系统满足基本要求:
- Ubuntu 20.04/22.04 LTS版本(其他版本可能需要进行额外配置)
- 至少2GB内存(4GB以上为佳)
- 20GB可用磁盘空间
- 具有sudo权限的用户账户
首先更新系统软件包:
sudo apt update && sudo apt upgrade -y2.2 Docker引擎安装
Docker提供了多种安装方式,我推荐使用官方仓库安装,这能确保获取最新稳定版本:
- 安装必要的依赖包:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common- 添加Docker官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg- 设置稳定版仓库:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- 安装Docker引擎:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io- 验证安装是否成功:
sudo docker run hello-world提示:如果看到"Hello from Docker!"消息,说明安装成功。如果遇到权限问题,可以将当前用户加入docker组:
sudo usermod -aG docker $USER,然后重新登录。
2.3 Docker服务配置优化
安装完成后,建议进行一些基础配置优化:
- 配置Docker守护进程:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF- 重启Docker服务使配置生效:
sudo systemctl restart docker sudo systemctl enable docker3. Portainer管理界面部署
3.1 Portainer简介
Portainer是一个轻量级的Docker管理UI,它提供了直观的图形界面来管理Docker环境。相比命令行,Portainer特别适合以下场景:
- 团队协作环境
- 需要快速查看容器状态
- 不熟悉Docker命令的新手
- 需要集中管理多个Docker主机
3.2 Portainer社区版安装
我们将使用Docker来部署Portainer社区版:
- 创建Portainer使用的数据卷:
docker volume create portainer_data- 启动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:latest注意:这里我们同时映射了8000和9443端口。8000端口用于Edge代理功能,9443端口用于Web UI访问。
3.3 初始配置与安全加固
访问Portainer界面: 打开浏览器访问
https://<服务器IP>:9443,首次访问会提示创建管理员账户。安全建议配置:
- 使用强密码(至少12位,包含大小写字母、数字和特殊字符)
- 启用HTTPS(Portainer默认使用自签名证书)
- 配置会话超时时间(建议15-30分钟)
- 定期备份
portainer_data卷
- 配置本地Docker环境: 登录后,Portainer会提示连接环境。选择"Docker Standalone"并点击"Connect"即可。
4. 高级配置与优化
4.1 镜像加速配置
国内用户可能会遇到镜像拉取慢的问题,可以通过配置镜像加速解决:
- 修改daemon.json文件:
sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF- 重启Docker服务:
sudo systemctl restart docker4.2 Portainer业务配置
- 模板配置: Portainer提供了应用模板功能,可以快速部署常见应用。建议添加常用模板:
- 进入Settings > App Templates
- 添加官方模板库:
https://raw.githubusercontent.com/portainer/templates/master/templates.json
- 用户与团队管理: 对于生产环境,建议配置细粒度的访问控制:
- 创建不同角色的用户(管理员、运维、开发等)
- 配置资源访问限制
- 设置团队并分配相应权限
- 监控与告警: Portainer提供基础监控功能,可以:
- 查看容器资源使用情况
- 配置简单的告警规则
- 查看容器日志
5. 常见问题与解决方案
5.1 Docker安装问题
问题1:依赖冲突解决方案:
sudo apt --fix-broken install sudo apt autoremove问题2:无法启动docker服务检查命令:
sudo systemctl status docker journalctl -xe5.2 Portainer访问问题
问题1:无法访问Web界面检查步骤:
- 确认防火墙放行了9443端口
- 检查容器是否正常运行:
docker ps -a - 查看容器日志:
docker logs portainer
问题2:忘记管理员密码重置方法:
docker stop portainer docker run --rm -v portainer_data:/data portainer/helper-reset-password docker start portainer5.3 性能优化建议
- 限制容器资源:
docker update --memory 512M --memory-swap 1G <容器名>- 清理无用资源:
docker system prune -a --volumes- 日志轮转配置: 在
/etc/docker/daemon.json中添加:
"log-opts": { "max-size": "50m", "max-file": "3" }6. 生产环境部署建议
在实际生产环境中部署时,我建议考虑以下额外措施:
- 高可用部署:
- 使用Docker Swarm或Kubernetes集群
- 部署多个Portainer实例并配置负载均衡
- 定期备份Portainer数据卷
- 安全加固:
- 配置TLS客户端证书认证
- 启用审计日志
- 定期更新Docker和Portainer版本
- 监控集成:
- 配置Prometheus监控Docker指标
- 使用Grafana展示监控数据
- 设置关键指标告警
- 备份策略:
# 备份Portainer数据 docker run --rm -v portainer_data:/data -v $(pwd):/backup alpine tar czf /backup/portainer-backup-$(date +%Y%m%d).tar.gz /data # 备份Docker配置 sudo tar czf docker-config-$(date +%Y%m%d).tar.gz /etc/docker7. 扩展功能与进阶使用
7.1 Portainer业务模板开发
Portainer支持自定义模板,可以简化团队内部常用应用的部署:
- 创建模板JSON文件:
{ "version": "2", "templates": [ { "type": 1, "title": "WordPress Stack", "description": "WordPress with MySQL", "note": "Deploys a WordPress instance with a MySQL database", "categories": ["CMS"], "platform": "linux", "logo": "https://portainer.io/images/logos/wordpress.png", "repository": { "url": "https://github.com/portainer/templates", "stackfile": "stacks/wordpress/docker-compose.yml" } } ] }- 在Portainer中添加自定义模板库
7.2 API集成
Portainer提供了完整的REST API,可以实现自动化管理:
- 获取API密钥:
- 登录Portainer
- 进入Users设置
- 生成API密钥
- 示例API调用(获取容器列表):
curl -X GET \ -H "X-API-Key: your-api-key" \ https://your-portainer-url/api/endpoints/1/docker/containers/json7.3 多环境管理
Portainer可以管理多个Docker环境:
- 添加新环境:
- 远程Docker主机需要开启TCP端口(建议配置TLS)
- 在Portainer中添加新Endpoint
- 配置访问凭证
- 环境分组:
- 创建环境组(如开发、测试、生产)
- 配置统一的访问策略
8. 版本升级与维护
8.1 Docker引擎升级
- 检查当前版本:
docker version- 升级步骤:
sudo apt update sudo apt install --only-upgrade docker-ce docker-ce-cli containerd.io8.2 Portainer升级
- 停止并删除旧容器:
docker stop portainer docker rm portainer- 拉取新版本镜像:
docker pull portainer/portainer-ce:latest- 重新创建容器(使用原有数据卷):
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:latest8.3 定期维护任务
建议设置以下定期维护任务:
- 资源清理(每周):
docker system prune -f- 安全检查(每月):
docker scan <镜像名>- 备份验证(每日):
# 验证备份文件完整性 tar tf portainer-backup-*.tar.gz