尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ubuntu Docker安装指南:避坑与优化实践

Ubuntu Docker安装指南:避坑与优化实践 1. 为什么需要这份Ubuntu Docker安装指南在Linux环境下部署Docker本应是简单的apt-get操作但实际安装过程中总会遇到各种玄学问题从内核版本冲突到镜像拉取失败从权限配置错误到虚拟化支持缺失。我在为数十家企业部署容器化环境时发现90%的初级问题都集中在安装环节。这份指南将系统性地解决以下痛点官方文档未提及的APT源配置陷阱特别是Ubuntu LTS版本的特殊处理国内开发者必然遇到的镜像拉取超时问题由SELinux、AppArmor等安全模块引发的权限故障硬件虚拟化支持检测失败的典型解决方案重要提示本文所有配置均基于Ubuntu 22.04 LTS验证但方法论适用于18.04及以上版本。遇到问题时请先核对您的系统版本。2. 前置环境检查与问题预防2.1 内核版本与硬件兼容性验证在终端执行以下命令检查关键指标# 查看内核版本要求5.4以上 uname -r # 检查虚拟化支持必须有vmx或svm输出 grep -E --color vmx|svm /proc/cpuinfo # 验证cgroup支持应有memory、devices等目录 ls /sys/fs/cgroup常见问题处理若缺少虚拟化支持BIOS中开启VT-x/AMD-V选项云服务器需联系供应商开启嵌套虚拟化物理机检查是否在Windows Hyper-V宿主环境下运行2.2 彻底卸载旧版Docker残留的旧版本是导致安装失败的主因之一执行完整清理sudo apt-get remove docker docker-engine docker.io containerd runc sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd3. 分步安装流程与避坑要点3.1 配置APT源关键步骤官方推荐方法在国内网络环境下极易失败改用国内镜像源# 安装基础依赖 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加GPG密钥注意区分Ubuntu版本 curl -fsSL https://mirrors.aliyun.com/docker-ce/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://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null避坑提示某些Ubuntu衍生版如Linux Mint的$(lsb_release -cs)可能返回不兼容的代号需手动替换为对应的Ubuntu基础版本代号如mint 21对应jammy3.2 安装Docker引擎执行标准安装流程sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin验证安装成功sudo docker run hello-world若出现permission denied错误需要将当前用户加入docker组sudo usermod -aG docker $USER newgrp docker # 立即生效无需重启4. 国内镜像加速配置实战4.1 主流镜像加速器对比服务商注册需求速率限制特殊功能阿里云需要无企业版镜像同步腾讯云需要无海外加速节点网易蜂巢不需要有公开镜像库丰富中科大不需要有学术资源同步快4.2 配置daemon.json推荐阿里云创建或修改配置文件sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://your-code.mirror.aliyuncs.com], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 } EOF获取阿里云加速地址登录阿里云容器镜像服务控制台左侧菜单选择镜像加速器复制专属加速器地址替换your-code重载配置并重启sudo systemctl daemon-reload sudo systemctl restart docker验证加速生效docker info | grep Mirrors -A 25. 典型问题排查手册5.1 虚拟化支持报错处理当出现virtualisation support not detected时# 检查kvm模块 lsmod | grep kvm # 若无输出则加载模块 sudo modprobe kvm sudo modprobe kvm_intel # Intel CPU # 或 sudo modprobe kvm_amd # AMD CPU # 永久生效 echo kvm | sudo tee -a /etc/modules echo kvm_intel | sudo tee -a /etc/modules5.2 镜像拉取失败解决方案错误现象Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled临时解决方案docker pull --platform linux/amd64 image_name永久解决方案确认daemon.json中的mirrors配置正确测试基础网络连通性curl -v https://registry-1.docker.io如遇SNI阻断可尝试修改DNS为223.5.5.5或119.29.29.295.3 容器权限问题调试典型错误Could not open /dev/ttyUSB0: Permission denied解决方法# 查看设备权限 ls -l /dev/ttyUSB0 # 临时解决方案 sudo chmod 666 /dev/ttyUSB0 # 永久解决方案创建udev规则 sudo tee /etc/udev/rules.d/99-docker-devices.rules -EOF KERNELttyUSB[0-9]*, MODE0666 KERNELttyACM[0-9]*, MODE0666 EOF sudo udevadm control --reload-rules6. 生产环境优化建议6.1 存储驱动选择根据文件系统类型选择最优驱动# 查看当前文件系统 df -Th /var/lib/docker推荐配置ext4/xfs: overlay2默认btrfs: btrfszfs: zfs6.2 日志轮转配置防止日志爆盘在daemon.json中添加log-opts: { max-size: 50m, max-file: 3, compress: true }6.3 内核参数调优编辑/etc/sysctl.conf添加# 容器网络优化 net.ipv4.ip_forward1 net.bridge.bridge-nf-call-iptables1 net.bridge.bridge-nf-call-ip6tables1 # 内存与进程管理 vm.swappiness0 vm.max_map_count262144应用修改sudo sysctl -p7. 进阶技巧多版本Docker共存使用官方提供的便捷脚本安装特定版本# 列出可用版本 apt-cache madison docker-ce # 安装指定版本如20.10.17 sudo apt-get install docker-ce5:20.10.17~3-0~ubuntu-jammy docker-ce-cli5:20.10.17~3-0~ubuntu-jammy containerd.io版本切换方案# 查看当前版本 docker version # 切换版本前先卸载现有版本 sudo apt-get remove docker-ce # 然后安装目标版本8. 安全加固措施8.1 用户命名空间隔离编辑/etc/docker/daemon.json添加userns-remap: default初始化用户映射sudo touch /etc/subuid /etc/subgid sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)8.2 容器只读文件系统运行容器时强制只读docker run --read-only -d nginx例外目录可写docker run --read-only --tmpfs /run --tmpfs /tmp -d nginx8.3 网络访问控制创建自定义网络并启用加密docker network create --driver overlay --opt encrypted my-secure-net限制容器网络能力docker run --network none alpine ping 8.8.8.8 # 将失败
返回列表