1. 项目概述
最近在阿里云上部署生产环境时,需要为Ubuntu 22.04.5 LTS服务器安装Docker 29.1.5版本。这个看似简单的任务在实际操作中却遇到了不少坑,特别是国内网络环境下从官方源安装速度极慢的问题。经过多次实践,我总结出了一套使用阿里云镜像的完整方案,特别适合国内生产环境部署。
提示:生产环境安装Docker不同于开发环境,需要特别注意版本兼容性、安全配置和稳定性问题。
2. 环境准备与依赖检查
2.1 系统基础配置
首先确保你的Ubuntu 22.04.5 LTS系统是最新状态:
sudo apt update && sudo apt upgrade -y sudo apt install -y apt-transport-https ca-certificates curl software-properties-common这几个基础包是Docker安装的前置依赖:
apt-transport-https:允许apt通过HTTPS协议访问仓库ca-certificates:CA根证书,用于验证HTTPS连接curl:命令行下载工具software-properties-common:提供add-apt-repository等管理工具
2.2 内核版本检查
生产环境特别需要注意内核兼容性:
uname -rDocker 29.x需要Linux内核版本至少为5.4以上。Ubuntu 22.04.5 LTS默认使用5.15内核,完全满足要求。
3. 使用阿里云镜像安装Docker
3.1 配置阿里云Docker CE镜像源
国内直接访问Docker官方源速度很慢,使用阿里云镜像可以大幅提升下载速度:
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"这里有几个关键点需要注意:
$(lsb_release -cs)会自动获取系统代号(如jammy)- 阿里云镜像仓库与官方源保持同步,但下载速度更快
- 生产环境建议固定Docker版本,而不是总是安装最新版
3.2 安装特定版本Docker
查看阿里云镜像中可用的Docker版本:
apt-cache madison docker-ce安装指定版本(29.1.5):
sudo apt install -y docker-ce=5:29.1.5-3~ubuntu.22.04~jammy docker-ce-cli=5:29.1.5-3~ubuntu.22.04~jammy containerd.io版本号格式说明:
5::Docker的epoch版本29.1.5:主版本号3~ubuntu.22.04~jammy:Ubuntu特定构建版本
3.3 验证安装
安装完成后检查版本:
docker --version sudo docker run hello-world如果看到"Hello from Docker!"消息,说明安装成功。
4. 生产环境关键配置
4.1 配置阿里云容器镜像加速
除了安装源,我们还需要配置容器镜像拉取加速:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://<your-aliyun-mirror>.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF配置说明:
registry-mirrors:替换为你的阿里云容器镜像服务加速地址native.cgroupdriver=systemd:与systemd更好的集成log-driver:日志文件配置,防止日志无限增长storage-driver:推荐使用overlay2存储驱动
4.2 重启Docker服务应用配置
sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl enable docker4.3 生产环境安全加固
- 将普通用户加入docker组(谨慎操作):
sudo usermod -aG docker $USER警告:生产环境需要严格控制docker组用户,因为docker组权限等同于root
- 配置Docker守护进程监听方式(推荐仅本地Unix socket):
sudo sed -i 's/^ExecStart=.*/ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock/' /lib/systemd/system/docker.service5. 常见问题与解决方案
5.1 版本冲突问题
如果之前安装过其他版本Docker,需要彻底清理:
sudo apt remove --purge docker-engine docker docker.io containerd runc sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd5.2 GPG密钥过期问题
如果遇到GPG密钥错误,可以更新密钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD85.3 存储驱动问题
检查当前存储驱动:
docker info | grep "Storage Driver"如果不是overlay2,可以修改/etc/docker/daemon.json配置后重启服务。
5.4 生产环境网络配置
在阿里云ECS上,可能需要额外配置:
sudo tee /etc/sysctl.d/docker.conf <<-'EOF' net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 EOF sudo sysctl --system6. 性能优化与监控
6.1 限制容器资源
在生产环境中,必须限制容器资源使用:
docker run -it --cpus=".5" --memory="512m" ubuntu /bin/bash6.2 日志轮转配置
防止Docker日志占用过多磁盘空间:
sudo tee /etc/docker/daemon.json <<-'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF6.3 健康检查配置
为关键服务容器添加健康检查:
docker run --name nginx --health-cmd="curl -f http://localhost || exit 1" --health-interval=5s --health-retries=3 nginx7. 备份与恢复策略
7.1 容器数据卷备份
docker run --rm --volumes-from my_container -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /volume_data7.2 完整Docker环境备份
sudo tar -czvf docker_backup.tar.gz /var/lib/docker7.3 镜像导出与导入
docker save -o my_image.tar my_image:tag docker load -i my_image.tar8. 升级与维护
8.1 安全更新策略
定期检查并应用安全更新:
sudo apt update sudo apt list --upgradable sudo apt upgrade -y8.2 版本升级步骤
升级Docker到新版本:
sudo apt update sudo apt install --only-upgrade docker-ce docker-ce-cli containerd.io8.3 回滚方案
如果新版本出现问题,可以回滚到旧版本:
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io9. 生产环境最佳实践
- 使用Docker Compose编排多容器应用
- 为每个服务配置资源限制
- 实现集中式日志收集
- 设置容器自动重启策略
- 定期扫描镜像漏洞
- 使用只读文件系统运行容器
- 禁用容器内的root权限
- 配置网络访问控制
- 实现容器间通信加密
- 建立完善的监控告警系统
在实际生产环境中,我通常会配置Prometheus+Grafana监控Docker主机和容器性能指标,使用ELK收集日志,并设置适当的告警阈值。这些配置可以确保我们能够及时发现并处理潜在问题。