在腾讯云服务器上使用 Docker 部署 Web 服务,结合云平台特性和容器化优势,可以实现高效、稳定、可扩展的部署方案。以下是最佳实践总结:
一、环境准备与安全配置
-
选择合适的 CVM 实例
- 根据业务负载选择实例类型(如标准型 S5、计算型 C6)。
- 建议开启公网 IP 或绑定弹性公网 IP(EIP),便于访问。
- 使用 SSD 云硬盘提升 I/O 性能。
-
操作系统建议
- 推荐使用 Ubuntu 20.04/22.04 LTS 或 CentOS 7/8(注意 CentOS 流向问题)。
- 确保系统更新及时,安装基础工具(
curl,vim,wget等)。
-
安全组配置
- 仅开放必要的端口:如
80(HTTP)、443(HTTPS)、22(SSH)。 - 限制 SSH 登录 IP(白名单),防止暴力破解。
- 避免开放
2375(Docker Remote API)等高危端口到公网。
- 仅开放必要的端口:如
-
启用密钥登录
- 使用 SSH 密钥对替代密码登录,提高安全性。
二、Docker 安装与优化
-
安装最新版 Docker
# Ubuntu 示例 sudo apt update sudo apt install docker.io docker-compose sudo systemctl enable docker --now -
添加当前用户到 docker 组
sudo usermod -aG docker $USER重启 shell 或重新登录生效。
-
配置 Docker 存储驱动和日志
- 编辑
/etc/docker/daemon.json:{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2" } - 重启 Docker:
sudo systemctl restart docker
- 编辑
-
配置镜像提速器(提升拉取速度)
- 使用腾讯云镜像提速器(登录控制台获取):
{ "registry-mirrors": ["https://<your-id>.mirror.tencentyun.com"] }
- 使用腾讯云镜像提速器(登录控制台获取):
三、Web 服务部署最佳实践
-
使用 Docker Compose 管理多容器应用
- 创建
docker-compose.yml文件管理 Nginx、App、DB 等服务。 -
示例结构:
version: '3.8' services: web: image: my-web-app:latest ports: - "8080:80" environment: - NODE_ENV=production networks: - app-network depends_on: - db nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl networks: - app-network depends_on: - web db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: strongpassword volumes: - db-data:/var/lib/mysql networks: - app-network networks: app-network: driver: bridge volumes: db-data:
- 创建
-
Nginx 反向X_X + HTTPS
- 使用 Nginx 做反向X_X,转发请求到后端容器。
- 配置 SSL 证书(推荐使用腾讯云免费 SSL 证书或 Let’s Encrypt)。
- 开启 Gzip 压缩、缓存静态资源。
-
使用 .env 文件管理环境变量
- 创建
.env文件存储敏感信息(数据库密码、API Key 等)。 - 在
docker-compose.yml中引用:environment: - DB_PASSWORD=${DB_PASSWORD}
- 创建
-
健康检查(Health Check)
- 为关键服务添加健康检查,确保容器正常运行:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80"] interval: 30s timeout: 10s retries: 3
- 为关键服务添加健康检查,确保容器正常运行:
四、持续集成与自动化部署(CI/CD)
-
使用 CI/CD 工具自动构建与部署
- 推荐使用 GitHub Actions / GitLab CI / Jenkins / 腾讯云 CODING DevOps。
- 自动触发流程:代码提交 → 构建镜像 → 推送至镜像仓库 → 拉取并重启服务。
-
使用腾讯云容器镜像服务 TCR
- 创建私有镜像仓库,安全存储镜像。
- 构建完成后推送镜像:
docker tag myapp:v1 ccr.ccs.tencentyun.com/namespace/myapp:v1 docker push ccr.ccs.tencentyun.com/namespace/myapp:v1
-
滚动更新与回滚机制
- 使用
docker-compose pull && docker-compose up -d实现平滑更新。 - 保留旧版本镜像,便于快速回滚。
- 使用
五、监控与日志管理
-
集中日志收集
- 使用
docker logs查看日志,或对接 ELK、Loki 等日志系统。 - 配置日志驱动输出到文件或远程服务。
- 使用
-
监控容器状态
- 使用
docker stats实时查看资源占用。 - 集成 Prometheus + Grafana 监控 CPU、内存、网络等指标。
- 腾讯云云监控支持容器监控(需安装 Agent)。
- 使用
-
告警设置
- 在腾讯云控制台设置 CPU、内存、磁盘使用率告警。
- 邮件/微信通知运维人员。
六、备份与高可用
-
定期备份数据卷
- 对数据库、配置文件等重要数据做定时备份。
- 使用 COS(对象存储)备份数据卷快照。
-
跨可用区部署(高阶)
- 多台 CVM 部署相同服务,配合 CLB(负载均衡)实现高可用。
- 后续可迁移至 TKE(腾讯云 Kubernetes 引擎)实现集群编排。
七、其他建议
- 不要在容器中运行 SSH 服务:通过宿主机 SSH 管理即可。
- 最小化镜像体积:使用 Alpine 基础镜像,多阶段构建。
- 定期清理无用镜像和容器:
docker system prune -a - 使用非 root 用户运行应用:提升安全性。
总结:核心要点
| 类别 | 最佳实践 |
|---|---|
| 安全 | 密钥登录、安全组、非 root 运行 |
| 性能 | SSD 磁盘、镜像提速、资源限制 |
| 部署 | Docker Compose、TCR、CI/CD |
| 可靠性 | 健康检查、日志、监控、备份 |
| 扩展性 | 支持后续迁移到 TKE/Kubernetes |
通过以上实践,你可以在腾讯云服务器上安全、高效地使用 Docker 部署 Web 服务,并具备良好的可维护性和可扩展性。后续可根据业务增长逐步过渡到 Kubernetes 集群管理。
云服务器