Ubuntu 22.04 LTS下Docker环境部署与优化指南
1. 为什么选择Docker与Ubuntu的组合
在Linux发行版中,Ubuntu以其友好的社区支持和稳定的长期维护版本(LTS)著称。我五年前第一次在生产环境使用Docker时,就选择了Ubuntu 16.04作为宿主机系统。这个组合的优势在于:Ubuntu官方仓库对Docker生态的支持非常及时,apt-get的依赖管理能有效解决容器化过程中的库冲突问题。
最近帮团队搭建新的CI/CD环境时,发现仍有不少开发者会在Docker安装环节踩坑。本文将以Ubuntu 22.04 LTS为例,演示从零开始完成Docker环境部署的全过程,包含三个关键阶段:
- 旧版本清理(避免残留冲突)
- 官方源配置(保证更新及时性)
- 权限优化(解决sudo频繁使用问题)
2. 环境准备与旧版本清理
2.1 系统版本确认
首先通过以下命令检查系统架构和版本:
lsb_release -a uname -m输出示例:
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.1 LTS Release: 22.04 Codename: jammy x86_64注意:虽然Docker支持arm架构,但生产环境建议使用x86_64架构以获得最佳兼容性。若看到aarch64输出,需要特别注意镜像兼容性。
2.2 彻底移除旧版本
很多安装问题源于旧组件残留,执行以下清理命令:
sudo apt-get remove docker docker-engine docker.io containerd runc sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd关键目录说明:
/var/lib/docker:存储镜像和容器数据的核心目录/var/lib/containerd:容器运行时底层数据/etc/docker:配置文件目录(首次安装后生成)
3. 通过APT仓库安装
3.1 配置可信软件源
官方推荐通过APT仓库安装,而非直接下载deb包:
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release添加Docker官方GPG密钥:
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg配置稳定版仓库:
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/null3.2 安装Docker引擎
更新源并安装最新组件:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin验证安装版本:
docker --version containerd --version预期输出类似:
Docker version 20.10.21, build baeda1f containerd containerd.io 1.6.8 9cd3357b7fd7218e4a3c3eae3bd6477bd4. 权限与系统配置优化
4.1 免sudo执行docker命令
将当前用户加入docker组:
sudo usermod -aG docker $USER newgrp docker # 立即生效无需重启验证权限:
docker run hello-world成功运行表示权限配置正确。
4.2 配置镜像加速(国内环境)
创建或修改配置文件:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF重启服务生效:
sudo systemctl daemon-reload sudo systemctl restart docker5. 核心组件验证与排错
5.1 检查服务状态
查看Docker引擎运行状态:
sudo systemctl status docker健康状态应显示"active (running)",重点关注以下日志:
Loaded:确认单元文件路径正确Active:运行持续时间Main PID:主进程状态
5.2 典型问题排查
问题1:iptables/nftables冲突症状:容器无法访问外网 解决方案:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy问题2:cgroup驱动不匹配症状:Kubernetes节点注册失败 验证命令:
docker info | grep -i cgroup若显示cgroupfs,需修改为systemd(见4.2配置)
问题3:存储驱动异常检查命令:
docker info | grep -i storageUbuntu 22.04推荐使用overlay2,若显示aufs需调整存储驱动。
6. 生产环境必备工具链
6.1 安装Docker Compose V2
新版已集成compose-plugin,创建符号链接:
sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose验证版本:
docker compose version6.2 可视化管理工具
安装Portainer CE:
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访问https://localhost:9443 完成初始化配置。
6.3 日志与监控方案
推荐组合:
docker logs:查看实时日志docker stats:监控资源占用cAdvisor:容器指标收集
docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ --privileged \ --device=/dev/kmsg \ gcr.io/cadvisor/cadvisor:v0.47.07. 安全加固建议
7.1 用户命名空间隔离
编辑配置文件:
sudo tee /etc/docker/daemon.json <<-'EOF' { "userns-remap": "default" } EOF创建专用用户组:
sudo groupadd -g 10000 dockremap sudo useradd -u 10000 -g dockremap -s /bin/false dockremap sudo echo "dockremap:100000:65536" >> /etc/subuid sudo echo "dockremap:100000:65536" >> /etc/subgid7.2 容器运行时保护
启用以下内核参数:
sudo tee /etc/sysctl.d/10-docker-security.conf <<-'EOF' net.ipv4.ip_forward=0 net.ipv6.conf.all.forwarding=0 kernel.kptr_restrict=2 kernel.dmesg_restrict=1 EOF sudo sysctl --system8. 性能调优实战
8.1 存储驱动优化
检查当前存储驱动:
docker info | grep "Storage Driver"针对SSD设备的优化配置:
sudo tee /etc/docker/daemon.json <<-'EOF' { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true", "overlay2.size=20G" ] } EOF8.2 内存与CPU限制
创建带资源限制的容器:
docker run -it \ --cpus=1.5 \ --memory=2g \ --memory-swap=3g \ --memory-swappiness=60 \ ubuntu /bin/bash验证限制生效:
docker stats