docker-compose安装MySQL8.0.39全过程

 更新时间:2025年10月24日 09:18:47   作者:会飞的土拨鼠呀  
这篇文章主要介绍了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

关键配置解释

image: mysql:8.0.39

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

volumes

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

environment

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

ports

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

networks

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

安全建议

  • 强烈修改默认密码:示例中的 your_strong_root_password 一定要换成复杂且唯一的密码。
  • 谨慎暴露端口:如果MySQL只被其他Docker容器访问,可以不映射端口到宿主机(删除 ports 部分),让服务间通过Docker网络内部通信,更安全。
  • 定期备份:虽然数据在卷中,但仍需定期备份Docker卷(mysql_data)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker镜像下载的常见问题及解决办法

    Docker镜像下载的常见问题及解决办法

    在使用Docker时,用户常遇到下载镜像错误,如TLS握手超时、请求取消等,主要由网络状况、配置问题或DockerHub服务导致,本文就来介绍了一下几种解决方法,感兴趣的可以了解一下
    2024-10-10
  • docker-compose基于MySQL8部署项目的实现

    docker-compose基于MySQL8部署项目的实现

    这篇文章主要介绍了docker-compose基于MySQL8部署项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Docker 镜像传输的实现步骤

    Docker 镜像传输的实现步骤

    本文主要介绍了Docker 镜像传输的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • 快速解决Docker镜像无法拉取的问题

    快速解决Docker镜像无法拉取的问题

    因国内网络问题,默认Docker镜像源可能访问缓慢或失败,通过配置镜像加速器(如阿里云、华为云等),修改daemon.json文件并重启服务,可显著提升镜像拉取速度,确保顺利获取镜像
    2025-08-08
  • Docker入门与进阶(基础+实战+进阶+Compose+Swarm)超详细版

    Docker入门与进阶(基础+实战+进阶+Compose+Swarm)超详细版

    本文详细介绍了Docker的基础概念、安装配置、镜像与容器操作,包括数据卷、Dockerfile构建、网络管理、Docker Compose单机部署和Swarm集群部署,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • 一文带你了解Docker网络模型

    一文带你了解Docker网络模型

    Docker是一种容器化平台,它提供了一种轻量级的虚拟化解决方案,使得应用程序能够以容器的形式运行,Docker网络模型基于Linux内核的网络命名空间和虚拟以太网桥技术,本文就给大家详细介绍一下Docker 网络模型,需要的朋友可以参考下
    2023-07-07
  • docker保存镜像到本地并加载本地镜像文件详解

    docker保存镜像到本地并加载本地镜像文件详解

    平常我们下载docker镜像会通过配置国内源来加速下载,但是有时候会有另外的需求,比如某个机器不能联网,我们就需要从其他机器下载,打包后,拷贝到这个机器,下面这篇文章主要给大家介绍了关于docker保存镜像到本地并加载本地镜像文件的相关资料,需要的朋友可以参考下
    2022-08-08
  • 使用docker部署django的详细步骤

    使用docker部署django的详细步骤

    当用Django框架开发的网站项目完成后上线的话可以用物理主机、虚拟机来部署,也可以容器,下面这篇文章主要给大家介绍了关于使用docker部署django的详细步骤,需要的朋友可以参考下
    2022-08-08
  • Spring Boot使用Docker分层打包的设置方法

    Spring Boot使用Docker分层打包的设置方法

    Spring Boot 现在支持分层打包技术了, 我们也来用一用, 加速Docker打包, 构建的时候速度也会非常快.本文重点给大家介绍Spring Boot使用Docker分层打包的设置方法,感兴趣的朋友一起看看吧
    2021-08-08
  • 如何在docker容器内部安装kibana分词器

    如何在docker容器内部安装kibana分词器

    这篇文章主要介绍了如何在docker容器内部安装kibana分词器,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论