当前位置: 首页 > news >正文

docker-compose 安装MySQL8.0.39

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

1. 创建项目目录

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

mkdir mysql-docker
cd mysql-docker

2. 创建 docker-compose.yml 文件

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

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设置。

mkdir -p conf

编辑 conf/my.cnf 文件:

[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 文件的目录下,运行以下命令来构建并启动服务:

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

5. 管理及常用命令

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

# 查看容器运行状态
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)。
http://www.dtcms.com/a/441763.html

相关文章:

  • Go语言入门(18)-指针(上)
  • Django ORM - 聚合查询
  • 【STM32项目开源】基于STM32的智能老人拐杖
  • YOLO入门教程(番外):卷积神经网络—汇聚层
  • 网站改版一般需要多久智慧团建学生登录入口
  • Dotnet接入AI通过Response创建一个简单控制台案例
  • 【论文笔记】2025年图像处理顶会论文
  • 用 Maven 配置 Flink 从初始化到可部署的完整实践
  • 做职业规划的网站seo学院
  • 怎么建优惠券网站太原seo排名外包
  • jmeter中java.net.ConnectException: Connection refused: connect
  • “十四五”科技冲锋:迈向科技强国的壮阔征程
  • 使用 Python 进行自然语言处理的完整初学者指南
  • 框架系统的多维赋能——论其对自然语言处理深层语义分析的影响与启示
  • HCIP 和 HCIE到底是报班还是自学好?
  • 网站建设要多少钱国外服装设计网站
  • Spring配置文件XML验证错误全面解决指南:从cvc-elt.1.a到找不到‘beans‘元素声明
  • 做美食视频网站有哪些网架公司招聘施工队伍
  • Qwen3-Coder 实战:从 0 到 1 开发商业级 API 平台,过程开源!
  • 知识点-红帽Linux入门
  • 《C++进阶之C++11》【异常】
  • 电商网站怎么推广福州短视频seo获客
  • Java 高并发多线程 “ThreadLocal” 面试清单(含超通俗生活案例与深度理解)
  • Linux网络部分—网络层
  • 30.渗透-.Kali Linux下载和安装
  • 浪浪山 iOS 奇遇记:给 APP 裹上 Liquid Glass “琉璃罩”(上集)
  • 博主自创项目:专属秘密表白源码(C语言版)(可自定义表白对象)
  • 网站建设的软硬件平台西宁做手机网站的公司
  • Traefik实现Ingress-IngressRoute-IngressRouteTCP-IngressRouteUDP及Traefik高级流量治理
  • default interface 概念及题目