Ubunut 22.04 安装 Docker 24.0.x

266 阅读7分钟

大家好,我是烊婉。本文是一份环境安装指南,带你在 Ubuntu 22.04 LTS 上安装与配置 Docker 24.0.x

目录

前置条件

  • 能执行 sudo 的普通用户
  • 环境准备: Ubuntu 22.04
  • 磁盘建议预留 ≥ 10GB
  • 非内网下

版本选择

版本发布时间核心更新
27.x2024 年性能优化、增强的容器隔离、改进的网络功能
26.x2024 年新的构建缓存机制、安全性增强
25.x2024 年containerd 2.0 集成、改进的日志驱动
24.0.x ✨2023 年Compose V2 完全集成、BuildKit 默认启用、性能提升
23.0.x2023 年改进的镜像构建、新的 CLI 功能
20.10.x2020 年Compose V2 引入、支持 cgroups v2

在这里选择了 24.0.x ✨。这个版本属于是较早但非常稳定的版本。适合生产环境安装

安装

更新系统并安装依赖

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

作用: 安装证书和下载工具,确保能安全地从 Docker 官方仓库下载软件

添加 Docker 官方 GPG 密钥

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

作用: 验证下载的 Docker 软件包是官方发布的,防止被篡改

添加 Docker 仓库

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/null

作用: 告诉系统从 Docker 官方源下载软件,而不是 Ubuntu 自带的旧版本

查看可用的 Docker 24.0.x 版本

sudo apt update
apt-cache madison docker-ce | grep 24.0

作用: 列出所有可安装的 24.0.x 版本,确认版本号是否正确

示例

root@lavm-x3nqmtmcun:~# apt-cache madison docker-ce | grep 24.0
docker-ce | 5:24.0.9-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.8-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.7-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.6-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.5-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.4-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.3-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.2-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.1-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.0-1~ubuntu.22.04~jammy https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

安装 Docker 24.0.x(最新补丁版本)

作用: 安装 Docker 引擎及相关组件(CLI、Compose、BuildKit)

# 安装最新的 24.0 版本
sudo apt install -y docker-ce=5:24.0.9-1~ubuntu.22.04~jammy \
  docker-ce-cli=5:24.0.9-1~ubuntu.22.04~jammy \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

注意: 此处安装的版本是 24.0.9-1 如有其他版本修改

验证

# 检查 Docker 版本
docker --version

# 检查 Docker Compose 版本
docker compose version

# 检查 Docker 服务状态
sudo systemctl status docker

# 运行测试容器
sudo docker run hello-world

示例 docker version

root@lavm-x3nqmtmcun:~# docker version
Client: Docker Engine - Community
 Version:           24.0.9
 API version:       1.43
 Go version:        go1.20.13
 Git commit:        2936816
 Built:             Thu Feb  1 00:48:39 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.9
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.13
  Git commit:       fca702d
  Built:            Thu Feb  1 00:48:39 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.28
  GitCommit:        b98a3aace656320842a23f4a392a33f46af97866
 runc:
  Version:          1.3.0
  GitCommit:        v1.3.0-0-g4ca628d1
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker compose version

root@lavm-x3nqmtmcun:~# docker compose version
Docker Compose version v2.40.2

sudo systemctl status docker

root@lavm-x3nqmtmcun:~# sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2025-10-26 13:21:31 CST; 2min 33s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 14828 (dockerd)
      Tasks: 10
     Memory: 27.9M
        CPU: 344ms
     CGroup: /system.slice/docker.service
             └─14828 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

将当前用户添加到 docker 组

sudo usermod -aG docker $USER
newgrp docker

# 测试无需 sudo 运行
docker run hello-world

作用: 允许当前用户不用 sudo 就能运行 docker 命令

这个地方可能会产生 docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). 这个时候需要配置镜像。

设置 Docker 开机自启

sudo systemctl enable docker
sudo systemctl enable containerd

作用: 系统重启后自动启动 Docker 服务

锁定版本防止自动升级

sudo apt-mark hold docker-ce docker-ce-cli

卸载旧版本(如果存在)

