使用京东云主机部署Docker应用有哪些注意事项?

在京东云(JD Cloud)主机上部署 Docker 应用时,需兼顾云平台特性、Linux 系统安全规范及容器化最佳实践。以下是关键注意事项,按部署流程分类整理:


一、环境准备阶段

  1. 选择合适的云主机规格

    • 内存与 CPU:Docker 本身轻量,但应用+容器运行时需预留资源(建议 ≥2C4G 起步;若运行数据库/高并发服务,需按实际负载评估并预留 20%~30% 缓存余量)。
    • 系统盘类型:优先选用 SSD 云硬盘(如 Ultra SSD),避免使用性能较差的普通云硬盘,防止 docker build 或镜像拉取 I/O 瓶颈。
    • 网络类型:确保实例处于 VPC 私有网络,并配置安全组规则(见下文)。
  2. 操作系统选型与初始化

    • 推荐使用京东云官方提供的 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
  3. 安装 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 的镜像(更省心)。

二、安全与权限管理

  1. 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 权限泄露。
  2. 京东云安全组配置(关键!)

    • 仅放行必要端口(如应用 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内网) | 内部服务调用 |
  3. 容器运行时安全

    • 启动容器时避免 --privileged,优先使用能力限制(--cap-drop=ALL --cap-add=NET_BIND_SERVICE)。
    • 敏感数据用京东云 KMS 密钥管理服务Secrets Manager 管理,而非环境变量硬编码。
    • 使用非 root 用户运行应用(Dockerfile 中添加 USER 1001)。

三、存储与持久化

  1. 数据卷(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)。
  2. 镜像存储优化

    • 修改 Docker 根目录(默认 /var/lib/docker)到大容量云硬盘(避免系统盘爆满):
      // /etc/docker/daemon.json
      {
        "data-root": "/mnt/docker-data",
        "storage-driver": "overlay2"
      }

      ⚠️ 修改前需停止 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 映射做负载分发

五、监控、日志与运维

  1. 日志管理

    • 避免容器日志无限增长(默认 json-file 驱动):
      // /etc/docker/daemon.json
      {
        "log-driver": "json-file",
        "log-opts": {
          "max-size": "10m",
          "max-file": "3"
        }
      }
    • 生产环境建议接入京东云 云监控(Cloud Monitor)+ 日志服务(JCQ/CLS),或使用 fluentd/filebeat 收集。
  2. 容器生命周期管理

    • 使用 docker-compose.yml京东云容器服务(JDCC) 管理多容器应用(比裸 docker run 更可靠)。
    • 设置重启策略:--restart=unless-stopped(避免意外退出后服务中断)。
    • 关键服务建议配合 systemd 托管(生成 service unit),确保开机自启。
  3. 备份与灾备

    • 定期备份:容器镜像(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),欢迎随时提出 👍