在京东云(JD Cloud)上部署 Docker 应用,核心逻辑其实和在其他主流云厂商(如阿里云、腾讯云)上没有本质区别,但结合京东云的具体产品特性(如 JDC 容器服务、ECS 云主机、网络架构等),有几个坑和最佳实践值得注意。
以下是基于实际运维经验的几点关键注意事项:
1. 基础镜像与存储驱动的选择
京东云的 ECS 实例默认文件系统通常是 XFS 或 EXT4。对于 Docker 而言,overlay2 是目前最推荐的存储驱动,性能稳定且兼容性好。
- 初始化配置:如果你使用的是自定义镜像启动的 ECS,建议在创建实例后,先执行
docker info检查 storage driver 是否为 overlay2。如果不是,可能需要调整/etc/docker/daemon.json并重启 Docker 服务。 - 本地盘 vs 云盘:Docker 的镜像层和容器写操作会产生大量小文件 IO。如果业务对 IO 敏感(如数据库、高频日志写入),务必挂载高性能的云硬盘(SSD 或 ESSD),而不是依赖实例本地的临时盘。本地盘在实例停止或删除时会丢失数据,切勿将持久化数据放在
/var/lib/docker所在的系统盘分区。
2. 网络配置与安全组策略
这是最容易出问题的地方。京东云的安全组(Security Group)是状态包过滤机制,理解其规则至关重要。
- 入站规则(Inbound):确保你的安全组放行了应用所需的端口(如 80, 443, 8080 等)。注意,Docker 默认桥接网络(bridge)下的容器 IP 是动态分配的,且位于 NAT 之后。如果你直接暴露容器端口到宿主机,需要确认宿主机的 iptables/firewalld 是否允许转发。
- 出站规则(Outbound):默认情况下,京东云 ECS 允许所有出站流量。但如果你的业务需要拉取私有镜像仓库(Harbor)或调用其他云服务 API,请确保没有误配出站限制。
- VPC 内网通信:如果你的 Docker 应用需要访问京东云的其他资源(如 RDS 数据库、Redis 缓存),务必使用内网 Endpoint。公网访问不仅延迟高,还会产生额外的公网流量费用,且存在安全风险。在 VPC 内部,确保 Docker 容器所在子网与数据库子网路由互通。
3. 资源隔离与 Limit 设置
京东云提供 CPU 积分制(突发性能实例)和标准型实例。
- CPU 限制:在使用
docker run或docker-compose时,建议显式设置 CPU 和内存限制(--cpus,-m)。这不仅能防止单个容器耗尽宿主机资源导致 OOM(Out of Memory)影响其他业务,也是云环境多租户共享资源时的基本规范。 - Swap 问题:在生产环境中,强烈建议禁用 Swap。Docker 官方文档明确指出,启用 Swap 可能导致不可预测的性能问题和稳定性风险。可以在宿主机层面通过
swapoff -a禁用,并在/etc/fstab中注释掉 swap 分区。
4. 日志管理与监控
Docker 容器的 stdout/stderr 日志默认由 Docker 引擎管理,如果不加限制,会迅速占满磁盘空间。
- 日志轮转:在
/etc/docker/daemon.json中配置 log-driver 为 json-file,并设置 max-size 和 max-file。例如:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } - 京东云云监控:接入京东云云监控 Agent,可以实时监控 ECS 的 CPU、内存、磁盘 IO 和网络流量。对于 Docker 容器级别的监控,建议使用 Prometheus + Grafana 方案,或者京东云容器服务(JDC)自带的监控面板,以便更细粒度地观察容器资源使用情况。
5. 镜像构建与推送优化
- 提速镜像拉取:国内网络环境下,从 Docker Hub 拉取镜像速度较慢且不稳定。建议在
/etc/docker/daemon.json中配置京东云提供的镜像提速器地址(可在京东云控制台“镜像服务”中找到),或配置阿里、网易等公共提速器。 - 多阶段构建:为了减小最终镜像体积,推荐使用多阶段构建(Multi-stage builds)。只将运行所需的最小依赖打包进最终镜像,避免包含编译工具链、源码等无用文件。这不仅节省存储空间,也减少了传输时间和潜在的安全攻击面。
6. 权限与安全
- 非 Root 运行:尽量以非 root 用户身份运行容器内的进程。在 Dockerfile 中使用
USER指令切换用户,避免容器内进程拥有宿主机的 root 权限,降低被提权的风险。 - 敏感信息处理:不要在 Dockerfile 或 docker-compose.yml 中硬编码密码、密钥等敏感信息。应使用环境变量注入、京东云密钥管理服务(KMS)或外部配置文件挂载的方式处理。
7. 备份与恢复
- 数据卷备份:如果使用了 Docker Volume 或 Bind Mount 存储数据,需制定定期备份策略。可以使用
tar命令打包挂载目录,或通过京东云快照功能对底层云盘进行快照备份。 - 编排工具选择:对于单机部署,
docker-compose足够简单;但对于生产环境,尤其是需要考虑高可用、滚动更新、故障转移的场景,建议直接使用京东云容器服务(JDC)或 Kubernetes(ACK/K8s),利用其原生能力管理应用生命周期,而非手动维护一堆docker run命令。
总结来说,在京东云部署 Docker,重点在于网络连通性验证、资源限制设定、日志轮转配置以及安全组策略的正确开放。遵循这些最佳实践,能显著提升应用的稳定性和可维护性。
云技术博客