Ubuntu 22.04 LTS 安装 Docker CE 实战教程(2026 最新版)
Ubuntu 22.04 LTS 安装 Docker CE 实战教程(2026 最新版)
摘要:在 Ubuntu 22.04 LTS(Jammy Jellyfish)上装 Docker CE 看似一行命令搞定,实操中会遇到容器 DNS 解析失败、镜像拉取慢、cgroups v2 与 docker-compose 不兼容等典型坑点。本文从卸载旧版、添加官方源(避开 Ubuntu 仓库的 docker.io 老版本)、配置国内镜像加速,到 daemon.json 调优、Docker Compose V2 安装、镜像与网络验证,每一步都给出实测可过的命令和踩坑记录。
适用版本:Ubuntu 22.04 LTS(兼容 24.04、20.04) 目标 Docker:Docker CE 27.x(最新 stable,含 Compose V2 plugin)
一、为什么不用 Ubuntu 自带的 docker.io
新手最容易犯的错:
apt install -y docker.io # ❌ 这是 Ubuntu 自带的、停更的版本
docker.io 是 Ubuntu/Debian 仓库里 Docker 的"残血版":
- 版本老(22.04 上是 20.10.x,2022 年的)
- 缺 Compose V2 plugin
- 缺 BuildKit 默认支持
- 与 Docker 官方仓库版本不同步,安全更新滞后
正确做法:用 Docker 官方源(download.docker.com)安装 Docker CE。
二、安装前准备
2.1 系统要求
| 项目 | 要求 |
|---|---|
| Ubuntu | 22.04 LTS(kernel ≥ 5.15) |
| 架构 | x86_64 / arm64 / s390x |
| 内存 | ≥ 1 GB(生产 ≥ 4 GB) |
| 磁盘 | /var/lib/docker 至少 10 GB |
2.2 卸载旧版
如果是新装机器可以跳过;如果之前装过 docker.io 或 docker-ce 的旧版本,先卸干净:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y $pkg 2>/dev/null
done
注意:不要用
apt purge,那会删掉/var/lib/docker里所有镜像和卷。上面用remove只删包,保留数据。
2.3 添加 Docker 官方 GPG 密钥
# 22.04 默认是 /etc/apt/keyrings,没有就建
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
# 下载 GPG key(官方推荐方式)
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 官方 APT 源
# 自动识别架构与代号
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
坑点 1:
$(. /etc/os-release && echo "$VERSION_CODENAME")在 shell 里执行后输出jammy(22.04 代号),但如果你 shell 是sh(不是bash),.命令可能不工作。先echo $VERSION_CODENAME验证下输出是jammy而不是空。
四、安装 Docker CE 与 Compose V2
4.1 安装核心包
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
四个包的作用:
| 包 | 作用 |
|---|---|
docker-ce | Docker 守护进程 |
docker-ce-cli | docker 命令行工具 |
containerd.io | containerd 运行时 |
docker-buildx-plugin | 增强构建工具(多架构、缓存) |
docker-compose-plugin | docker compose 子命令(V2) |
4.2 验证安装
# 查版本
docker --version
# Docker version 27.x.x, build xxxxx
docker compose version
# Docker Compose version v2.x.x
# 跑 hello-world(验证整个链路)
sudo docker run --rm hello-world
坑点 2:跑
hello-world失败的最常见原因是 DNS 解析失败——容器内默认 DNS 来自宿主机,如果宿主机的/etc/resolv.conf有问题(特别是用了127.0.0.53systemd-resolved),容器就会卡在拉镜像或运行阶段。先看下面的"daemon 调优"。
五、关键配置:daemon.json
5.1 配置国内镜像加速(不配置 = 拉镜像 1MB/s)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true,
"userland-proxy": false,
"no-new-privileges": true
}
EOF
各字段说明:
| 字段 | 作用 |
|---|---|
registry-mirrors | 国内必须,否则 docker pull 慢 |
log-opts.max-size | 单个日志文件最大 100MB,防爆盘 |
log-opts.max-file | 最多保留 3 个滚动日志 |
storage-driver | 强制用 overlay2(22.04 默认) |
live-restore | Docker daemon 重启不影响运行中容器 |
userland-proxy | 关闭用户态代理(性能更好) |
no-new-privileges | 默认禁止容器内提权(安全) |
5.2 应用配置
sudo systemctl restart docker
sudo systemctl status docker
# 验证 mirror 是否生效
docker info | grep -A 5 "Registry Mirrors"
六、免 sudo 使用 Docker
6.1 创建 docker 用户组(apt 安装时已自动创建)
# 查看是否已存在
getent group docker
# 把当前用户加进 docker 组(**免 sudo**)
sudo usermod -aG docker $USER
# 重新登录生效(或手动刷新组)
newgrp docker
# 验证
docker ps # 不加 sudo 也能跑
6.2 验证非 root 运行
docker run --rm hello-world
坑点 3:加完组后必须重新登录或
newgrp docker,否则还是以原组身份跑,权限不够。SSH 客户端的常见做法是退出重连。
七、Docker Compose V2 使用
V1(docker-compose)已停更,V2(docker compose)是 Go 重写的单文件:
7.1 基本命令对比
| V1 (Python) | V2 (Go plugin) |
|---|---|
docker-compose up -d | docker compose up -d |
docker-compose ps | docker compose ps |
docker-compose logs -f | docker compose logs -f |
docker-compose down | docker compose down |
7.2 示例:跑个 WordPress
mkdir -p ~/wp && cd ~/wp
cat > compose.yaml << 'EOF'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wp
MYSQL_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8080:80"
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: wppass
volumes:
db_data:
EOF
docker compose up -d
docker compose ps
# 浏览器打开 http://localhost:8080
八、systemd 与 cgroups v2
Ubuntu 22.04 默认是 systemd + cgroups v2,对 Docker 完全兼容。但有几个容易栽的点:
8.1 cgroups v2 验证
stat -fc %T /sys/fs/cgroup/
# cgroup2fs ← 这是 v2
# 老版本 kernel(< 5.8)才需要手动启用 v2
8.2 systemd 集成(可选)
容器内跑 systemd(如 centos:latest / ubuntu:latest)需要特权模式:
docker run -d --name systemd-test \
--privileged \
--tmpfs /run \
--tmpfs /run/lock \
--tmpfs /tmp \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
centos:7 /sbin/init
docker exec -it systemd-test bash -c "systemctl status"
坑点 4:容器内 systemd 启动失败 90% 是因为没挂载 cgroup 卷。22.04 上
/sys/fs/cgroup是 v2 格式,需要:ro模式挂。
九、镜像与网络验证清单
9.1 基础检查
# 1. 守护进程健康
docker info | head -10
# 2. 容器运行验证
docker run --rm -it alpine:latest sh -c "uname -a && cat /etc/os-release"
# 3. 网络出站(最容易栽的环节)
docker run --rm alpine:latest wget -qO- ifconfig.me
# 或
docker run --rm curlimages/curl curl -s https://api.ipify.org
# 4. DNS 解析
docker run --rm alpine:latest nslookup docker.io 8.8.8.8
# 5. 镜像列表
docker images
9.2 容器内 DNS 故障排查
如果 nslookup 在容器内失败:
# 看宿主机 DNS
cat /etc/resolv.conf
# 22.04 默认:
# nameserver 127.0.0.53
# options edns0 trust-ad
# 容器内看到的 DNS 不对,需要在 daemon.json 显式指定
sudo tee -a /etc/docker/daemon.json > /dev/null << 'EOF'
{
"dns": ["8.8.8.8", "1.1.1.1"]
}
EOF
sudo systemctl restart docker
十、卸载与清理
# 1. 卸包
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# 2. 删数据(镜像、卷、网络)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 3. 删 GPG key 和源
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.gpg
# 4. 移除 docker 用户组(可选)
sudo groupdel docker
坑点 5:
apt purge不会删/var/lib/docker,要手动rm -rf。卸载前确认重要数据已备份。
十一、升级路径
Docker CE 装好后会自动跟着官方源升级:
sudo apt-get update
sudo apt-get upgrade -y docker-ce docker-ce-cli containerd.io
重大版本升级前先看 release notes:
- 22.04 LTS 支持到 2027 年,5 年内主流 Docker 都兼容
- 大版本升级(如 24 → 27)建议先在测试环境验证
- 不要用
dist-upgrade升级 Ubuntu,会同时升级 kernel,可能导致 Docker 不可用
十二、写在最后
Ubuntu 22.04 + Docker CE 是当前最稳的开发/生产组合之一。装好后建议立刻做这几件事:
- ✅ 配置
registry-mirrors(国内必须) - ✅ 加用户到
docker组(免 sudo) - ✅ 配置日志轮转(防磁盘满)
- ✅ 启用
live-restore(daemon 重启不杀容器) - ✅ 把
composeV2 用起来(V1 已停更)
把这套做完,整个 Docker 环境就稳了,可以放心部署 k3s / k8s / 各种应用。
参考资源:
- Docker 官方安装文档:https://docs.docker.com/engine/install/ubuntu/
- Docker Compose V2 迁移指南:https://docs.docker.com/compose/migrate/
- containerd / runc 配置:https://github.com/containerd/containerd
遇到容器 DNS 解析问题? 评论区贴 docker run --rm alpine nslookup 输出 + cat /etc/resolv.conf,我帮你分析。







