在腾讯云 CVM 上通过 Docker 部署 Nginx、MySQL 和 Redis,核心思路是“容器化隔离” + “数据持久化”。别整那些虚头巴脑的套话,直接上干货。
第一步:环境准备(CVM 基础配置)
登录你的腾讯云 CVM,确保系统更新并安装 Docker。这里以 Ubuntu/Debian 为例(CentOS 逻辑类似)。
# 1. 更新软件源
sudo apt update && sudo apt upgrade -y
# 2. 安装 Docker(推荐官方脚本或 apt 源)
curl -fsSL https://get.docker.com | sh -s -- --mirror Aliyun
# 或者手动安装最新版(视具体发行版而定)
sudo apt install docker-ce docker-ce-cli containerd.io -y
# 3. 启动服务并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 4. 验证安装
docker version
docker run hello-world
注意:如果是生产环境,记得去腾讯云控制台给 CVM 的安全组开放对应端口(80, 443, 3306, 6379),否则网络连不上。
第二步:编写 Docker Compose 文件
单条命令启动三个服务容易乱,用 docker-compose 管理最稳妥。在项目目录下新建 docker-compose.yml。
这里选取各组件的最新稳定版标签(Stable Tag),例如 MySQL 通常用 latest 但生产建议指定具体小版本如 8.0,Redis 用 latest 即可,Nginx 同理。
version: '3.8'
services:
# --- Nginx (Web 服务器) ---
nginx:
image: nginx:latest
container_name: my-nginx
ports:
- "80:80"
- "443:443"
volumes:
# 挂载配置文件(需提前创建 conf.d/nginx.conf)
- ./conf/nginx.conf:/etc/nginx/nginx.conf
# 挂载网站目录
- ./html:/usr/share/nginx/html
depends_on:
- mysql
- redis
restart: always
# --- MySQL (数据库) ---
mysql:
image: mysql:8.0
container_name: my-mysql
environment:
MYSQL_ROOT_PASSWORD: your_strong_password_here # 务必修改强密码
MYSQL_DATABASE: test_db
MYSQL_USER: app_user
MYSQL_PASSWORD: app_password
ports:
- "3306:3306"
volumes:
# 数据持久化到本地,防止容器删除后数据丢失
- ./data/mysql:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
# --- Redis (缓存) ---
redis:
image: redis:latest
container_name: my-redis
ports:
- "6379:6379"
volumes:
# 数据持久化
- ./data/redis:/data
command: redis-server --appendonly yes --requirepass your_redis_password
restart: always
关键点说明:
- 数据安全:
volumes部分至关重要。如果不挂载宿主机目录,容器一删,数据库和缓存数据全没。 - 密码安全:环境变量里的密码必须替换成你自己的强密码,严禁使用默认值。
- 依赖关系:Nginx 设置了
depends_on,但这只是启动顺序,不是健康检查。如果业务复杂,建议加healthcheck。
第三步:目录与配置文件初始化
运行 compose 前,需要准备好目录结构和 Nginx 配置。
mkdir -p conf html data/mysql data/redis
# 创建一个简单的 Nginx 测试页
echo "<h1>Hello from Docker on Tencent Cloud</h1>" > html/index.html
# 如果需要自定义 Nginx 配置(如反向X_X、SSL),请编辑 conf/nginx.conf
# 如果没有特殊需求,上面的 default config 也能跑起来,但建议至少挂载一个自定义配置来优化性能
第四步:一键启动
在项目根目录执行:
docker-compose up -d
-d 表示后台运行。
第五步:验证与排查
-
查看状态:
docker-compose ps确认三个容器状态均为
Up。 -
查看日志(如果启动失败):
docker-compose logs -f mysql docker-compose logs -f redis docker-compose logs -f nginx -
连通性测试:
- Nginx:浏览器访问
http://<你的 CVM 公网 IP>,应看到 HTML 页面。 - MySQL:
docker exec -it my-mysql mysql -uroot -p # 输入密码后进入命令行,执行 show databases; - Redis:
docker exec -it my-redis redis-cli -a your_redis_password ping # 返回 PONG 即成功
- Nginx:浏览器访问
生产环境特别提示(避坑指南)
- 网络模式:上述配置使用的是默认的
bridge模式。如果多台 CVM 需要互通,建议改用host模式(去掉ports映射,直接在宿主机监听端口),或者配置 Docker 自定义网络。但在单台 CVM 上,默认桥接足够。 - 内存限制:MySQL 和 Redis 比较吃内存。如果 CVM 配置较低(如 1G 或 2G 内存),请在
docker-compose.yml中为它们添加deploy.resources.limits.memory限制,防止 OOM(内存溢出)导致容器被杀。 - 备份策略:Docker 的数据卷虽然持久化了,但还是要定期备份
./data目录到云存储(COS)或其他异地备份方案。 - 防火墙:除了安全组,CVM 内部可能还有
ufw或iptables。如果外部能 Ping 通但端口不通,检查sudo ufw status或systemctl stop firewalld(CentOS)。 - 版本选择:
latest标签虽然方便,但意味着代码可能会自动升级。生产环境建议锁定具体版本号(如mysql:8.0.32),避免自动升级带来的兼容性问题。
按这个流程走,半小时内就能在腾讯云上拉起一套标准的 LAMP/LNMP 架构。有问题直接看日志,别猜。
云知道CLOUD