努力
加油

京东云ECS实例如何正确安装和配置Docker环境?

在京东云 ECS 上部署 Docker,核心逻辑其实和你在本地虚拟机或者阿里云、腾讯云上一模一样,毕竟底层都是 Linux。但既然你问的是“正确”安装和配置,我就不会只丢给你一行 yum install docker,因为那在生产环境里往往埋着坑。

我们要考虑的是稳定性、安全性、以及后续与京东云其他产品(如云硬盘、VPC)的联动。以下是我踩过坑后总结的一套标准流程,适用于大多数主流发行版(CentOS 7/8, Ubuntu 18.04/20.04, Debian 9+)。

第一步:系统准备与环境清理

很多新手直接开始装 Docker,结果发现端口冲突或内核模块缺失。

  1. 检查操作系统版本
    确保你的 ECS 实例运行的是受支持的 Linux 版本。京东云控制台通常提供 CentOS 7.6+, Ubuntu 18.04+ 等镜像。如果用的是过老的 CentOS 6,建议直接换镜像,别折腾了。

  2. 卸载旧版本(如果有)
    如果你之前尝试过安装,先清理干净,避免包冲突:

    sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-engine
  3. 安装必要依赖
    Docker 需要一些基础工具来管理存储驱动和网络:

    # CentOS/RHEL
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # Ubuntu/Debian
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

第二步:配置 Docker 官方源(推荐)

不要直接用操作系统的默认源(apt/yum),那个版本太老,而且没有自动更新机制。使用官方源更稳定。

以 CentOS 为例:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

以 Ubuntu 为例:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

然后更新索引并安装最新稳定版:

# CentOS
sudo yum makecache fast
sudo yum install -y docker-ce docker-ce-cli containerd.io

# Ubuntu
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

第三步:关键配置——daemon.json

这是最容易被忽略的一步。默认的 Docker 配置在国内访问 Docker Hub 极慢,甚至超时。你需要配置镜像提速器。

编辑 /etc/docker/daemon.json:

{
  "registry-mirrors": [
    "https://<你的京东云专属提速地址或公共提速地址>",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
  • 关于镜像源:京东云本身可能不提供直接的 Docker Hub XX,但你可以使用腾讯云的公共提速地址(CCS)或中科大镜像。如果公司内网有私有仓库,务必加上 --insecure-registry 或配置 TLS。
  • 关于 cgroupdriver:强烈建议设置为 systemd。因为 Kubernetes 和许多编排工具都期望 Docker 使用 systemd 作为 cgroup 驱动,否则会出现警告甚至启动失败。
  • 日志轮转:生产环境必须限制日志大小,防止 /var/log 撑爆磁盘。

第四步:启动服务并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker

验证是否安装成功:

sudo docker run hello-world

如果能正常打印 Hello from Docker!,说明环境通了。

第五步:非 root 用户权限管理(安全最佳实践)

默认情况下,只有 root 用户能操作 Docker socket。为了安全,创建一个 docker 用户组,并将你的日常用户加入其中。

sudo groupadd docker
sudo usermod -aG docker $USER

注意:修改完用户组后,你需要注销并重新登录,或者重启 ECS 实例,才能使新组生效。

第六步:京东云 ECS 特有的注意事项

这部分是区分“通用教程”和“实战经验”的关键。

  1. 安全组规则(Security Group)
    如果你在容器里跑了 Web 服务(比如 Nginx 80 端口,MySQL 3306 端口),务必去京东云控制台 -> 云服务器 -> 安全组,添加入方向规则。

    • 协议:TCP
    • 端口:80, 3306 等
    • 授权对象:0.0.0.0/0(测试用)或特定 IP
    • 很多新手装好 Docker 发现网络访问不了,90% 是因为忘了开安全组,而不是 Docker 没配好。
  2. 磁盘性能与存储驱动
    京东云 ECS 默认挂载的云盘通常是高效云盘或 SSD 云盘。Docker 默认使用 overlay2 存储驱动,性能很好。但如果你的业务对 IOPS 要求极高,建议在创建 ECS 时选择高性能 SSD 云盘,并在挂载数据盘时使用 ext4 或 xfs 文件系统,并确保挂载参数中包含 noatime 以提升性能。

  3. Swap 分区问题
    Docker 官方文档明确指出,在生产环境中应禁用 Swap。因为 Swap 会导致内存分页,影响容器性能。
    检查 Swap:

    free -h

    如果有 Swap,建议关闭:

    sudo swapoff -a
    # 同时注释掉 /etc/fstab 中的 swap 行,防止重启后恢复

    同时,需要在 daemon.json 中显式允许使用 Swap(虽然不推荐,但某些老旧内核可能需要):

    {
      "fail-swap-on": false
    }
  4. 网络模式选择

    • bridge(默认):适合单机部署,简单隔离。
    • host:性能最好,无网络开销,但端口容易冲突。适合对延迟敏感的场景(如游戏服务器、高频交易)。
    • none:完全无网络,适合内部计算节点。
    • 在京东云上,如果你的 ECS 加入了 VPC,建议使用 bridge 模式,并通过 -p 映射端口到宿主机 IP,这样可以通过 VPC 内的负载均衡器轻松接入流量。

常见问题排查

  • Q: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    A: 检查 systemctl status docker。如果状态是 failed,查看日志 journalctl -xeu docker。常见原因是 daemon.json 格式错误,或者磁盘空间满了。

  • Q: 拉取镜像特别慢
    A: 确认 daemon.json 中的镜像提速器地址是否有效。可以尝试切换不同的公共提速器。如果还是慢,考虑构建自己的私有镜像仓库(Harbor),放在同一 VPC 内,走内网传输,速度飞快。

  • Q: 容器内无法访问网络
    A: 检查 ECS 的安全组出方向规则是否放行所有流量(默认通常是放行的)。检查 Docker 的网络桥接是否正常:brctl show 或 ip link。

总结

在京东云 ECS 上装 Docker,步骤并不复杂,但细节决定成败。记住三个核心点:

  1. 源要选对的(官方源 + 国内镜像提速)。
  2. 配置要规范的(systemd cgroup + 日志轮转 + 禁用 Swap)。
  3. 网络要通顺的(安全组 + VPC 路由)。

按照这个流程走,你的 Docker 环境就能稳定支撑起大部分互联网应用的需求。如果有具体的业务场景(比如跑 K8s 集群、微服务架构),可以再深入讨论 Compose 或 Swarm 的编排方案。