在腾讯云服务器上使用 Docker 部署 Web 服务,结合其云平台特性(如 VPC、安全组、负载均衡等),可以实现高可用、安全、可扩展的部署架构。以下是最佳实践总结:
一、基础环境准备
-
选择合适的云服务器实例
- 推荐使用 CVM 实例类型:标准型 S5 或计算型 C6(根据负载需求)。
- 操作系统建议:Ubuntu 20.04/22.04 LTS 或 CentOS Stream,长期支持且社区生态好。
-
配置安全组与网络
- 开放必要端口:
80(HTTP)、443(HTTPS)22(SSH,建议限制来源 IP)- 自定义应用端口(如
3000、8080等)
- 使用 VPC 内网通信,避免公网暴露内部服务。
- 开放必要端口:
-
更新系统并安装依赖
sudo apt update && sudo apt upgrade -y
二、Docker 安装与配置
-
安装 Docker 和 Docker Compose
# 安装 Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 安装 Docker Compose(v2+) sudo mkdir -p /usr/local/lib/docker/cli-plugins sudo curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose -
优化 Docker 配置
- 修改
/etc/docker/daemon.json配置文件:{ "registry-mirrors": ["https://mirror.ccs.tencentyun.com"], "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" }, "data-root": "/data/docker" // 将数据目录挂载到数据盘 }建议将 Docker 数据目录挂载到独立的数据盘,提升 I/O 性能和容量。
- 修改
三、Web 服务容器化部署
-
编写 Dockerfile(示例:Node.js 应用)
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["node", "server.js"] -
使用 Docker Compose 编排多服务
创建docker-compose.yml:version: '3.8' services: web: build: . ports: - "3000:3000" environment: - NODE_ENV=production restart: unless-stopped networks: - app-network nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - web restart: unless-stopped networks: - app-network networks: app-network: driver: bridge -
Nginx 反向X_X配置
- 统一入口,处理 HTTPS、静态资源、负载分发。
- 启用 Gzip、缓存、限流等优化。
四、安全加固
-
非 root 用户运行容器
RUN addgroup -g 1001 -S nodejs && adduser -u 1001 -S nodejs -G nodejs USER nodejs -
最小化镜像
- 使用 Alpine 或 Distroless 镜像。
- 删除不必要的工具(如
curl,vim)。
-
启用 HTTPS
- 使用腾讯云免费 SSL 证书或 Let’s Encrypt。
- 在 Nginx 中配置 HTTPS 强制跳转。
-
定期扫描镜像漏洞
docker scan your-web-app-image或使用 Trivy 等工具集成 CI/CD。
五、监控与日志管理
-
集中日志收集
- 使用 ELK(Elasticsearch + Logstash + Kibana)或 Loki + Promtail + Grafana。
- 配置 Docker 日志驱动输出到文件或远程服务。
-
监控容器状态
- 使用 Prometheus + cAdvisor + Grafana 监控 CPU、内存、网络。
- 或接入腾讯云可观测平台(Cloud Monitor + TKE 监控)。
六、自动化与持续部署(CI/CD)
-
使用 GitHub Actions / GitLab CI / 腾讯云 CODING DevOps
- 推送代码后自动构建镜像、推送至腾讯云容器镜像服务 TCR。
- 自动拉取并重启服务(通过 SSH 或 API 触发)。
-
使用腾讯云容器镜像服务 TCR
- 创建私有镜像仓库,提升拉取速度(就近提速)。
- 配置触发器实现自动部署。
七、高可用与扩展建议
-
结合负载均衡 CLB
- 多台 CVM 部署相同服务,CLB 做流量分发。
- 健康检查路径配置合理(如
/healthz)。
-
使用弹性伸缩(ESS)
- 根据 CPU/内存使用率自动扩缩容 CVM 实例。
-
考虑迁移到容器服务 TKE
- 对于复杂微服务架构,推荐使用腾讯云 TKE(Kubernetes)替代单机 Docker。
- 更好的调度、自愈、滚动更新能力。
八、备份与恢复
-
定期备份关键数据
- 数据库、配置文件、SSL 证书挂载卷。
- 使用 COS(对象存储)做异地备份。
-
Docker 卷备份脚本示例
tar czf /backup/web-data-$(date +%F).tar.gz /data/app/uploads
总结:关键最佳实践清单
| 类别 | 最佳实践 |
|---|---|
| 环境准备 | 使用 VPC、安全组隔离,挂载数据盘 |
| Docker 配置 | 配置镜像提速、日志轮转、非 root 运行 |
| 部署方式 | Docker Compose 编排,Nginx 反向X_X |
| 安全 | HTTPS、最小权限、镜像扫描 |
| 监控运维 | 日志集中、Prometheus 监控 |
| CI/CD | 自动构建 + TCR + 自动部署 |
| 扩展性 | 结合 CLB + ESS,未来可迁移到 TKE |
通过以上实践,可以在腾讯云上构建一个稳定、安全、易于维护的基于 Docker 的 Web 服务架构。如果项目规模增长,建议逐步过渡到 Kubernetes(TKE)以获得更强的编排能力。
CLOUD云枢