1. 为什么选择Ubuntu+Docker组合
在Linux发行版中,Ubuntu以其完善的软件生态和友好的社区支持,成为最受欢迎的Docker运行平台之一。根据2023年Docker官方统计,超过63%的生产环境容器部署在Ubuntu Server上。这个组合的优势主要体现在:
- 内核兼容性:Ubuntu默认使用较新的Linux内核(5.15+),完美支持cgroups v2和overlay2存储驱动
- 工具链完整:apt仓库原生包含docker.io软件包,且版本与系统其他组件经过充分兼容性测试
- 资源消耗低:相比Windows下的Docker Desktop,原生Linux环境可节省约30%的内存开销
我在生产环境中部署过上百台Ubuntu+Docker主机,实测22.04 LTS版本运行容器时,其稳定性显著优于其他发行版。下面分享的安装方法适用于Ubuntu 20.04/22.04 LTS版本。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的系统准备
2.1 硬件环境检查
运行以下命令确认系统架构和虚拟化支持:
bash复制# 检查CPU架构
uname -m
# 确认虚拟化支持(应有vmx或svm标志)
grep -E --color 'vmx|svm' /proc/cpuinfo
注意:如果是在虚拟机中安装,需要在VMware/Hyper-V中开启嵌套虚拟化。物理机需在BIOS中启用Intel VT-x/AMD-V功能。
2.2 系统更新与依赖安装
建议先执行完整的系统更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
2.3 存储驱动选择
Ubuntu默认使用overlay2驱动,但建议确认/etc/docker/daemon.json不存在旧配置:
bash复制sudo rm -f /etc/docker/daemon.json
3. Docker安装的三种方式
3.1 官方仓库安装(推荐)
这是最稳定的安装方式,适合生产环境:
- 添加Docker官方GPG密钥:
bash复制sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 设置稳定版仓库:
bash复制echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装Docker引擎:
bash复制sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
3.2 使用apt仓库安装
Ubuntu自带的docker.io包版本较旧,但兼容性最好:
bash复制sudo apt install -y docker.io
3.3 使用便捷脚本安装
开发环境可考虑使用官方提供的测试脚本:
bash复制curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
警告:此方式会安装最新测试版,不建议用于生产环境
4. 安装后的关键配置
4.1 用户组管理
将当前用户加入docker组以避免sudo:
bash复制sudo usermod -aG docker $USER
newgrp docker # 立即生效
4.2 镜像加速配置
创建或修改/etc/docker/daemon.json:
json复制{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://hub-mirror.c.163.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
重载配置:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
4.3 验证安装
运行测试容器:
bash复制docker run --rm hello-world
检查版本信息:
bash复制docker version
docker info
5. 常见问题排查指南
5.1 网络连接问题
如果出现Cannot connect to the Docker daemon错误:
- 检查服务状态:
bash复制sudo systemctl status docker
- 查看详细日志:
bash复制journalctl -xu docker
5.2 存储驱动故障
当出现overlay2: invalid argument错误时:
- 清理现有容器:
bash复制docker system prune -a
- 重置存储驱动:
bash复制sudo rm -rf /var/lib/docker
sudo systemctl restart docker
5.3 权限拒绝问题
处理Got permission denied错误:
- 确认用户组:
bash复制groups | grep docker
- 重置docker.sock权限:
bash复制sudo chmod 666 /var/run/docker.sock
6. 生产环境优化建议
6.1 内核参数调整
编辑/etc/sysctl.conf添加:
conf复制net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
fs.file-max=1000000
应用修改:
bash复制sudo sysctl -p
6.2 日志轮转配置
创建/etc/logrotate.d/docker:
conf复制/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
delaycompress
missingok
copytruncate
}
6.3 安全加固措施
- 启用用户命名空间:
bash复制sudo echo "dockremap:165536:65536" >> /etc/subuid
sudo echo "dockremap:165536:65536" >> /etc/subgid
- 配置daemon.json安全参数:
json复制{
"userns-remap": "dockremap",
"no-new-privileges": true
}
7. 进阶工具链配置
7.1 Docker Compose安装
对于v2版本:
bash复制sudo apt install -y docker-compose-plugin
验证安装:
bash复制docker compose version
7.2 可视化工具Portainer
单机版部署:
bash复制docker volume create portainer_data
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
7.3 构建缓存清理
设置每周自动清理:
bash复制sudo crontab -e
添加:
cron复制0 3 * * 0 docker system prune -af --filter "until=168h"
8. 性能监控方案
8.1 cAdvisor部署
实时监控容器资源:
bash复制docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
gcr.io/cadvisor/cadvisor:v0.47.0
8.2 资源限制实践
运行容器时添加限制:
bash复制docker run -it --cpus=1.5 --memory=2g --memory-swap=2g ubuntu
检查资源使用:
bash复制docker stats
9. 备份与恢复策略
9.1 容器持久化备份
导出运行中容器:
bash复制docker export <container-id> > container_backup.tar
导入为镜像:
bash复制cat container_backup.tar | docker import - backup-image
9.2 全量数据备份
使用volume备份:
bash复制docker run --rm \
-v your_volume:/volume \
-v $(pwd):/backup \
alpine \
tar -czf /backup/backup.tar.gz -C /volume .
9.3 配置版本控制
建议将以下目录纳入git管理:
- /etc/docker/
- ~/.docker/
- 所有docker-compose.yml文件
10. 实际使用技巧
10.1 快速清理技巧
一键清理所有停止的容器:
bash复制docker container prune -f
删除所有未被使用的镜像:
bash复制docker image prune -a
10.2 日志查看方法
跟踪容器日志:
bash复制docker logs -f --tail 100 <container-name>
按时间筛选日志:
bash复制docker logs --since 2023-01-01T00:00:00 <container>
10.3 快速调试技巧
进入运行中容器:
bash复制docker exec -it <container> bash
拷贝容器内文件:
bash复制docker cp <container>:/path/to/file ./local_path
在多年的运维实践中,我发现保持Docker环境整洁的关键是建立定期维护习惯。建议每周检查一次磁盘使用情况(docker system df),每月更新一次基础镜像。对于生产环境,务必使用固定版本标签而非latest,避免不可预期的升级问题。
