在轻量服务器(Lightweight Server)上部署 Docker,核心逻辑其实和标准云服务器没太大区别,但考虑到轻量服务器的资源通常比较紧凑(内存可能只有 1G-2G),我们在安装和配置时要格外注意系统依赖的清理和Docker 启动参数的优化。
以下是基于 Ubuntu 20.04/22.04 LTS 版本的完整、稳健的安装流程。这里推荐直接使用官方源安装,而不是通过 apt install docker.io(那个是社区维护版,版本较老且功能不全)。
第一步:环境准备与基础清理
登录你的轻量服务器 SSH。首先确保系统是最新的,并移除可能冲突的旧版本 Docker。
# 更新软件包索引
sudo apt update
# 卸载旧版本 Docker(如果存在的话),避免冲突
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done
第二步:安装依赖项
Docker 的官方安装脚本需要一些基础工具来验证 GPG 密钥和添加 APT 源。
sudo apt install -y ca-certificates curl gnupg lsb-release
第三步:添加 Docker 官方 GPG 密钥和 APT 源
这是最关键的一步,直接复制粘贴以下命令即可。这段脚本会自动检测你的架构(amd64/arm64)并添加对应的仓库。
# 创建 keyrings 目录(如果不存在)
sudo mkdir -p /etc/apt/keyrings
# 下载 Docker 官方 GPG 密钥
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
注意:
$(. /etc/os-release && echo "$VERSION_CODENAME")这个变量会自动识别你是 Ubuntu 20.04 (focal) 还是 22.04 (jammy),无需手动修改。
第四步:安装 Docker Engine
再次更新索引,然后安装最新版的 Docker 引擎套件。
# 更新索引
sudo apt update
# 安装 Docker 组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成后,检查版本确认是否成功:
docker --version
docker compose version
第五步:非 root 用户管理 Docker(强烈建议)
默认情况下,运行 docker 命令需要 sudo。为了方便日常开发和管理,我们可以创建一个 docker 用户组,并将当前用户加入其中。
# 创建 docker 组(如果已存在会提示)
sudo groupadd docker
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 使更改立即生效(或者注销重新登录)
newgrp docker
现在你可以尝试不用 sudo 运行一个测试容器:
docker run hello-world
如果看到 “Hello from Docker!”,说明安装成功。
第六步:针对轻量服务器的关键优化(必看)
轻量服务器通常内存较小,Docker 默认配置可能会占用过多资源或导致 OOM(内存溢出)。我们需要做两件事:限制镜像拉取并发 和 配置日志轮转。
1. 配置 Daemon 以优化资源使用
编辑 /etc/docker/daemon.json 文件(如果不存在则新建):
sudo nano /etc/docker/daemon.json
写入以下内容(根据实际内存调整,假设服务器内存为 2GB):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=cgroupfs"]
}
- 解释:
log-opts:防止 Docker 日志无限增长撑爆磁盘,每个日志文件最大 10MB,保留 3 个文件。storage-driver:明确指定 overlay2,这是 Linux 内核原生支持的高效存储驱动。
保存退出后,重启 Docker 服务:
sudo systemctl restart docker
2. 设置开机自启
sudo systemctl enable docker
sudo systemctl enable containerd
第七步:网络与安全(防火墙)
轻量服务器通常自带云厂商的安全组规则。在服务器内部,Ubuntu 默认可能使用 ufw 防火墙。
如果你开启了 UFW,并且希望外部访问 Docker 容器内的服务(如 Web 应用),你需要在安全组中放行对应端口,而不是在 UFW 中单独放行 Docker 端口(因为 Docker 会使用 iptables/nftables 直接操作底层网络)。
最佳实践:
- 在云控制台的安全组中,放行你需要的端口(例如 80, 443, 8080 等)。
- 在服务器内,保持 UFW 默认策略为
deny incoming,只允许 SSH (22)。 - 当你在容器中映射端口时(如
-p 8080:80),流量会通过 Docker 的 NAT 规则进入,只要云安全组放行了 8080,就能访问。
常见问题排查
- 权限问题:如果运行
docker ps报错 “permission denied”,说明$USER没有正确加入docker组。执行sudo usermod -aG docker $USER后,必须注销并重新登录 SSH 才能生效。 - 内存不足:如果在启动大型容器时出现 OOM,考虑增加 Swap 分区。对于 1G 内存的轻量服务器,建议至少设置 2G Swap。
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - 无法拉取镜像:国内网络环境下,Docker Hub 速度较慢。可以配置镜像提速器。编辑
/etc/docker/daemon.json,添加:{ "registry-mirrors": [ "https://<你的阿里云/Azure/腾讯云镜像提速地址>" ] }然后重启 Docker:
sudo systemctl restart docker。各云厂商均提供免费的专属提速地址,去控制台搜索“容器镜像服务”即可找到。
总结
这套流程是最标准、最稳定的生产级安装方式。对于轻量服务器,重点在于日志轮转配置和Swap 分区的设置,这能极大提升系统的稳定性,避免因磁盘写满或内存不足导致的服务中断。
云技术博客