努力
加油

Debian或Ubuntu系统在轻量云上如何部署Docker服务?

在轻量云服务器(如阿里云、腾讯云、华为云等)上部署 Docker,其实核心逻辑和你在本地虚拟机或物理机上装是一样的。但考虑到轻量云通常配置有限(内存往往只有 1G-2G),且国内厂商对网络环境有特定优化,这里有一份基于生产经验的实操指南,去掉了那些虚头巴脑的理论,直接上干货。

一、 前置检查:别急着装,先看看环境

很多新手上来就 apt install docker,结果发现版本太老或者依赖冲突。在 Debian/Ubuntu 上,最稳妥的方式是使用官方提供的仓库安装,这样能自动获取最新稳定版。

首先,确认你的系统内核版本。Docker 要求 Linux 内核版本高于 3.10。

uname -r

如果是较新的 Ubuntu (20.04+) 或 Debian (11+),内核肯定没问题。如果是老旧的 Debian 8/9,建议直接重装系统,折腾内核升级不如换个新系统划算。

二、 卸载旧版本(如果有)

如果之前手动装过 Docker CE 或者用过某些一键脚本残留的组件,最好清理一下,避免包管理器冲突。

sudo apt-get remove docker docker-engine docker.io containerd runc

这一步不是必须的,但如果遇到 package is already the newest version 这种诡异报错,大概率是残留文件作祟。

三、 安装 Docker Engine(标准姿势)

这是最正规、最稳定的路径。虽然国内访问 Docker Hub 有时不稳定,但我们只下载 Docker 本身的二进制文件和包管理工具,镜像拉取问题后面单独说。

1. 设置权限和依赖

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

2. 添加 Docker 官方 GPG 密钥
为了防止中间人攻击,必须验证软件源签名。

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 注意:如果是 Debian,URL 里的 ubuntu 改成 debian

3. 设置软件源
这里有个坑:不要直接用默认的官方源。因为默认源服务器在国外,下载速度极慢,甚至超时失败。
对于国内用户,强烈建议使用中科大镜像源或阿里云镜像源来替换 sources.list 中的 Docker 部分。

以 Ubuntu 为例,查看代号:

lsb_release -cs

假设输出是 jammy (Ubuntu 22.04),执行:

echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu 
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

注:Debian 同理,修改 URL 为 https://mirrors.ustc.edu.cn/docker-ce/linux/debian。

4. 安装 Docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后,启动服务并设置为开机自启:

sudo systemctl start docker
sudo systemctl enable docker

5. 验证安装

sudo docker run hello-world

如果能打印出 “Hello from Docker!”,说明基础环境通了。

四、 解决“中国特供”网络问题(关键步骤)

在轻量云上,你刚装好 Docker,试着拉一个 nginx 或者 redis 镜像试试?大概率会卡住或者直接超时。这是因为 Docker Hub 在国内访问体验不佳。

解决方案 A:配置镜像提速器(推荐)

国内各大云厂商都提供了免费的容器镜像服务提速器。

  1. 登录你的云厂商控制台(比如阿里云的“容器镜像服务 ACR”,腾讯云的“镜像提速器”)。
  2. 找到针对你当前实例的专属提速地址。
  3. 编辑 /etc/docker/daemon.json 文件(如果不存在则新建):
{
  "registry-mirrors": [
    "https://your-code.mirror.aliyuncs.com",
    "https://mirror.ccs.tencentyun.com"
  ],
  "exec-opt": ["native.cgroupdriver=systemd"]
}

注意:exec-opt 那行是为了配合 systemd cgroup 驱动,防止后续运行某些监控工具时出现警告,虽然不是必须,但加上更规范。

保存后,重启 Docker 生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

解决方案 B:使用国内公共镜像站

有些项目本身不提供 Docker Hub 镜像,但有网易云、阿里云开源镜像站的同步。
例如,拉取 Nginx 时,可以使用:

docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest

但这需要每个镜像都手动改前缀,比较麻烦,所以方案 A 是必做的。

五、 轻量云特有的性能与安全优化

轻量云服务器资源紧张,Docker 的默认配置可能不适合。

1. 限制容器资源
不要给容器无限制的 CPU 和内存占用。在 docker run 时加上参数,或者在 docker-compose.yml 中配置:

services:
  web:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 256M

这能防止某个容器跑飞把整台机器搞崩。

2. 防火墙与端口映射
轻量云的安全组策略通常比传统 ECS 简单粗暴。

  • 第一步:在云控制台的安全组里,放行你需要暴露的端口(如 80, 443, 8080)。
  • 第二步:Docker 内部不需要再配置 iptables,除非你有特殊需求。Docker 会自动处理 NAT 转发。
  • 避坑:如果你用 docker run -p 80:80,确保宿主机没有其他进程占用了 80 端口。可以用 sudo netstat -tulpn | grep :80 检查。

3. 日志轮转(Log Rotation)
Docker 容器的日志默认是不限大小的。在轻量云小硬盘环境下,几天下来日志就能把磁盘写满,导致服务崩溃。
修改 /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

这意味着每个日志文件最大 10MB,最多保留 3 个文件。重启 Docker 生效。

六、 常见误区排雷

  1. 不要用 apt install docker.io:这是 Ubuntu/Debian 维护者打包的版本,版本通常滞后于 Docker 官方社区版(CE),且功能不全。一定要按上面的步骤装 docker-ce。
  2. 非 root 用户操作:每次 docker ps 都要加 sudo 很烦?可以创建 docker 用户组,并将当前用户加入该组:
    sudo groupadd docker
    sudo usermod -aG docker $USER

    然后注销重新登录即可。但在生产环境中,出于安全考虑,不建议普通用户随意拥有 Docker 权限,因为 Docker 的 socket 等同于 root 权限。

  3. Swap 交换分区:Docker 官方建议在启用 Swap 的情况下谨慎使用,因为 Swap 会影响性能一致性。在轻量云上,如果内存实在不够,开启 Swap 作为缓冲是可以的,但要在 daemon.json 中明确告知 Docker:
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "features": {
        "swap": true
      }
    }

总结

在轻量云上部署 Docker,核心不在于“安装”这个动作本身,而在于源的选择、镜像提速的配置以及资源的合理限制。按照上述步骤走一遍,你能得到一个干净、快速且稳定的 Docker 环境。后续如果需要部署具体应用,推荐使用 docker-compose 进行管理,比单条 docker run 命令要清晰得多,也便于迁移和维护。