在京东云(JD Cloud)主机上部署 Docker 应用时,需兼顾云平台特性、Linux 系统安全规范及容器化最佳实践。以下是关键注意事项,按部署流程分类整理:
一、环境准备阶段
-
选择合适的云主机规格
- 内存与 CPU:Docker 本身轻量,但应用+容器运行时需预留资源(建议 ≥2C4G 起步;若运行数据库/高并发服务,需按实际负载评估并预留 20%~30% 缓存余量)。
- 系统盘类型:优先选用 SSD 云硬盘(如 Ultra SSD),避免使用性能较差的普通云硬盘,防止
docker build或镜像拉取 I/O 瓶颈。 - 网络类型:确保实例处于 VPC 私有网络,并配置安全组规则(见下文)。
-
操作系统选型与初始化
- 推荐使用京东云官方提供的 CentOS 7.9+/8.x、Ubuntu 20.04/22.04 或 Alibaba Cloud Linux 3(兼容性好、内核较新)。
- ✅ 禁用 SELinux(CentOS/RHEL):
sudo setenforce 0 && sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config(Docker 与 SELinux 兼容性复杂,生产环境建议关闭或严格配置策略)
- ✅ 关闭 swap(可选但推荐):Kubernetes 官方要求,Docker 也建议避免 swap 影响 OOM 判定:
sudo swapoff -a && sudo sed -i '/swap/d' /etc/fstab
-
安装 Docker 的正确方式
- ❌ 避免
yum install docker(系统仓库版本老旧,如 CentOS 7 默认为 1.13)。 - ✅ 推荐方式:
- 使用 Docker 官方脚本(自动适配系统):
curl -fsSL https://get.docker.com | sh sudo systemctl enable docker && sudo systemctl start docker - 或通过京东云 Marketplace 部署预装 Docker 的镜像(更省心)。
- 使用 Docker 官方脚本(自动适配系统):
- ❌ 避免
二、安全与权限管理
-
Docker Daemon 安全加固
- ✅ 将当前用户加入
docker组,避免频繁使用sudo:sudo usermod -aG docker $USER && newgrp docker # 重新登录或执行 newgrp 生效 - ⚠️ 禁止暴露 Docker Socket 到公网:
默认docker.sock监听unix:///var/run/docker.sock,切勿通过-H tcp://0.0.0.0:2375暴露!否则等同于 root 权限泄露。
- ✅ 将当前用户加入
-
京东云安全组配置(关键!)
- 仅放行必要端口(如应用 HTTP/HTTPS、SSH、健康检查端口),禁止开放 2375/2376(Docker API)、22 端口对全网开放。
- 示例最小化规则:
| 方向 | 协议 | 端口 | 源 IP | 说明 |
|——|——|——|—————-|——————–|
| 入方向 | TCP | 22 | 指定运维IP段 | SSH(非0.0.0.0/0) |
| 入方向 | TCP | 80,443 | 0.0.0.0/0 | Web 访问 |
| 入方向 | TCP | 8080 | 10.0.0.0/8(VPC内网) | 内部服务调用 |
-
容器运行时安全
- 启动容器时避免
--privileged,优先使用能力限制(--cap-drop=ALL --cap-add=NET_BIND_SERVICE)。 - 敏感数据用京东云 KMS 密钥管理服务 或 Secrets Manager 管理,而非环境变量硬编码。
- 使用非 root 用户运行应用(Dockerfile 中添加
USER 1001)。
- 启动容器时避免
三、存储与持久化
-
数据卷(Volume)策略
- ❌ 避免使用
--volumes-from或绑定挂载宿主机绝对路径(如/data/app),易导致迁移困难和权限问题。 - ✅ 推荐:
- 使用 命名 Volume(自动管理路径与权限):
docker volume create app-data docker run -v app-data:/app/data nginx - 如需持久化到云硬盘:将云硬盘挂载至宿主机目录(如
/mnt/data),再绑定挂载进容器(注意目录权限chown -R 1001:1001 /mnt/data)。
- 使用 命名 Volume(自动管理路径与权限):
- ❌ 避免使用
-
镜像存储优化
- 修改 Docker 根目录(默认
/var/lib/docker)到大容量云硬盘(避免系统盘爆满):// /etc/docker/daemon.json { "data-root": "/mnt/docker-data", "storage-driver": "overlay2" }⚠️ 修改前需停止 Docker、迁移原有数据,并确保新路径已格式化并挂载。
- 修改 Docker 根目录(默认
四、网络与访问控制
- 容器网络模式选择:
- 默认
bridge模式足够,无需修改;如需容器间高性能通信,可创建自定义 bridge 网络:docker network create --subnet=172.20.0.0/16 app-net
- 默认
- 端口映射安全:
- 避免
docker run -p 80:80直接映射到 0.0.0.0;如仅需内网访问,指定宿主机 IP:docker run -p 127.0.0.1:8080:80 nginx # 仅本地可访问
- 避免
- 对接京东云 SLB(负载均衡):
- 若需多实例负载,建议容器监听
0.0.0.0:8080,SLB 健康检查指向该端口,不要依赖 Docker 的-p映射做负载分发。
- 若需多实例负载,建议容器监听
五、监控、日志与运维
-
日志管理
- 避免容器日志无限增长(默认
json-file驱动):// /etc/docker/daemon.json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } - 生产环境建议接入京东云 云监控(Cloud Monitor)+ 日志服务(JCQ/CLS),或使用
fluentd/filebeat收集。
- 避免容器日志无限增长(默认
-
容器生命周期管理
- 使用
docker-compose.yml或 京东云容器服务(JDCC) 管理多容器应用(比裸docker run更可靠)。 - 设置重启策略:
--restart=unless-stopped(避免意外退出后服务中断)。 - 关键服务建议配合
systemd托管(生成 service unit),确保开机自启。
- 使用
-
备份与灾备
- 定期备份:容器镜像(
docker save)、Volume 数据(rsync或京东云快照)、编排配置文件。 - 利用京东云 云硬盘快照 + 自动快照策略,实现基础设施级备份。
- 定期备份:容器镜像(
六、其他京东云特有提示
- ✅ 利用京东云镜像提速器(提升拉取速度):
// /etc/docker/daemon.json { "registry-mirrors": ["https://jdcprod-docker-reg.jdcloud.com"] } - ✅ 开启京东云云监控 Agent:实时监控 CPU/内存/磁盘/网络,及时发现资源瓶颈。
- ⚠️ 注意地域与可用区:Docker 镜像仓库、云硬盘、VPC 必须在同一地域,跨可用区需额外配置。
✅ 总结 Checklist(上线前必查)
| 项目 | 是否完成 |
|——|———-|
| 安全组仅开放必要端口,禁用 2375/2376 | ☐ |
| Docker 已升级至 20.10+,daemon.json 配置合理 | ☐ |
| 容器以非 root 用户运行,无 --privileged | ☐ |
| 数据卷使用命名 Volume 或挂载云硬盘,非宿主机随意路径 | ☐ |
| 日志大小限制已配置,且有集中采集方案 | ☐ |
| 镜像来自可信源(如京东云容器镜像服务 JCR 或 Docker Hub 官方镜像) | ☐ |
| 已配置云监控告警(CPU>80%、磁盘>90%、OOM事件) | ☐ |
如需进一步优化,可考虑迁移到京东云 容器服务 JDCC(Kubernetes 托管版) 或 Serverless 容器服务(JDCC Serverless),获得自动扩缩容、服务发现、CI/CD 集成等企业级能力。
需要我为你提供一份完整的 docker-compose.yml 示例(含 Nginx + Redis + 应用)、京东云安全组配置截图指引,或自动化部署脚本(Shell/Terraform),欢迎随时提出 👍
CLOUD技术笔记