有些系统镜像可能会自带 Docker,如果系统存在,请执行下方命令

sudo apt remove -y docker docker-engine docker.io containerd runc

卸载本文档中的 Docker

# 停止 Docker 服务
sudo systemctl stop docker
sudo systemctl stop containerd

# 卸载 Docker 软件包
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 删除 Docker 数据目录(镜像、容器、卷等)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# 删除 Docker 配置文件
sudo rm -rf /etc/docker

# (可选)删除 Docker 仓库配置
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.gpg

FAQ

常见问题解答

端口占用 (0.0.0.0:80 already in use)

查占用:

netstat -ano | findstr :80

在任务管理器中结束对应 PID,或修改映射端口。

使用 sudo apt install -y ca-certificates curl gnupg lsb-release

在使用

sudo apt install -y ca-certificates curl gnupg lsb-release 

上方命令是,会跳出一个确认框,我们点击确认即可。会产生以下日志

Running kernel seems to be up-to-date.

Restarting services...
 systemctl restart fwupd.service

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

这些日志说明:

Running kernel seems to be up-to-date.
✅ **当前运行的内核是最新的** - 不需要重启系统来加载新内核
Restarting services...
 systemctl restart fwupd.service
🔄 **自动重启受影响的服务** - 固件更新服务(fwupd)被自动重启以应用更新
No containers need to be restarted.
✅ **容器无需重启** - 没有运行中的 Docker 容器需要重启
No user sessions are running outdated binaries.
✅ **用户会话正常** - 当前登录的用户没有运行旧版本的程序
No VM guests are running outdated hypervisor (qemu) binaries on this host.
虚拟机状态正常 - 如果有虚拟机,它们的 QEMU 程序也是最新的

镜像拉取慢

流程图
flowchart TD
  A[开始:Ubuntu 22.04] --> B{是否已安装 Docker Engine?}
  B -- 否 --> C[先按文档安装 Docker Engine]
  B -- 是 --> D[创建/确认目录 /etc/docker/]
  D --> E[编辑 /etc/docker/daemon.json 写入 registry-mirrors]
  E --> F[systemctl daemon-reload]
  F --> G[systemctl restart docker]
  G --> H[验证: docker info 查看 Registry Mirrors]
  H --> I{是否生效?}
  I -- 否 --> J[检查 JSON 语法/网络/代理配置, 重试]
  I -- 是 --> K[完成: 测试拉取镜像]

systemctl status docker.service" and "journalctl -xeu docker.service

这个含义就是 Docker 服务启动失败了。让我们来排查问题:

# 查看 Docker 服务状态
sudo systemctl status docker.service

# 查看详细错误日志
sudo journalctl -xeu docker.service --no-pager
常见的问题
  1. 配置文件错误
  2. 端口冲突或残留文件
  3. 权限问题

配置文件错误 在变更配置文件时可能因符号导致的错误,需检查配置

# 检查 Docker 配置文件
sudo cat /etc/docker/daemon.json

示例:

{
  "registry-mirrors": [
    "https://docker.1ms.run/"
  ]
}

端口冲突或残留文件 这一步每个环境安装不同,需确认错误信息。下方仅提供我所见到的错误

# 清理可能的残留文件
sudo rm -rf /var/lib/docker/network/files/

# 重启 containerd
sudo systemctl restart containerd

# 再次启动 Docker
sudo systemctl start docker

权限问题 docker 启动时权限不够

# 检查 Docker socket 权限
ls -la /var/run/docker.sock

# 修复权限
sudo chmod 666 /var/run/docker.sock
命令:
#  创建配置目录(若不存在)
sudo mkdir -p /etc/docker

#  写入镜像加速配置(将占位地址替换为你的镜像源)
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run/"
  ]
}
EOF

#  重载并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

#  测试是否生效
sudo docker pull nginx
国内镜像:

国内镜像不稳定,不能保证是能使用成功的

最后

说明:本文示例已在指定环境完成验证。如您在使用过程中遇到问题,请提交 Issue 反馈;我将尽快答复与修复。若回复不够及时,敬请谅解。