先看版本

Docker 官方 apt 仓库目前支持这几个 64 位 Ubuntu 版本:26.10、26.04 LTS、24.04 LTS 和 22.04 LTS。不在这个列表里的版本,不要把下面仓库配置里的代号改成一个受支持的来硬装。不确定自己的系统版本,先看一眼:

cat /etc/os-release

本文只讲用 Docker 官方 apt 仓库安装 Docker Engine 和 Compose 插件这一条路。Docker Desktop、snap 版和便利脚本不在范围内。

清理冲突的旧包

Ubuntu 自带源里有 docker.io、docker-compose、podman-docker 之类名字相近或功能重叠的包,装官方版本之前先移除。官方文档给的命令是:

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

dpkg --get-selections 只会列出系统里实际装着的包,cut -f1 取出包名交给 apt remove。一个都没装的话,括号里是空的,apt remove 会提示缺少参数,这不影响后面的步骤。

名单里有 containerd 和 runc。如果你的机器上还有别的服务依赖系统自带的 containerd,移除前先看反向依赖:

apt-cache rdepends containerd

添加 Docker 的 apt 仓库

先装依赖,再放入官方 GPG 密钥:

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

然后写仓库定义。官方现在用 deb822 格式,文件是 /etc/apt/sources.list.d/docker.sources:

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

两个 $(...) 在写入时由 shell 展开:Suites 取当前系统的发行代号,Architectures 取本机架构,所以同一份命令在 x86_64 和 arm64 上都能直接用。写完再更新一次索引:

sudo apt update

输出里应当出现 download.docker.com 的行,没有 GPG 签名错误。我在 Ubuntu 26.04.1 LTS(arm64)的容器里跑过这几步:生成的 docker.sources 里 Suites 是 resolute,Architectures 是 arm64,apt update 正常拉到了 resolute/stable 的包索引。

安装

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

五个包各管一件事:docker-ce 是引擎,docker-ce-cli 提供 docker 命令,containerd.io 是底层运行时,docker-buildx-plugin 提供 docker buildx,docker-compose-plugin 提供 docker compose。Compose 是插件形式,用法是带空格的 docker compose up,不是旧版独立的 docker-compose 命令。

在同一个 26.04.1 容器里装完之后,我看到的版本是 Docker 29.9.1、Compose v5.6.0、buildx v0.38.0。这是 2026 年 10 月 18 日的数字,你装的时候仓库里是什么版本,就是什么版本。

验证

sudo docker run hello-world

它会拉取并运行 hello-world 镜像,看到欢迎文字就说明引擎和命令行是通的。如果提示连不上 Docker daemon,在有 systemd 的机器上用 systemctl status docker 看服务状态。

不用 sudo 运行 docker

安装完成后,docker 组已经存在,但组里没有任何用户,所以直接运行 docker 会因为权限被拒绝,需要 sudo。想去掉 sudo,把自己加进这个组:

sudo groupadd docker
sudo usermod -aG docker $USER

组已存在时,groupadd 会报错,可以忽略,继续执行第二条。组成员关系在登录时确定,所以要注销再登录,或者在当前终端里执行 newgrp docker。然后不加 sudo 验证:

docker run hello-world

这样做有代价。Docker 官方文档明确写着:docker 组等同于授予该用户 root 级权限。 所以只把确实需要的账号加进去,不要图省事把所有用户都加进去。要移除某个用户:

sudo gpasswd -d 用户名 docker

重新登录后生效。

开机自启

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

升级和卸载

Docker 的包由 apt 统一管理,升级就是常规的 sudo apt update 加 sudo apt upgrade。

卸载分三步,官方文档的写法是:

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

这一步不会删除镜像、容器、卷和你改过的配置文件。想一并清掉,要手动删数据目录:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

这两条会永久删除主机上的全部镜像、容器和卷,没有回收站。 里面有需要保留的数据,先备份再执行。最后删掉仓库和密钥:

sudo rm /etc/apt/sources.list.d/docker.sources
sudo rm /etc/apt/keyrings/docker.asc

你改过的配置文件也不会被自动清理,需要手动删除。