在腾讯云 CVM(云服务器)上通过 Docker 快速部署 Nginx、MySQL 和 Redis 的最新稳定版,最推荐的方式是使用 docker-compose。这种方式可以将所有服务的配置、镜像版本和网络关系集中管理,避免命令繁琐且易于维护。
以下是完整的操作步骤:
第一步:环境准备与安装 Docker
首先登录到你的腾讯云 CVM,执行以下命令检查并安装 Docker 及 Docker Compose(如果尚未安装)。
# 1. 更新软件源
sudo apt-get update
# 2. 安装 Docker Engine (以 Ubuntu/Debian 为例)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 3. 启动 Docker 服务并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 4. 安装 Docker Compose (如果系统自带版本较老,建议手动安装最新版)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
注意:如果你使用的是 CentOS,请将
apt-get替换为yum或dnf,Docker 官方脚本同样适用。
第二步:创建项目目录与配置文件
创建一个文件夹用于存放配置,并编写 docker-compose.yml 文件。这里我们使用最新的稳定版标签(目前通常为 MySQL 8.0, Redis 7.x, Nginx 最新稳定版)。
mkdir ~/nginx-mysql-redis
cd ~/nginx-mysql-redis
新建 docker-compose.yml 文件:
nano docker-compose.yml
将以下内容粘贴进去(已包含网络隔离、数据持久化和端口映射):
version: '3.8'
services:
# --- Nginx 服务 ---
nginx:
image: nginx:latest
container_name: my_nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- mysql
- redis
networks:
- app_net
# --- MySQL 服务 ---
mysql:
image: mysql:8.0
container_name: my_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_strong_password_here # 请修改为强密码
MYSQL_DATABASE: test_db
MYSQL_USER: app_user
MYSQL_PASSWORD: app_password
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d
networks:
- app_net
command: --default-authentication-plugin=mysql_native_password
# --- Redis 服务 ---
redis:
image: redis:7-alpine
container_name: my_redis
restart: always
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes --requirepass your_redis_password # 开启持久化并设置密码
networks:
- app_net
networks:
app_net:
driver: bridge
配置说明:
- Nginx: 挂载了
./nginx/html(网页文件) 和./nginx/conf.d(配置文件)。 - MySQL: 使用
mysql:8.0,挂载数据到本地防止重启丢失,设置了环境变量(账号密码)。 - Redis: 使用
redis:7-alpine(轻量级),开启了 AOF 持久化 (--appendonly yes),并设置了访问密码。 - 安全提示:请务必将 YAML 中的
your_strong_password_here等占位符替换为你自己的强密码。
第三步:创建必要的目录结构
为了让 Nginx 能够正常读取配置和静态文件,需要手动创建对应的目录:
mkdir -p nginx/html nginx/conf.d mysql/data mysql/init redis/data
你可以放一个简单的测试页面到 nginx/html 目录下:
echo "<h1>Hello from Docker on Tencent Cloud!</h1>" > nginx/html/index.html
第四步:启动服务
在项目目录下运行启动命令:
docker-compose up -d
-d: 后台运行模式。- 首次运行会自动拉取镜像(
latest,8.0,7-alpine),根据网络情况可能需要几分钟。
第五步:验证与后续操作
1. 查看容器状态
docker-compose ps
确保所有服务的 STATUS 都是 Up。
2. 查看日志
如果启动失败,可以查看日志排查:
docker-compose logs -f nginx
docker-compose logs -f mysql
docker-compose logs -f redis
3. 腾讯云防火墙配置(关键步骤)
Docker 只是开放了容器内部的端口,你还需要在 腾讯云控制台 放行端口,否则外部无法访问。
- 登录 腾讯云控制台。
- 进入 云服务器 (CVM) -> 找到你的实例 -> 点击 更多 -> 安全组。
- 编辑安全组规则,添加入站规则:
- 协议类型: TCP
- 端口范围:
80,443,3306,6379(或者只开放特定业务需要的端口,生产环境建议不要直接暴露 3306 和 6379 到公网,仅对特定 IP 开放或通过内网连接)。 - 来源:
0.0.0.0/0(允许全网) 或指定你的办公 IP。
4. 停止与重启
- 停止服务:
docker-compose down - 重启服务:
docker-compose restart
常见问题提示
- MySQL 字符集问题:如果遇到中文乱码,可以在
mysql的command中添加--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci。 - Redis 连接被拒:如果在应用端连接 Redis 报错,请确认 Redis 配置中是否开启了
bind 0.0.0.0(默认 alpine 镜像通常绑定所有网卡,但需检查requirepass密码是否正确传入)。 - 数据安全:生产环境中,建议将
volumes指向云盘的独立挂载点,或者定期备份mysql/data和redis/data目录。
CLOUD技术博