docker-compose 安装MySQL8.0.39

好的,这是一个使用 Docker Compose 安装 MySQL 8.0.39 的详细指南,包含数据持久化、自定义配置和基本安全设置。

1. 创建项目目录

首先,创建一个独立的目录来存放所有相关文件,避免与其他项目混淆。

bash 复制代码
mkdir mysql-docker
cd mysql-docker

2. 创建 docker-compose.yml 文件

这是核心配置文件,定义了MySQL服务、卷、端口映射等。

yaml 复制代码
version: '3.8'

services:
  mysql:
    image: mysql:8.0.39  # 指定精确版本
    container_name: mysql-8.0.39-container  # 自定义容器名,便于管理
    restart: unless-stopped  # 总是重启,除非手动停止
    environment:
      MYSQL_ROOT_PASSWORD: your_strong_root_password  # !!!务必修改!!!
      MYSQL_DATABASE: my_app_db  # 可选:容器启动时创建的数据库
      MYSQL_USER: my_app_user    # 可选:创建普通用户
      MYSQL_PASSWORD: your_strong_user_password  # !!!务必修改!!!
      TZ: Asia/Shanghai          # 可选:设置容器时区
    ports:
      - "3306:3306"  # 将宿主机的3306端口映射到容器的3306端口
    volumes:
      - mysql_data:/var/lib/mysql  # 持久化数据
      - ./conf/my.cnf:/etc/mysql/conf.d/custom.cnf  # 挂载自定义配置文件
      - ./logs:/var/log/mysql  # 可选:挂载日志目录
    networks:
      - mysql-network  # 加入自定义网络(更安全)

volumes:
  mysql_data:  # 声明一个命名卷,Docker会自动管理其位置

networks:
  mysql-network:  # 声明一个自定义网络
    driver: bridge

3. (可选) 创建自定义配置文件

创建 conf 目录并放入你的 my.cnf 文件,用于覆盖默认的MySQL设置。

bash 复制代码
mkdir -p conf

编辑 conf/my.cnf 文件:

ini 复制代码
[mysqld]
# 服务器字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 默认认证插件 (MySQL 8.0+ 默认使用 caching_sha2_password)
default_authentication_plugin=mysql_native_password

# 自定义其他参数,例如最大连接数、缓冲区大小等
max_connections=200
innodb_buffer_pool_size=256M

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

4. 启动 MySQL 容器

在包含 docker-compose.yml 文件的目录下,运行以下命令来构建并启动服务:

bash 复制代码
# 以后台模式启动 (-d 或 --detach)
docker-compose up -d

# 或者,如果你想在前台启动并查看日志,用于调试
# docker-compose up
# 使用 Ctrl+C 停止后,容器也会停止

5. 管理及常用命令

容器启动后,你可以使用以下命令进行管理:

bash 复制代码
# 查看容器运行状态
docker-compose ps

# 查看MySQL容器的实时日志
docker-compose logs -f mysql

# 停止服务(数据会保留在卷中)
docker-compose down

# 停止并删除数据卷(警告:这会清除所有数据!)
# docker-compose down -v

# 进入MySQL容器内部的bash终端
docker-compose exec mysql bash

# 使用MySQL命令行客户端直接连接(推荐方式)
# 方式一:在宿主机上连接(因为映射了端口)
mysql -h 127.0.0.1 -P 3306 -u root -p
# 然后输入在yml文件中设置的 MYSQL_ROOT_PASSWORD

# 方式二:通过exec在容器内执行mysql命令(无需网络和密码,安全快捷)
docker-compose exec mysql mysql -u root -p

关键配置解释

  1. image: mysql:8.0.39

    • 明确指定版本,避免因拉取 latest 标签而意外升级。
    • Docker Hub 会缓存此版本,如果本地没有会自动拉取。
  2. volumes

    • mysql_data:/var/lib/mysql :这是最重要的部分 ,它将数据库文件存储在名为 mysql_data 的 Docker 管理卷中,即使容器被删除,数据也不会丢失。
    • ./conf/my.cnf:/etc/mysql/conf.d/custom.cnf :将本地配置文件挂载到容器的配置目录。MySQL会自动加载 /etc/mysql/conf.d 目录下所有以 .cnf 结尾的文件。
  3. environment

    • MYSQL_ROOT_PASSWORD必须设置,这是root用户的密码。
    • MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD:可选,用于在启动时自动创建数据库和用户。
  4. ports

    • "3306:3306":将容器服务的3306端口暴露给宿主机。如果宿主机3306端口已被占用,可以改为 "3307:3306"(用宿主机3307端口映射容器3306端口)。
  5. networks

    • 使用自定义网络 mysql-network 可以提高安全性。如果其他服务(如Web应用)也在同一个Compose文件中定义,它们可以通过服务名(mysql)直接通信,而无需向宿主机暴露端口。

安全建议

  • 强烈修改默认密码 :示例中的 your_strong_root_password 一定要换成复杂且唯一的密码。
  • 谨慎暴露端口 :如果MySQL只被其他Docker容器访问,可以不映射端口到宿主机(删除 ports 部分),让服务间通过Docker网络内部通信,更安全。
  • 定期备份 :虽然数据在卷中,但仍需定期备份Docker卷(mysql_data)。
相关推荐
runfarther6 分钟前
CentOS7.5下安装Docker和Docker-Compose,并支持host-gateway特性
docker·docker compose
oMcLin11 分钟前
如何在 RHEL 8.4 上实现高效的 Docker 容器网络配置,优化跨容器的通信速度与可靠性?
docker·容器
人工智能训练1 小时前
UE5中如何解决角色网格体“掉下去”的问题
运维·服务器·windows·容器·ue5
教程分享大师8 小时前
创维E900V22D当贝固件全网通线刷机包 刷机教程开启adb权限及root权限
adb
吉凶以情迁8 小时前
tcl 电视进入开发者模式以及adb进入设置以及各电视打开开发者模式用电脑控制的办法
adb·电脑
阿杰100018 小时前
ADB(Android Debug Bridge)是 Android SDK 核心调试工具,通过电脑与 Android 设备(手机、平板、嵌入式设备等)建立通信,对设备进行控制、文件传输、命令等操作。
android·adb
_Mistletoe9 小时前
adb基础操作及如何使用adb实现设备间的文件传输
adb
XuanRanDev9 小时前
Mumu模拟器12开启ADB调试方法
adb
DigitalOcean11 小时前
DigitalOcean容器注册表推出多注册表支持功能
容器
江湖有缘13 小时前
Jump个人仪表盘Docker化部署教程:从0到 搭建专属导航页
运维·docker·容器