基于docker-compose的Nginx+Redis+MySQL统一化部署指南
文章目录
前言
本文针对运维新手,演示如何用docker-compose统一部署Nginx、Redis、MySQL三大常用服务,实现配置文件、日志文件、数据存储的标准化路径规划,解决传统部署中文件分散管理的痛点。
本文使用的docker版本如下:
docker 版本:v20.10.17
docker-compose 版本:v2.7.0
一、docker-compose是什么?
docker-compose是Docker官方提供的容器编排工具,通过YAML格式文件定义多容器应用服务,实现一键式启动/停止、依赖管理、资源配置等操作。特别适合复杂多服务的标准化部署场景。
二、安装执行步骤
1.准备工作
需要安装docker和docker-compose 可以参考上一篇发布文章:Linux系统安装Docker与Docker Compose完整指南
目录结构说明
/home/docker/
├── mysql
│ ├── conf # 自定义配置
│ ├── data # 数据库文件
│ └── logs # 查询日志/错误日志
├── redis
│ ├── conf # redis.conf配置文件
│ ├── data # RDB/AOF持久化文件
│ └── logs # 运行日志
└── nginx
├── conf # 虚拟主机配置
├── html # 网站根目录
└── logs # 访问日志/错误日志
开始创建目录
# 创建标准化目录结构
sudo mkdir -p /home/docker/{nginx,redis,mysql}/{conf,logs,data,html}
# 设置目录权限(防止容器权限问题)
sudo chmod -R 777 /home/docker
2.编写docker-compose.yml
vim /home/docker/docker-compose.yml
配置如下如下:
version: '3.8'
services:
nginx:
image: nginx:1.22.1
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- /home/docker/nginx/conf:/etc/nginx/conf.d
- /home/docker/nginx/logs:/var/log/nginx
- /home/docker/nginx/html:/usr/share/nginx/html
restart: always
redis:
image: redis:7.2.4-alpine
container_name: redis
ports:
- "6379:6379" # 修正端口映射
volumes:
- /home/docker/redis/data:/data
- /home/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /home/docker/redis/logs:/var/log/redis
command: redis-server /usr/local/etc/redis/redis.conf --requirepass your_password
restart: always
mysql:
image: mysql:8.0.40
container_name: mysql
ports:
- "3306:3306" # 修正端口映射
environment:
MYSQL_ROOT_PASSWORD: your_password
TZ: Asia/Shanghai
volumes:
- /home/docker/mysql/data:/var/lib/mysql
- /home/docker/mysql/conf:/etc/mysql/conf.d
- /home/docker/mysql/logs:/var/log/mysql
restart: always
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
部署前配置文件准备
mysql配置(可选)
vim /home/docker/mysql/conf/my.cnf
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
log-bin=mysql-bin
#设置清理超过60天的日志,以免日志堆积造过多成服务器内存爆满
expire_logs_days=60
#允许最大的连接数
max_connections=16384
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'
#wait_timeout参数值,由默认的8小时,修改为30分钟。
wait_timeout=1800
#修改back_log参数值:由默认的50修改为500 每个线程256K 1.6W线程2G左右
back_log=500
character_set_server=utf8mb4
bind-address = 0.0.0.0
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=SET NAMES utf8mb4
部署执行命令
# 启动所有服务(后台模式)
docker-compose up -d
# 查看运行状态
docker-compose ps
# 停止服务
# docker-compose down
配置验证指南
MySQL连接验证
docker exec -it mysql bash
mysql -h 127.0.0.1 -P 3306 -uroot -p
# 输入密码 your_password
Redis连接测试
docker exec -it redis sh
redis-cli -h 127.0.0.1 -p 6379
auth # 输入密码 your_password
Nginx验证
浏览器访问 http://服务器IP 查看欢迎页
更新服务说明
docker-compose stop mysql
docker-compose rm -f mysql
docker-compose up -d mysql
常见问题排查
Q1:容器启动失败怎么办?
- 查看日志:docker logs 容器名
- 检查目录权限:ls -ld /home/docker/*
Q2:如何修改配置?
- 宿主机修改对应conf目录下的配置文件
- 执行 docker-compose restart 服务名
Q3:端口不通,需要关闭防火墙?
- 关闭防火墙
- 清空所有规则
总结
通过docker-compose实现三大服务的统一管理,具有以下优势:
配置文件集中管理,方便版本控制
数据持久化存储,避免容器销毁丢失数据
日志统一收集,便于故障排查
版本固定,避免环境差异问题
提示:生产环境建议使用docker secret管理密码,避免密码明文暴露