在京东云(JD Cloud)的 ECS(弹性云服务器)上安装 Docker,其实和在其他主流 Linux 发行版(如 CentOS、Ubuntu)上的操作大同小异。核心差异主要在于网络环境配置和镜像源提速,因为国内访问 Docker Hub 官方源通常不稳定,且京东云的安全组默认可能拦截了某些端口。
下面以目前企业级使用最广泛的 CentOS 7/8 或 Alibaba Cloud Linux / Ubuntu 为例,给出一个稳定、生产可用的实操方案。我会尽量避开那些“复制粘贴就报错”的过时教程,直接给经过验证的步骤。
一、 前置准备:检查系统与安全组
-
确认内核版本
Docker 对内核版本有要求,建议内核版本不低于 3.10。执行:uname -r如果版本过低,建议先升级内核或更换更高版本的操作系统镜像。
-
安全组配置(关键)
很多新手装完 Docker 发现容器跑不起来或者外部连不上,90% 是因为京东云控制台里的安全组没放行。- 登录京东云控制台 -> 计算 -> 云服务器实例 -> 找到你的 ECS -> 点击“安全组”。
- 确保入方向规则中放行了你需要的业务端口(比如容器的 80, 443, 8080 等)。
- Docker 守护进程本身监听的是 Unix Socket (
/var/run/docker.sock),不需要额外开放 TCP 端口,除非你显式配置了远程 API 访问(生产环境不建议这样做)。
-
关闭防火墙干扰(可选但推荐测试阶段)
虽然 Docker 能配合 firewalld 工作,但在初期调试时,为了避免 iptables 规则冲突导致排查困难,可以先临时关闭防火墙:systemctl stop firewalld systemctl disable firewalld注:生产环境建议保留防火墙,并手动添加 Docker 相关的 iptables 规则。
二、 安装 Docker Engine
推荐使用 Docker CE (Community Edition)。不要直接用 yum install docker 装那个老旧的版本,体验极差。
场景 A:CentOS 7 / CentOS Stream 8+ / Alibaba Cloud Linux
这是最常见的服务器环境。
-
卸载旧版本(如果有)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-logrotate docker-engine podman runc -
安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 -
设置 Docker 镜像仓库
这里有个坑:不要用默认的官方仓库,下载速度会让你怀疑人生。建议使用阿里云提速器或者华为云/腾讯云的镜像源。以阿里云为例(需要先注册阿里云账号获取专属提速地址,或者直接去 Docker 官方文档 看最新命令):
# 设置稳定的 yum 源 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -
安装 Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io -
启动并设置开机自启
sudo systemctl start docker sudo systemctl enable docker -
验证安装
docker version docker info docker run hello-world如果看到
Hello from Docker!,说明基础环境没问题。
场景 B:Ubuntu 20.04 / 22.04
# 更新 apt
sudo apt-get update
# 安装依赖
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加 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
# 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装
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
三、 配置镜像提速(国内必做)
在国内服务器上,如果不配镜像提速,拉取 nginx, redis, mysql 等基础镜像可能会超时失败。
-
编辑 daemon.json
sudo vi /etc/docker/daemon.json -
填入以下内容(以阿里云为例,请替换为你自己的提速地址)
{ "registry-mirrors": [ "https://<你的ID>.mirror.aliyuncs.com", "https://docker.m.daocloud.io", "https://huecker.io" ], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } }注意:
registry-mirrors: 这里可以填多个,Docker 会依次尝试。exec-opts: 强制使用 systemd 作为 cgroup driver,这与 Kubernetes 和许多现代编排工具保持一致,避免后续踩坑。log-driver&log-opts: 限制日志大小,防止磁盘被 Docker 日志撑爆,这在云服务器上非常重要。
-
重启 Docker 服务
sudo systemctl daemon-reload sudo systemctl restart docker -
验证提速是否生效
docker info | grep Registry你应该能看到你配置的 mirror 地址。
四、 权限优化(非 root 用户运行)
默认情况下,只有 root 用户可以执行 docker 命令。为了方便日常运维,可以将你的普通用户加入 docker 组。
# 创建 docker 组(如果不存在)
sudo groupadd docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 重新登录终端或执行以下命令使配置立即生效
newgrp docker
之后,你可以直接使用 docker ps 而不需要加 sudo。
五、 常见问题与避坑指南
-
Kubernetes 兼容性
如果你未来打算在京东云上部署 K8s 集群,务必在安装 Docker 时就指定cgroupdriver=systemd(见上文 daemon.json 配置)。否则后期可能需要重装 Docker 或修改 K8s kubelet 配置,非常麻烦。 -
磁盘空间管理
云服务器磁盘通常有限。定期清理无用的镜像和容器:# 清理所有停止的容器、未被使用的网络和悬空镜像 docker system prune # 更彻底地清理(包括构建缓存) docker system prune -a建议在 crontab 里加一个定时任务,每周自动清理一次。
-
数据持久化
永远不要把重要数据存在容器内部!一定要使用 Volume 或 Bind Mount。
例如启动 MySQL:docker run -d --name mysql-db -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourpassword mysql:8.0这样即使容器删除重建,数据依然在
/data/mysql目录下,对应京东云云盘的数据是安全的。 -
网络模式选择
bridge: 默认模式,适合单机多容器通信。host: 性能最好,直接复用宿主机网络栈,但端口冲突风险高。none: 无网络,适合纯计算节点。
在京东云上,如果你的应用需要高并发且对网络延迟敏感,可以考虑使用host模式,但要注意端口规划。
总结
在京东云 ECS 上装 Docker,步骤并不复杂,重点在于:
- 选对镜像源(别用官方直连)。
- 配好 daemon.json(开启提速 + 设置 cgroupdriver + 限制日志)。
- 搞定安全组(放行业务端口)。
按照上述流程操作,基本不会遇到什么幺蛾子。如果遇到具体的报错信息,可以把错误日志贴出来,再针对性分析。
云技术博客