大家好,我是烊婉。本文是一份环境安装指南,带你在 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
常见的问题
- 配置文件错误
- 端口冲突或残留文件
- 权限问题
配置文件错误 在变更配置文件时可能因符号导致的错误,需检查配置
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 反馈;我将尽快答复与修复。若回复不够及时,敬请谅解。