努力
加油

Ubuntu系统下轻量服务器如何配置Docker环境?

在 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 用户组,将你的普通用户加入其中。

  1. 创建 docker 组(如果已存在可跳过):

    sudo groupadd docker
  2. 将当前用户加入该组:

    # 替换 $USER 为你的实际用户名,或者直接 echo $USER
    sudo usermod -aG docker $USER
  3. 生效更改:
    你需要注销并重新登录,或者重启服务器,才能让新的组成员关系生效。

  4. 测试:
    重新登录后,尝试不加 sudo 运行:

    docker ps

    如果能列出容器列表,说明配置成功。以后所有 docker 命令都不需要加 sudo 了。


四、 网络优化(国内服务器必做)

阿里云、腾讯云等国内厂商的默认 Docker 镜像拉取速度可能较慢,尤其是拉取官方镜像时。建议配置镜像提速器。

  1. 获取你的专属提速地址:
    登录你使用的云厂商控制台(如阿里云 ACRCR、腾讯云 DSR),找到“镜像提速器”页面,复制那一串 URL。

  2. 修改 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 日志把磁盘撑爆,这在轻量服务器上很重要。

  3. 重启 Docker 服务:

    sudo systemctl daemon-reload
    sudo systemctl restart docker

五、 防火墙与安全端口

轻量服务器通常自带云防火墙或安全组规则。

  1. UFW 防火墙(如果开启了):
    如果你安装了 ufw,默认情况下 Docker 会尝试修改 iptables。如果 UFW 拦截了 Docker 的流量,你可能需要允许相关端口。

    sudo ufw allow in on docker0
    sudo ufw reload
  2. 云厂商安全组:
    这是最关键的一步!如果你要在网络访问容器内的服务(比如 Nginx 80 端口,MySQL 3306 端口),必须去云控制台的安全组里放行对应端口。

    • 切记:不要随意开放 2375/2376 端口(Docker API 裸奔端口),除非你明确知道自己在做什么,否则会被秒扫成肉鸡。

六、 常见问题排查(避坑指南)

  1. 报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock...

    • 原因:Docker 服务没启动,或者当前用户不在 docker 组且没用 sudo。
    • 解决:sudo systemctl status docker 看状态;确认用户归属组。
  2. 报错:permission denied

    • 原因:文件权限问题。
    • 解决:挂载卷时,确保宿主机目录权限正确。例如:sudo chown -R 1000:1000 ./data(假设容器内用户 ID 为 1000)。
  3. 磁盘空间不足:

    • 轻量服务器磁盘小,Docker 默认存储驱动是 overlay2,占用不小。

    • 清理无用资源:

      # 删除停止的容器、未使用的网络和悬空镜像
      sudo docker system prune
      
      # 更彻底一点,包括构建缓存(慎用)
      sudo docker system prune -a
  4. Swap 交换分区问题:

    • Docker 在某些旧版本内核或特定配置下,要求关闭 Swap。虽然新版 Docker 对 Swap 支持更好,但如果遇到奇怪的性能问题,可以检查:
      free -h
      # 如果 swap 很大,且担心性能,可以在 /etc/fstab 注释掉 swap 行并 reboot

总结

在 Ubuntu 轻量服务器上配置 Docker,核心就是:用官方脚本装 -> 加用户组免 sudo -> 配镜像提速器 -> 开安全组端口。

这套流程覆盖了从安装到生产可用的主要环节,避免了大多数新手常遇到的权限、网络和磁盘问题。装完后,建议立即备份 /etc/docker/daemon.json 和你的数据卷,以防重装系统丢失配置。