如何在 Ubuntu 上安装 Docker
本页内容
Docker 在容器中运行应用:每个容器都自带所需的一切,因此在你的笔记本和服务器上运行效果完全相同。网站、数据库、机器人和游戏服务器都可以用一条命令或一个 Compose 文件启动。
本指南从 Docker 官方软件源在 Ubuntu 24.04 或 22.04 上安装 Docker Engine 和 Docker Compose,然后介绍在真实服务器上真正重要的设置:权限、日志和防火墙。
开始之前
- 受支持的 Ubuntu:Docker 支持 64 位的 Ubuntu 26.04、24.04 和 22.04 LTS。用
cat /etc/os-release查看你的版本。 - KVM 服务器,而不是容器:Docker 需要自己的内核功能。它可以在任何 KVM VPS 上运行,但在基于容器(OpenVZ 或 LXC)的套餐上往往无法运行。
- root 或具有 sudo 权限的用户。下面的命令使用
sudo;如果你以 root 登录,可以省略它。
在服务器上请避免使用 Ubuntu 自带软件源中的 docker.io 软件包以及 Snap 版本:Docker 的软件源最先获得新版本,而且 Docker 官方文档使用的也是它。
Docker 需要真正的虚拟机:HytHost KVM VPS 套餐提供 Ubuntu 和完整 root 权限,每月 €2.92 起。
查看 VPS 套餐第 1 步:删除冲突的软件包
如果你之前从其他来源安装过 Docker,请先删除这些软件包。在全新的服务器上,apt 只会提示这些软件包都未安装:
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)
此操作不会删除 /var/lib/docker/ 中的镜像和卷。
第 2 步:添加 Docker 软件源
以下命令来自 Docker 文档,会为你的 Ubuntu 版本添加 Docker 的签名密钥和 apt 软件源:
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
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
sudo apt update
第 3 步:安装 Docker 和 Compose
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
这会安装 Docker Engine、命令行工具、Buildx 构建器和 Compose 插件。检查是否正常工作:
sudo docker run hello-world docker compose version
第一条命令会下载一个很小的测试镜像并打印欢迎信息。在 Ubuntu 上,Docker 会在开机时自动启动,因此无需额外启用。
Compose 指的是 docker compose 命令,中间是空格。带连字符的旧版 docker-compose 是已停用的第一代版本;仍在使用它的教程,换用新命令同样可行。
第 4 步:权限与日志轮转
不用 sudo 运行 docker。将你的用户加入 docker 组,然后注销并重新登录:
sudo usermod -aG docker $USER
请注意,Docker 自己也警告该组会授予相当于 root 的权限:组内任何人都能控制整台服务器。只添加你愿意给予 root 权限的用户。
限制日志大小。默认情况下,容器日志会无限增长,可能占满磁盘。创建 /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
然后运行 sudo systemctl restart docker。该限制只对更改后创建的容器生效,所以请重新创建现有容器。
第一个 Compose 文件
Compose 用一个文件描述你的容器。新建一个文件夹并在其中创建 compose.yaml:
services:
web:
image: nginx:stable
ports:
- "127.0.0.1:8080:80"
restart: unless-stopped
用 docker compose up -d 启动,用 docker compose ps 查看状态,用 docker compose logs 查看日志。restart: unless-stopped 会在崩溃或重启后让容器自动恢复。端口特意绑定到 127.0.0.1,原因见下一节。
Docker 与 ufw:防火墙陷阱
几乎每个人都会踩到这个坑。当你发布一个端口,例如 -p 8080:80,Docker 会添加自己的防火墙规则,并且这些规则在 ufw 的规则之前生效。即使 ufw 显示端口已关闭,它实际上仍对互联网开放。
- 将端口绑定到 localhost,适用于只有服务器本身需要访问的情况,例如数据库或反向代理后面的应用:
127.0.0.1:8080:80。 - 完全不要发布数据库端口;改为让容器通过 Docker 网络互相访问。
- 如需按来源地址过滤,请在 iptables 的
DOCKER-USER链中添加规则,Docker 会先检查该链,再检查自己的规则。
在 Docker 中运行的游戏服务器同样如此;请参阅如何为游戏服务器配置 VPS。
在 HytHost VPS 上运行 Docker
HytHost VPS 套餐基于 KVM,每台 VPS 都有自己的内核,Docker 可以不受限制地运行。下单时选择 Ubuntu 24.04 或 22.04,通过 SSH 连接,然后按照上面的步骤操作即可。你将获得完整的 root 权限、SSD 存储和 DDoS 防护,并且可以随着容器增多随时升级到更大的套餐。
常见问题
Docker 支持 64 位的 Ubuntu 26.04、24.04 和 22.04 LTS。其他基于 Ubuntu 的系统(如 Linux Mint)不在官方支持范围内。
生产服务器上不建议。Docker 表示这个便捷脚本适用于开发环境,不推荐用于生产环境;它还可能直接升级到新的主版本。请改用软件源方式安装。
带连字符的 docker-compose 是已停用的旧版本。如今 Compose 是一个 Docker 插件,用法为 docker compose,通过 docker-compose-plugin 软件包安装。
Docker 发布的端口会绕过 ufw。如果端口只应在本地使用,请将其绑定到 127.0.0.1,或者在 DOCKER-USER 链中进行过滤。
KVM VPS 可以。基于容器的 VPS 套餐(如 OpenVZ)往往无法运行 Docker,或者需要服务商进行特殊设置。
这篇指南对你有帮助吗?