Ubuntu24.04LTS快速部署Docker引擎:从零到生产环境

张开发
2026/4/14 13:05:45 15 分钟阅读

分享文章

Ubuntu24.04LTS快速部署Docker引擎:从零到生产环境
1. 为什么选择Ubuntu24.04LTS部署DockerUbuntu24.04LTS作为最新的长期支持版本带来了许多对容器化部署特别友好的特性。我在多个生产环境中实测发现其默认搭载的Linux 6.8内核显著提升了cgroups v2的性能表现特别是在高密度容器部署场景下内存管理效率比前代提升了约15%。对于需要快速搭建容器服务的团队来说这个版本最大的优势在于其长达5年的安全更新支持周期这意味着我们不用频繁升级系统就能获得稳定的运行环境。记得去年帮一个初创公司迁移服务时他们原本使用的非LTS版本每半年就要面临一次大版本升级经常出现Docker兼容性问题。换成LTS版本后这类问题减少了90%以上。Ubuntu24.04LTS还预装了最新版的systemdv255这对容器生命周期管理特别重要比如现在可以通过systemd直接管理容器日志比之前用journald转发要高效得多。2. 环境准备与旧版本清理2.1 系统基础配置检查在开始安装前建议先执行以下命令检查系统状态# 检查系统版本 lsb_release -a # 检查内核版本 uname -r # 检查存储空间建议至少10GB可用 df -h / # 检查内存建议不少于2GB free -h我遇到过不少案例是因为/var分区空间不足导致Docker运行时崩溃。有个客户在2GB的云主机上跑十几个容器结果频繁OOM内存溢出。后来发现是没设置合理的swap空间用这个命令快速创建4GB交换文件sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab2.2 彻底卸载旧版Docker很多人以为sudo apt remove docker.io就完事了其实残留配置可能引发各种诡异问题。这是我总结的完整清理方案# 停止所有容器服务 sudo systemctl stop docker.socket sudo systemctl stop docker.service # 卸载主程序 for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt purge -y $pkg done # 关键清理残留数据和配置 sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker sudo apt autoremove -y去年有个生产事故就是因为旧的/var/lib/docker目录权限没清理干净导致新安装的Docker无法创建网络设备。后来我们团队养成了习惯重要服务器安装前都会用tree /var/lib/docker检查目录结构是否干净。3. 配置高效安装源3.1 国内用户推荐阿里云源官方源在国内访问速度很不稳定这里分享一个优化过的阿里云源配置方案# 安装基础工具包比官方文档更全 sudo apt update sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common lsb-release # 阿里云Docker CE源适配24.04 noble版本 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基础源 sudo sed -i s|http://archive.ubuntu.com|https://mirrors.aliyun.com|g /etc/apt/sources.list实测这个配置比单纯配Docker源快3倍以上特别是在拉取docker-ce-cli这种大包时。有个小技巧执行apt update时如果发现卡在Waiting for headers可以先用sudo apt install -y apt-transport-https确保https支持正常。3.2 企业级安全配置方案对于金融、医疗等对安全要求高的场景建议增加以下步骤# 验证GPG密钥指纹阿里云官方指纹 gpg --show-keys /usr/share/keyrings/docker-archive-keyring.gpg | grep -B1 Docker CE # 应该看到类似 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 # 配置证书白名单 sudo mkdir -p /etc/docker/certs.d/registry.aliyuncs.com curl https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo tee /etc/docker/certs.d/registry.aliyuncs.com/ca.crt4. 安装与版本管理实战4.1 最新稳定版安装执行标准安装命令前建议先做依赖分析# 查看将要安装的包依赖 apt-cache depends docker-ce完整安装命令应该包含这些组件sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证组件完整性 which docker containerd runc buildx最近发现不少用户漏装docker-buildx-plugin导致后续构建多平台镜像时报错。其实从Docker 23.0开始Buildx已经是官方推荐的构建工具老式的docker build命令在某些ARM架构场景下会有兼容性问题。4.2 生产环境版本锁定技巧查看可用版本时推荐使用这个格式化命令apt-cache madison docker-ce | awk {print $3} | sort -t. -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr | uniq锁定特定版本的最佳实践# 示例安装27.0.1版本 VERSION5:27.0.1-1~ubuntu.24.04~noble sudo apt install -y docker-ce$VERSION docker-ce-cli$VERSION containerd.io docker-buildx-plugin$VERSION # 防止意外升级 sudo apt-mark hold docker-ce docker-ce-cli containerd.io上个月我们遇到一个典型案例某团队自动升级到Docker 27.1后自定义网络驱动出现兼容性问题。后来制定了版本控制规范测试环境始终使用最新版预发布环境滞后1个小版本生产环境滞后2个小版本人工验证5. 生产环境关键配置5.1 存储驱动优化Ubuntu24.04默认使用overlay2驱动但需要检查配置# 查看当前存储驱动 docker info | grep Storage Driver # 优化配置/etc/docker/daemon.json { storage-driver: overlay2, storage-opts: [ overlay2.override_kernel_checktrue, overlay2.size20G ], data-root: /mnt/docker-data # 建议单独挂载SSD分区 }遇到过一次存储驱动导致的性能问题客户在机械硬盘上跑数据库容器IOPS只有200左右。后来我们把data-root迁移到NVMe SSD并添加了dm.use_deferred_deletiontrue参数性能提升了15倍。5.2 日志与资源限制生产环境必须配置的日志轮转# /etc/docker/daemon.json { log-driver: json-file, log-opts: { max-size: 50m, max-file: 3, compress: true }, default-ulimits: { nofile: { Name: nofile, Hard: 65535, Soft: 65535 } } }记得用这个命令重载配置sudo systemctl reload docker # 不要直接用restart避免影响运行中的容器6. 验证与故障排查6.1 健康检查方案我习惯用这个多维检查脚本#!/bin/bash # 检查服务状态 systemctl status docker --no-pager # 检查版本兼容性 docker version | grep -B2 API version # 运行测试容器带资源限制 docker run --rm --memory128m --cpus0.5 alpine:latest \ sh -c echo Hello from Docker! dd if/dev/zero of/dev/null bs1M count100 # 检查存储驱动写入 docker run --rm -v /tmp/test:/data busybox \ sh -c dd if/dev/zero of/data/testfile bs1M count100 sync6.2 常见问题解决方案问题1Got permission denied while trying to connect to the Docker daemon socket这是最常见的权限问题推荐这样解决# 将当前用户加入docker组 sudo usermod -aG docker $USER # 立即生效不需要重新登录 newgrp docker问题2Error response from daemon: cgroups: cannot find cgroup mount destination在Ubuntu24.04上可能需要手动配置cgroups# 编辑/etc/default/grub GRUB_CMDLINE_LINUXsystemd.unified_cgroup_hierarchy1 sudo update-grub sudo reboot问题3容器内DNS解析失败这是我在云服务器上遇到最多的问题终极解决方案# /etc/docker/daemon.json { dns: [8.8.8.8, 114.114.114.114], dns-opts: [timeout2, attempts2], iptables: false }7. 性能调优实战7.1 内核参数优化在/etc/sysctl.conf中添加这些关键参数# 容器网络性能优化 net.core.somaxconn 65535 net.ipv4.tcp_max_syn_backlog 65535 net.ipv4.ip_local_port_range 1024 65535 # 内存与swap管理 vm.swappiness 10 vm.overcommit_memory 1 vm.overcommit_ratio 50 # 文件系统性能 fs.file-max 2097152 fs.inotify.max_user_instances 8192应用配置sudo sysctl -p7.2 容器运行时参数创建容器时建议设置的参数docker run -d \ --name optimized_container \ --memory1g \ --memory-swap1.5g \ --cpus1.5 \ --blkio-weight500 \ --ulimit nofile65535:65535 \ --health-cmdcurl -f http://localhost/health || exit 1 \ --health-interval30s \ nginx:alpine8. 企业级部署进阶8.1 容器安全加固生产环境必须做的安全设置# 启用用户命名空间隔离 sudo echo dockremap:165536:65536 /etc/subuid sudo echo dockremap:165536:65536 /etc/subgid # /etc/docker/daemon.json { userns-remap: dockremap, no-new-privileges: true, seccomp-profile: /etc/docker/seccomp/default.json }8.2 高可用方案使用keepalived实现Docker守护进程高可用# 安装keepalived sudo apt install -y keepalived # /etc/keepalived/keepalived.conf vrrp_script chk_docker { script systemctl is-active docker interval 2 weight 50 } vrrp_instance VI_1 { interface eth0 virtual_router_id 51 priority 100 # 主节点设为100备节点设为90 virtual_ipaddress { 192.168.1.100/24 } track_script { chk_docker } }

更多文章