Ubuntu环境下Docker怎么安装与配置才不踩坑?

来源:站长论坛作者:赵景明头衔:网络博主
导读:本期聚焦于赵景明创作的《Ubuntu环境下Docker怎么安装与配置才不踩坑?》,敬请观看详情。把Docker装到Ubuntu上看似一条命令的事,实际常因源地址陈旧、权限遗漏或存储路径不当导致后续构建失败。先理解Docker在Debian系中的包依赖与守护进程机制,才能选对安装方式。官方仓库与系统自带版本差异明显,前者支持版本热更新且自带docker_compose插件。配置环节重点在将当前用户加入docker组以避免每次提权,以及通过daemon.json限定镜像加速器和数据根目录。本文从环境准备、两种安装路线对比、运行参数调优三个角度给出可直接复用的操作清单与排错思路。

在Ubuntu系统中部署容器运行时,Docker是最常被选中的方案。不同于直接通过apt获取旧版软件包,现代实践更推荐采用官方仓库配合GPG校验的安装路径,这样不仅能拿到较新的引擎版本,也能顺带装上docker_compose命令行工具。很多故障其实源于安装阶段埋下的隐患,比如没有正确配置cgroup驱动,或者忽略了卸载系统预装的docker.io包,导致服务冲突。理解Linux内核的命名空间与控制组是如何被Docker调动的,有助于我们在后续配置时做出合理决策。

Ubuntu环境下Docker怎么安装与配置才不踩坑?

环境准备与旧版本清理

在正式安装之前,必须确认Ubuntu的版本处于长期支持周期之内,通常18.04、20.04以及22.04都可以良好兼容当前Docker引擎。打开终端后第一步应当是更新软件索引,并且安装后续流程需要的传输工具和证书组件。这些组件包括允许apt通过HTTPS拉取仓库的ca-certificates、用于安全传输的curl,以及管理密钥环的gnupg。如果系统中曾经使用snap或者apt安装过名为docker、docker.io或containerd的包,必须先彻底卸载,否则会在绑定套接字时抛出地址已被占用的错误。

清理旧版本可以使用如下指令组合,它们会移除二进制文件但保留你已经拉取的镜像与卷数据,如果你希望完全重置,可以手动删除/var/lib/docker目录。这一步经常被忽略,导致新装的docker守护进程启动时读取到不兼容的元数据格式。另外,Ubuntu默认启用了ufw防火墙,在开启Docker后它会自动向iptables注入转发规则,若你的服务器处于公网,应当提前规划暴露端口的白名单,避免容器服务被直接映射至外网。

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

官方仓库安装与系统包安装对比

最常见的两条路线分别是直接sudo apt install docker.io和配置Docker官方apt仓库后安装docker-ce。系统自带包的优点是简单,一条命令即可完成,但版本往往落后主线半年以上,且不包含独立的docker_compose v2插件,只能额外用pip安装旧版compose。官方仓库则要求你先下载GPG密钥并写入/etc/apt/keyrings,再向sources.list.d追加对应的deb地址,之后安装的docker-cedocker-ce-clicontainerd.io均为最新稳定版,并可通过docker compose version直接调用插件。

从稳定性角度看,生产环境更推荐官方仓库方案,因为你能精确控制升级节奏,而不会在某次apt upgrade时被系统源悄悄替换成旧引擎。下面的代码展示了如何添加密钥与仓库,注意其中使用了arch变量和. /etc/os-release来自动适配架构与发行代号。如果你在树莓派等ARM设备上操作,这套逻辑同样适用,只需确保CPU架构被官方支持即可。

sudo install -m 0755 -d /etc/apt/keyrings
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.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后,建议使用sudo docker run hello-world验证守护进程通信是否正常。若卡在等待守护进程,多半是containerd没有随系统启动,可执行sudo systemctl enable --now containerd修复。对比而言,系统包方案虽快,却容易在后续使用docker buildx或联网拉取多架构镜像时暴露功能缺失,因此时间充裕时务必走官方源。

权限配置与守护进程调优

默认情况下,Docker套接字归属于root用户与docker用户组,普通账号直接运行docker ps会报权限拒绝。将当前用户加入docker组是最省心的做法:sudo usermod -aG docker $USER,随后注销并重登即可免sudo操作。但需注意这等同于赋予该用户root级系统控制权,因为在容器内能挂载宿主根目录,所以在多租户机器上应评估风险,或改用rootless模式运行。

守护进程的核心配置位于/etc/docker/daemon.json,我们可以在这里指定镜像加速器、修改数据根目录以及切换cgroup驱动。国内网络环境下,配置中科大或阿里云镜像源能显著缩短拉取时间。若系统盘空间紧张,把data-root指向一块独立的硬盘能避免/var被写满导致节点崩溃。以下示例同时展示了加速器和驱动切换,其中cgroup驱动设为systemd以匹配Ubuntu默认的init系统,减少告警日志。

{
  "registry-mirrors": ["https://docker.mirrors.ipipp.com"],
  "data-root": "/mnt/ssd/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

修改完配置必须重启服务才能生效:sudo systemctl restart docker。你可以通过docker info命令检查输出的Registry Mirrors与Docker Root Dir字段是否和文件一致。最后,若需要容器开机自启,在docker run时加上--restart unless-stopped参数即可,不必额外写systemd单元。整套安装与配置流程走完后,Ubuntu上的Docker便具备生产可用的基础能力。

DockerUbuntudocker_compose修改时间:2026-08-17 10:50:45

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。