基于docker-compose的Nginx+Redis+MySQL统一化部署指南

基于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管理密码,避免密码明文暴露

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值