【使用 Docker Compose 部署 MySQL 5.7 容器】

以下是一个完整的 Markdown(.md)文档,详细描述了如何使用 Docker Compose 部署 MySQL 5.7 容器,并实现数据持久化与自动启动功能:


使用 Docker Compose 部署 MySQL 5.7 容器(含数据持久化与自启动)

目录

  1. 目标概述
  2. 前置条件
  3. 部署步骤
  4. 关键配置说明
  5. 项目结构示例
  6. 常见问题

目标概述

通过 Docker Compose 快速部署一个 MySQL 5.7 容器,实现:

  • 数据持久化(避免容器删除后数据丢失)
  • 自动启动 MySQL 服务(容器重启策略)
  • 可选的自定义配置和初始化脚本

前置条件


部署步骤

1. 创建项目目录

mkdir mysql57-docker-compose
cd mysql57-docker-compose

2. 编写 docker-compose.yml

创建文件 docker-compose.yml,内容如下:

version: '3.8'

services:
  mysql57:
    image: mysql:5.7
    container_name: mysql57
    environment:
      MYSQL_ROOT_PASSWORD: root  # 设置root密码
    ports:
      - "3306:3306"              # 端口映射
    volumes:
      - ./mysql_data:/var/lib/mysql  # 数据持久化
    restart: always                # 自动重启策略

3. (可选)自定义 MySQL 配置

创建 my.cnf 文件配置字符集:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

docker-compose.ymlvolumes 部分添加挂载:

    volumes:
      - ./mysql_data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf  # 挂载配置文件

4. (可选)初始化 SQL 脚本

创建 init.sql 初始化数据库:

CREATE DATABASE IF NOT EXISTS flaskblog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flaskuser'@'%' IDENTIFIED BY 'flaskpass';
GRANT ALL PRIVILEGES ON flaskblog.* TO 'flaskuser'@'%';
FLUSH PRIVILEGES;

docker-compose.yml 中添加挂载:

    volumes:
      - ./mysql_data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql  # 初始化脚本

⚠️ 注意:初始化脚本仅在首次启动时执行一次!

5. 启动 MySQL 容器

docker-compose up -d

6. 验证 MySQL 运行状态

# 查看运行中的容器
docker ps

# 测试连接(需安装MySQL客户端)
mysql -h 127.0.0.1 -P 3306 -u root -p
# 或进入容器内部连接
docker exec -it mysql57 mysql -uroot -proot

关键配置说明

配置项作用
image: mysql:5.7使用官方MySQL 5.7镜像
volumes数据持久化挂载
restart: always容器自动重启策略
environment设置环境变量(如密码)
/docker-entrypoint-initdb.d/初始化脚本自动执行目录

项目结构示例

mysql57-docker-compose/
├── docker-compose.yml       # 主配置文件
├── my.cnf                   # (可选)MySQL配置文件
└── init.sql                 # (可选)初始化SQL脚本
└── mysql_data/              # 自动生成的数据卷目录

常见问题

Q1: 如何修改MySQL root密码?
A: 修改docker-compose.yml中的MYSQL_ROOT_PASSWORD后,需要删除旧容器和数据卷重新创建:

docker-compose down -v
docker-compose up -d

Q2: 初始化脚本没有执行?
A: 确保:

  1. 脚本已正确挂载到/docker-entrypoint-initdb.d/
  2. 数据卷是新建的(未初始化过数据库)

Q3: 如何备份数据?
A: 直接备份mysql_data目录即可:

tar -czvf mysql_backup.tar.gz mysql_data/

✅ 提示:生产环境建议使用MySQL 5.7+或8.0版本,并配置更安全的密码策略。

### Docker Compose 部署 MySQL 5.7 的配置示例 以下是通过 `docker-compose` 配置并部署 MySQL 5.7 的具体方法: #### 基本配置文件结构 Docker Compose 使用 YAML 文件来定义服务及其依赖关系。对于 MySQL 5.7,可以通过创建名为 `docker-compose.yml` 的文件实现。 ```yaml version: '3.8' services: db: image: mysql:5.7 container_name: mysql_5_7_container restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: testdb MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3306:3306" volumes: - ./data:/var/lib/mysql networks: - app-network networks: app-network: driver: bridge ``` #### 参数说明 - **image**: 定义使用的镜像版本为 `mysql:5.7`[^4]。 - **container_name**: 设置容器名称为 `mysql_5_7_container`。 - **restart**: 当主机重启时自动启动该容器- **environment**: 配置环境变量以初始化数据库实例,包括根密码 (`MYSQL_ROOT_PASSWORD`) 和其他用户/数据库设置。 - **ports**: 将宿主机的端口映射到容器内部的默认 MySQL 端口 (3306)[^4]。 - **volumes**: 数据持久化存储路径,将本地目录挂载至容器内的 `/var/lib/mysql` 路径。 - **networks**: 创建一个新的网络用于服务间通信。 #### 启动服务 完成上述配置后,运行以下命令即可启动服务: ```bash docker-compose up -d ``` 此命令将以分离模式启动服务,并在后台运行容器[^3]。 #### 修改权限 如果遇到权限问题(例如无法执行 `docker-compose`),可按照如下方式调整文件权限: ```bash chmod +x /usr/local/bin/docker-compose ``` 或者如果是通过 YUM 安装,则需调整以下路径的权限: ```bash chmod +x /usr/libexec/docker/cli-plugins/docker-compose ``` 以上操作确保了 `docker-compose` 可正常执行[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值