Docker 作为当今最流行的容器化技术,已成为现代软件开发和部署的重要工具。在 Ubuntu 22.04 LTS 系统上正确安装和配置 Docker,对于构建高效的开发环境至关重要。本教程基于 Docker 官方文档和 Ubuntu 官方指导,提供最新的安装步骤,并特别针对国内网络环境进行了优化,确保安装过程顺畅无阻。

教程概述

本教程将带你完成在 Ubuntu 22.04 LTS (Jammy Jellyfish) 上安装 Docker 和 Docker Compose 的完整过程。内容包括:

  • 环境准备:系统要求检查和前置条件
  • 官方安装:使用 Docker 官方源进行标准安装
  • 国内优化:配置阿里云等国内镜像源加速下载
  • 验证测试:确保安装成功并正常工作
  • 进阶配置:非root用户配置和镜像加速器设置
  • 问题解决:常见安装问题的解决方案

无论你是Docker新手还是有经验的开发者,本教程都将为你提供可靠的安装指导。


前提条件

  • 系统:Ubuntu 22.04 LTS (Jammy Jellyfish),64 位版本
  • 权限:需要 root 或 sudo 权限
  • 网络:稳定的互联网连接,建议配置国内镜像源以加速下载
  • 最低内核版本:3.10(Ubuntu 22.04 默认满足)

步骤 1:卸载旧版本 Docker

为避免冲突,先卸载可能存在的旧版本 Docker 或相关组件:

1
2
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get autoremove

命令解释:

  • sudo apt-get remove:使用管理员权限删除指定的软件包
    • docker:旧版本的 Docker 软件包
    • docker-engine:旧版本的 Docker 引擎
    • docker.io:Ubuntu 官方仓库中的 Docker 包(非官方最新版)
    • containerd:容器运行时(将重新安装官方版本)
    • runc:低级容器运行时(将重新安装官方版本)
  • sudo apt-get autoremove:自动清理不再需要的依赖包,释放磁盘空间

注意:即使系统中没有安装这些包,执行此命令也不会产生错误,确保环境干净。

步骤 2:安装必要的依赖

更新系统并安装必要软件包以支持 HTTPS 和 GPG 密钥:

1
2
3
sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

命令解释:

  • sudo apt update:更新软件包列表,从配置的源获取最新的包信息
  • sudo apt upgrade -y:升级系统中已安装的所有软件包到最新版本
    • -y:自动确认所有提示,无需手动输入 “yes”
  • sudo apt install -y:安装以下必需的软件包:
    • apt-transport-https:允许 apt 通过 HTTPS 协议下载包
    • ca-certificates:包含受信任的证书颁发机构证书,用于验证 HTTPS 连接
    • curl:命令行下载工具,用于获取 GPG 密钥
    • gnupg:GNU 隐私保护工具,用于处理 GPG 密钥和签名验证
    • lsb-release:提供 Linux 标准库信息,用于自动检测系统版本

提示:这些软件包确保系统能够安全下载和验证 Docker 官方软件包。

步骤 3:添加 Docker 官方 GPG 密钥

导入 Docker 官方 GPG 密钥以验证软件包:

1
2
3
sudo mkdir -p /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

命令解释:

  • sudo mkdir -p /etc/apt/keyrings:创建密钥存储目录
  • curl -fsSL:下载文件的参数组合
    • -f:静默模式,遇到错误时立即退出
    • -s:静默模式,不显示进度条
    • -S:显示错误信息
    • -L:跟随重定向
  • https://download.docker.com/linux/ubuntu/gpg:Docker 官方 GPG 密钥的下载地址
  • |:管道符,将 curl 的输出传递给下一个命令
  • sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    • gpg --dearmor:将 ASCII 格式的 GPG 密钥转换为二进制格式
    • -o /etc/apt/keyrings/docker.gpg:指定输出文件路径
  • sudo chmod a+r /etc/apt/keyrings/docker.gpg:设置文件权限,允许所有用户读取密钥文件

国内用户优化:如果访问 download.docker.com 较慢,可使用阿里云镜像源:

1
2
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

安全说明:GPG 密钥用于验证从 Docker 仓库下载的软件包的真实性,防止恶意软件包。

步骤 4:添加 Docker 软件源

将 Docker 官方软件源添加到系统(使用 Jammy 的稳定版仓库):

1
2
3
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

命令解释:

  • echo \:输出文本,\ 表示换行继续
  • deb [options] URL distribution component:Debian 软件源格式
    • arch=$(dpkg --print-architecture):自动检测系统架构(如 amd64)
    • signed-by=/etc/apt/keyrings/docker.gpg:指定用于验证的 GPG 密钥
    • https://download.docker.com/linux/ubuntu:Docker 官方软件源 URL
    • jammy:Ubuntu 22.04 的代号
    • stable:使用稳定版分支
  • |:管道符,将 echo 输出传递给 tee 命令
  • sudo tee /etc/apt/sources.list.d/docker.list:将内容写入 Docker 源列表文件
  • > /dev/null:将 tee 的标准输出重定向到空设备,避免屏幕显示

