在 Ubuntu 轻量级云服务器上部署 Docker,核心逻辑其实就两步:装环境和跑容器。但为了生产环境的稳定性和安全性,不能只停留在 apt install docker.io 这种“能跑就行”的层面。
下面这份指南基于当前主流版本(Ubuntu 20.04/22.04/24.04 LTS),按照生产标准流程整理,去掉了废话,直接上干货。
一、 前置检查:内核与权限
Docker 依赖 Linux 内核的一些特性(如 cgroups, namespaces)。轻量服务器通常内核较新,一般没问题,但建议先确认一下:
# 查看内核版本,确保是 3.10+ (现在基本都远超这个版本)
uname -r
# 确认你有 sudo 权限,或者你是 root 用户
whoami
二、 官方推荐安装法(最稳妥)
很多老教程喜欢让你手动添加 GPG key 然后写源,容易出错。现在 Docker 官方提供了脚本,一键搞定,包括依赖包、镜像源配置都处理好了。
1. 卸载旧版本(如果有)
如果你之前用过 docker.io 或 docker-engine,建议先清理,避免冲突:
sudo apt-get remove docker docker-engine docker.io containerd runc
2. 使用官方安装脚本(推荐)
这是目前最快、最不容易踩坑的方式。它会帮你下载最新的稳定版 Docker Engine。
curl -fsSL https://get.docker.com | sh
注意:执行过程中如果提示输入密码,请输入你的 sudo 密码。脚本会自动完成以下操作:
- 添加 Docker 官方 GPG Key
- 添加 Docker APT 源
- 安装最新版本的 Docker Engine, CLI, Containerd 和 Plugin
3. 验证安装
安装完成后,Docker 服务通常不会自动启动,需要手动启动并设置开机自启:
# 启动 Docker 服务
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 验证是否运行正常
sudo docker version
sudo docker run hello-world
看到 Hello from Docker! 输出,说明环境搭建成功。
三、 非 Root 用户管理(安全最佳实践)
默认情况下,只有 root 用户可以使用 docker 命令。为了安全,不建议日常用 root 操作,而是创建一个 docker 用户组,将你的普通用户加入其中。
-
创建 docker 组(如果已存在可跳过):
sudo groupadd docker -
将当前用户加入该组:
# 替换 $USER 为你的实际用户名,或者直接 echo $USER sudo usermod -aG docker $USER -
生效更改:
你需要注销并重新登录,或者重启服务器,才能让新的组成员关系生效。 -
测试:
重新登录后,尝试不加sudo运行:docker ps如果能列出容器列表,说明配置成功。以后所有 docker 命令都不需要加
sudo了。
四、 网络优化(国内服务器必做)
阿里云、腾讯云等国内厂商的默认 Docker 镜像拉取速度可能较慢,尤其是拉取官方镜像时。建议配置镜像提速器。
-
获取你的专属提速地址:
登录你使用的云厂商控制台(如阿里云 ACRCR、腾讯云 DSR),找到“镜像提速器”页面,复制那一串 URL。 -
修改 Docker 配置文件:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://你的专属提速地址.mirror.aliyuncs.com" ], "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF注:上面配置中我还顺手加了日志轮转配置,防止 Docker 日志把磁盘撑爆,这在轻量服务器上很重要。
-
重启 Docker 服务:
sudo systemctl daemon-reload sudo systemctl restart docker
五、 防火墙与安全端口
轻量服务器通常自带云防火墙或安全组规则。
-
UFW 防火墙(如果开启了):
如果你安装了ufw,默认情况下 Docker 会尝试修改 iptables。如果 UFW 拦截了 Docker 的流量,你可能需要允许相关端口。sudo ufw allow in on docker0 sudo ufw reload -
云厂商安全组:
这是最关键的一步!如果你要在网络访问容器内的服务(比如 Nginx 80 端口,MySQL 3306 端口),必须去云控制台的安全组里放行对应端口。- 切记:不要随意开放 2375/2376 端口(Docker API 裸奔端口),除非你明确知道自己在做什么,否则会被秒扫成肉鸡。
六、 常见问题排查(避坑指南)
-
报错:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock...- 原因:Docker 服务没启动,或者当前用户不在 docker 组且没用 sudo。
- 解决:
sudo systemctl status docker看状态;确认用户归属组。
-
报错:
permission denied- 原因:文件权限问题。
- 解决:挂载卷时,确保宿主机目录权限正确。例如:
sudo chown -R 1000:1000 ./data(假设容器内用户 ID 为 1000)。
-
磁盘空间不足:
-
轻量服务器磁盘小,Docker 默认存储驱动是
overlay2,占用不小。 -
清理无用资源:
# 删除停止的容器、未使用的网络和悬空镜像 sudo docker system prune # 更彻底一点,包括构建缓存(慎用) sudo docker system prune -a
-
-
Swap 交换分区问题:
- Docker 在某些旧版本内核或特定配置下,要求关闭 Swap。虽然新版 Docker 对 Swap 支持更好,但如果遇到奇怪的性能问题,可以检查:
free -h # 如果 swap 很大,且担心性能,可以在 /etc/fstab 注释掉 swap 行并 reboot
- Docker 在某些旧版本内核或特定配置下,要求关闭 Swap。虽然新版 Docker 对 Swap 支持更好,但如果遇到奇怪的性能问题,可以检查:
总结
在 Ubuntu 轻量服务器上配置 Docker,核心就是:用官方脚本装 -> 加用户组免 sudo -> 配镜像提速器 -> 开安全组端口。
这套流程覆盖了从安装到生产可用的主要环节,避免了大多数新手常遇到的权限、网络和磁盘问题。装完后,建议立即备份 /etc/docker/daemon.json 和你的数据卷,以防重装系统丢失配置。
云技术博客