Ubunut 22.04 安装 Docker 24.0.x

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

目录

前置条件

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

版本选择

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

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

安装

更新系统并安装依赖

sql 复制代码
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

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

添加 Docker 官方 GPG 密钥

bash 复制代码
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 仓库

bash 复制代码
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 版本

perl 复制代码
sudo apt update
apt-cache madison docker-ce | grep 24.0

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

示例

ruby 复制代码
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)

ini 复制代码
# 安装最新的 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 如有其他版本修改

验证

bash 复制代码
# 检查 Docker 版本
docker --version

# 检查 Docker Compose 版本
docker compose version

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

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

示例 docker version

scss 复制代码
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

perl 复制代码
root@lavm-x3nqmtmcun:~# docker compose version
Docker Compose version v2.40.2

sudo systemctl status docker

perl 复制代码
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 组

bash 复制代码
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 开机自启

bash 复制代码
sudo systemctl enable docker
sudo systemctl enable containerd

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

锁定版本防止自动升级

css 复制代码
sudo apt-mark hold docker-ce docker-ce-cli

卸载旧版本(如果存在)

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

lua 复制代码
sudo apt remove -y docker docker-engine docker.io containerd runc

卸载本文档中的 Docker

bash 复制代码
# 停止 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

在使用

arduino 复制代码
sudo apt install -y ca-certificates curl gnupg lsb-release 

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

sql 复制代码
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.

这些日志说明:

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

镜像拉取慢

流程图
css 复制代码
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 服务启动失败了。让我们来排查问题:

perl 复制代码
# 查看 Docker 服务状态
sudo systemctl status docker.service

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

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

bash 复制代码
# 检查 Docker 配置文件
sudo cat /etc/docker/daemon.json

示例:

json 复制代码
{
  "registry-mirrors": [
    "https://docker.1ms.run/"
  ]
}

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

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

# 重启 containerd
sudo systemctl restart containerd

# 再次启动 Docker
sudo systemctl start docker

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

bash 复制代码
# 检查 Docker socket 权限
ls -la /var/run/docker.sock

# 修复权限
sudo chmod 666 /var/run/docker.sock
命令:
bash 复制代码
#  创建配置目录(若不存在)
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 反馈;我将尽快答复与修复。若回复不够及时,敬请谅解。

相关推荐
等风起8813 小时前
Element Plus实现TreeSelect树形选择在不同父节点下子节点有相同id的双向绑定联动
前端·javascript
摸着石头过河的石头3 小时前
跨域资源共享(CORS)完全指南:从基础概念到实际应用
前端·javascript
小胖霞3 小时前
阿里云域名解析 + Nginx 反向代理 + HTTPS 全流程:从 IP 访问到加密域名的完整配置
前端
2301_801252223 小时前
Vue中的指令
前端·javascript·vue.js
烛阴3 小时前
彻底搞懂Lua闭包
前端·lua
用户68545375977693 小时前
🌊 消息队列的削峰填谷作用和实际应用:洪水调节大师!
后端
天***88963 小时前
Chrome扩展安装插件教程,Edge安装插件扩展教程,浏览器安装扩展程序方法
前端·chrome·edge
bug攻城狮4 小时前
Spring Boot 2.6+ 整合 PageHelper 启动报错:循环依赖解决方案全解析
java·spring boot·后端
心.c4 小时前
深拷贝浅拷贝
开发语言·前端·javascript·ecmascript