国内用户优化:使用阿里云镜像源替代官方源:

1
2
3
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

路径说明/etc/apt/sources.list.d/ 目录用于存放额外的软件源配置文件,避免修改主配置文件。

步骤 5:安装 Docker Engine 和相关组件

更新软件包索引并安装 Docker Engine、CLI、containerd 以及 Docker Compose 插件:

1
2
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

命令解释:

  • sudo apt update:更新软件包索引,获取新添加的 Docker 软件源中的包信息
  • sudo apt install -y:安装以下 Docker 相关组件:
    • docker-ce:Docker Community Edition 引擎,Docker 的核心服务
    • docker-ce-cli:Docker 命令行客户端,提供 docker 命令
    • containerd.io:容器运行时,负责管理容器的生命周期
    • docker-buildx-plugin:扩展构建功能的插件,支持多平台构建
    • docker-compose-plugin:Docker Compose V2 插件,提供 docker compose 命令

版本说明:这里安装的是最新稳定版本,包含了完整的 Docker 功能和现代化的工具链。

步骤 6:验证 Docker 安装

启动 Docker 服务并设置开机自启:

1
2
sudo systemctl start docker
sudo systemctl enable docker

命令解释:

  • sudo systemctl start docker:立即启动 Docker 服务
  • sudo systemctl enable docker:设置 Docker 服务开机自动启动

检查 Docker 是否安装成功:

1
2
sudo docker --version
sudo docker run hello-world

命令解释:

  • sudo docker --version:显示 Docker 版本信息,确认安装成功
  • sudo docker run hello-world:运行官方测试容器,验证 Docker 功能
    • 首次运行会自动下载 hello-world 镜像
    • 成功运行表示 Docker 引擎工作正常

预期输出:

  • Docker 版本信息(如 Docker version 27.3.1
  • hello-world 容器的欢迎信息,确认 Docker 正常工作

服务状态检查:可使用 sudo systemctl status docker 查看 Docker 服务运行状态。

步骤 7:验证 Docker Compose 安装

验证 Docker Compose 插件安装:

1
docker compose version

命令解释:

  • docker compose version:显示 Docker Compose 插件版本信息
    • 注意使用空格分隔的 docker compose,而非连字符的 docker-compose
    • 这是 Docker Compose V2 的标准调用方式

预期输出:

  • Docker Compose version v2.30.3(版本号会随时间更新)

版本说明:

  • V2 优势:性能更好,功能更强,与 Docker CLI 深度集成
  • 命令格式:使用 docker compose 而非旧版 docker-compose
  • 兼容性:完全兼容现有的 docker-compose.yml 文件

步骤 8:配置镜像加速(国内用户推荐)

国内访问 Docker Hub 可能较慢,建议配置镜像加速器:

  1. 编辑 Docker 配置文件

    1
    2
    sudo mkdir -p /etc/docker
    sudo nano /etc/docker/daemon.json
  2. 添加以下内容

    1
    2
    3
    4
    5
    6
    {
    "registry-mirrors": [
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io"
    ]
    }
  3. 重启 Docker 服务

    1
    2
    sudo systemctl daemon-reload
    sudo systemctl restart docker

    验证加速器配置

    1
    docker info | grep -A 5 "Registry Mirrors"

步骤 9:配置非 root 用户运行 Docker(可选)

默认情况下,Docker 命令需使用 sudo。若需以非 root 用户运行:

1
2
sudo usermod -aG docker $USER
newgrp docker

验证配置:

1
2
3
4
5
6
# 验证当前用户是否在 docker 组中
groups $USER

# 测试无 sudo 运行 Docker 命令
docker --version
docker run hello-world

安全提示:添加用户到 docker 组等同于给予 root 权限,因为 Docker 守护进程以 root 身份运行。请仅在受信任的环境中使用此配置。

常见问题处理

  1. 网络超时问题

    • 现象apt updatecurl 命令超时失败
    • 解决方案:检查网络连接或切换至国内镜像源
  2. Docker 服务未启动

    1
    2
    sudo systemctl status docker
    sudo systemctl start docker
  3. 权限问题

    • 现象:普通用户运行 docker 命令提示 “permission denied”
    • 解决方案:确保以 root 或 sudo 权限执行命令,或按步骤 9 配置非 root 用户

总结

通过以上详细步骤,您已在 Ubuntu 22.04 LTS (Jammy Jellyfish) 上成功完成了 Docker 的完整安装和配置:

🎉 安装成果

  • Docker Engine:最新稳定版本,支持完整的容器化功能
  • Docker Compose V2:现代化的容器编排工具,性能更优
  • 镜像加速:配置国内镜像源,显著提升镜像下载速度
  • 用户权限:可选的非 root 用户配置,提升使用便利性
  • 服务自启:Docker 服务开机自动启动,确保环境可用

现在您已拥有一个完整、高效的 Docker 开发环境,可以开始您的容器化之旅了!