Docker:在机器上安装
如何在 Debian、Ubuntu 和 AlmaLinux 上正确安装 Docker,为什么官方仓库比系统软件包更好,以及安装后应立即检查什么。
更新于 2026年8月23日
Docker 将应用程序及其整个运行环境打包进一个容器:您无需再费心匹配库版本,迁移到另一台机器也只需复制一个配置文件。在拥有完整 root 权限的 VDS 上,它可以按标准方式安装。
从官方仓库安装
系统自带的仓库中要么是旧版本,要么是不含 Compose v2 插件的 docker.io。这个区别很重要:网上有一半的教程都是为现代的 docker compose 编写的,而不是 docker-compose。
Debian 12 和 13、Ubuntu 22.04 / 24.04 / 26.04:
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
如果是 Ubuntu,请在两处将 debian 替换为 ubuntu。
AlmaLinux 9 和 10、CentOS Stream 9:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
验证安装
docker --version
docker compose version
sudo docker run --rm hello-world
docker info | grep -E "Storage Driver|Cgroup|Docker Root Dir"
如果 hello-world 成功下载并输出了问候语,说明一切正常。存储驱动应为 overlay2。
免 sudo 使用
sudo usermod -aG docker $USER
newgrp docker
docker用户组等同于 root。组内任何人都可以挂载宿主机 root 目录运行容器,从而成为管理员。只添加您本来就会授予 root 权限的人——绝不要授予应用程序。
需要立即配置的内容
限制日志大小,否则一个话多的容器就会吃光您的磁盘。创建 /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker
更多细节——容器日志。
占用多少空间
Docker 本身约 500 MB;镜像和卷会在此基础上继续增长。在磁盘为 40 GB 的 VDS-1 上,可以运行两三个服务,但您得留意空间:参见磁盘空间。
常见错误
- 混用了
docker.io和docker-ce。 先执行sudo apt remove docker.io docker-compose,然后从官方仓库安装。 - Docker 绕过了防火墙开放端口。 Docker 会写入自己的
iptables规则,而ufw看不到它们。如果不需要对外暴露端口,请将其发布到本地接口——-p 127.0.0.1:8080:80。更多细节见 Docker 网络。 - 在 AlmaLinux 上忘了在 systemctl 中加
--now。 服务已启用但未启动;重启后可以工作,但现在不行。
接下来:Docker Compose 和卷。