1. 为什么选择Docker?容器化技术的核心优势
作为一名在运维领域摸爬滚打多年的老兵,我见证了从物理服务器到虚拟化再到容器化的技术演进。Docker之所以能成为容器技术的代名词,核心在于它解决了传统部署中的几个痛点:
- 环境一致性:开发环境"能跑"而生产环境"崩盘"的问题,通过容器镜像彻底解决。我在金融行业迁移老旧系统时,曾用Docker将原本需要3天部署的Java应用缩短到15分钟
- 资源利用率:相比虚拟机动辄GB级的内存占用,容器共享主机内核的特性使得单台物理机可以运行的服务数量提升5-8倍(实测数据)
- 快速部署:基于分层镜像的机制,使得应用部署像git拉取代码一样简单。去年帮某电商处理大促扩容,200个节点部署时间从6小时降至40分钟
重要提示:Ubuntu 22.04以下版本(如20.04 LTS)仍是企业生产环境的主流选择,但官方仓库的Docker版本可能较旧。本文方案将绕过系统仓库,直接使用Docker官方源获取最新稳定版。
2. 环境准备与系统检查
2.1 硬件与系统要求
虽然Docker对硬件要求极低,但生产环境建议满足:
- CPU:支持64位架构(x86_64或arm64)
- 内存:至少2GB(实际需求取决于应用)
- 存储:20GB可用空间(镜像会占用大量空间)
验证CPU虚拟化支持(KVM加速需要):
grep -E --color 'vmx|svm' /proc/cpuinfo2.2 系统版本确认
执行以下命令获取精确版本信息:
lsb_release -dc # 示例输出: # Description: Ubuntu 20.04.6 LTS # Codename: focal避坑经验:我曾遇到某定制化Ubuntu发行版(基于18.04)因内核魔改导致Docker兼容性问题。建议使用标准LTS版本,非LTS版可能存在不可预知的问题。
2.3 彻底更新系统
这个步骤经常被忽视,但极其重要:
sudo apt update && sudo apt full-upgrade -y sudo apt autoremove --purge -y关键点:
full-upgrade比普通upgrade更彻底,会处理依赖关系变更- 建议重启后确认内核版本:
uname -sr
3. Docker安装全流程解析
3.1 依赖包安装
除了常规依赖,还需要专门处理存储驱动:
sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common \ gnupg-agent \ lsb-release存储驱动选择建议:
- 默认
overlay2适合大多数场景 - 若使用ZFS/Btrfs文件系统需额外配置
- 企业级环境建议单独挂载
/var/lib/docker目录
3.2 安全密钥处理
Docker官方GPG密钥获取(注意URL中的版本标识):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg权限设置是关键步骤:
sudo chmod a+r /etc/apt/keyrings/docker.gpg3.3 仓库源配置
针对不同架构的规范写法:
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技术细节:这里使用
$(dpkg --print-architecture)自动适配x86/arm架构,避免手动修改。
3.4 安装Docker引擎
更新索引后安装:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io版本锁定(生产环境推荐):
sudo apt-mark hold docker-ce docker-ce-cli containerd.io4. 服务配置与验证
4.1 服务管理
启动并设置开机自启:
sudo systemctl enable --now docker验证服务状态:
sudo systemctl status docker --no-pager -l健康检查三件套:
sudo docker info | grep -i runtime sudo docker stats --no-stream sudo ls -l /var/run/docker.sock4.2 运行测试容器
经典hello-world:
sudo docker run --rm hello-world更全面的压力测试(使用stress工具):
sudo docker run --rm -it alpine sh -c \ "apk add stress && stress --cpu 2 --timeout 30s"5. 权限优化配置
5.1 用户组管理
将当前用户加入docker组:
sudo usermod -aG docker $USER newgrp docker # 立即生效权限验证:
docker run --rm hello-world安全警告:我曾审计过某公司事故,因滥用docker组权限导致容器逃逸。生产环境建议结合SELinux/AppArmor使用。
5.2 日志与存储配置
修改daemon.json优化配置:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" }, "storage-driver": "overlay2" } EOF重载配置:
sudo systemctl restart docker6. 生产环境必备工具链
6.1 常用管理命令
| 场景 | 命令 | 说明 |
|---|---|---|
| 镜像管理 | docker image ls --digests | 显示镜像哈希值 |
| 容器排查 | docker exec -it <ID> bash | 进入运行中容器 |
| 网络诊断 | docker network inspect bridge | 查看默认网络配置 |
| 资源监控 | docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | 定制化监控输出 |
6.2 辅助工具推荐
ctop- 容器版top:
sudo docker run --rm -ti \ --name=ctop \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ quay.io/vektorlab/ctop:latestdive- 镜像分析工具:
docker run --rm -ti \ -v /var/run/docker.sock:/var/run/docker.sock \ wagoodman/dive:latest <IMAGE_ID>
7. 故障排查手册
7.1 常见问题解决方案
问题1:无法连接Docker守护进程
# 检查服务状态 sudo systemctl status docker # 查看日志(journalctl需要sudo) sudo journalctl -u docker --since "1 hour ago" -n 50问题2:镜像拉取失败
# 切换国内镜像源 sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://registry.cn-hangzhou.aliyuncs.com" ] } EOF sudo systemctl restart docker7.2 性能优化技巧
限制日志体积:
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log清理无用资源:
docker system prune --volumes -f内核参数调优:
echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
8. 完整卸载指南
8.1 彻底卸载步骤
停止所有容器:
docker stop $(docker ps -aq)删除所有资源:
docker system prune --all --volumes -f卸载软件包:
sudo apt purge -y docker-ce docker-ce-cli containerd.io清理残留:
sudo rm -rf /var/lib/docker /etc/docker sudo rm /etc/apt/keyrings/docker.gpg sudo rm /etc/apt/sources.list.d/docker.list
8.2 配置回滚检查
确认卸载完成:
which docker || echo "Not installed" dpkg -l | grep docker || echo "No packages"在帮助数十家企业部署Docker环境的过程中,我发现90%的问题源于不规范的安装或配置。遵循本文步骤可以避开大多数坑点,特别是生产环境务必做好版本锁定和日志管理。对于关键业务系统,建议额外配置监控告警和定期备份策略。