docker 安装mysql(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在现代软件开发中,Docker 已经成为容器化部署和环境管理的重要工具。MySQL 作为广泛使用的开源关系型数据库,其安装和配置常常需要开发者面对复杂的环境依赖问题。通过 Docker 安装 MySQL,可以将数据库运行在轻量级的容器中,实现快速部署、环境隔离和版本一致性。本文将从零开始,分步骤讲解如何使用 Docker 安装和配置 MySQL,并通过实际案例帮助读者理解关键操作。无论是编程初学者还是中级开发者,都能通过本文掌握这一技能,为后续的数据库开发或项目部署打下基础。


理解 Docker 和 MySQL 的组合优势

Docker 的核心理念是“一次构建,到处运行”,它将应用程序及其依赖打包到一个独立的容器中,避免了不同环境之间的兼容性问题。而 MySQL 作为数据库系统,其安装通常涉及配置文件、端口、用户权限等复杂设置。两者的结合,可以简化 MySQL 的部署流程,同时提供以下优势:

  1. 环境一致性:开发者可以在不同操作系统(如 Windows、macOS、Linux)上运行相同的 MySQL 版本。
  2. 快速启动:通过 Docker 命令即可启动或停止数据库服务,无需手动安装依赖。
  3. 隔离性:每个容器内的 MySQL 实例相互独立,避免与其他项目或服务产生冲突。

比喻:Docker 就像一个集装箱码头,每个集装箱(容器)装载着预配置的 MySQL 系统,开发者只需将集装箱运到任何港口(服务器或本地环境),即可快速展开使用。


步骤一:安装 Docker

在开始之前,需要确保本地或服务器上已安装 Docker。以下是主流系统的安装方法:

Windows 和 macOS 用户

  1. 访问 Docker 官方网站 ,下载并安装 Docker Desktop。
  2. 安装完成后,打开 Docker Desktop 应用,确保 Docker 服务处于运行状态。

Linux 用户

以 Ubuntu 系统为例,执行以下命令:

sudo apt-get update

sudo apt-get install docker.io

sudo systemctl start docker

验证安装:运行 docker --version,若显示 Docker 版本号,则安装成功。


步骤二:拉取 MySQL 官方镜像

Docker Hub 是一个开源镜像仓库,提供了官方认证的 MySQL 镜像。执行以下命令下载最新稳定版:

docker pull mysql:latest

参数说明

  • mysql:镜像名称,对应官方 MySQL 维护的镜像。
  • latest:标签,表示最新版本。也可指定具体版本,例如 mysql:8.0

比喻:拉取镜像如同在集装箱码头领取一个标准的“MySQL 货柜”,内部已预装好数据库软件和配置。


步骤三:运行 MySQL 容器

使用 docker run 命令启动 MySQL 容器,并指定必要的参数:

docker run --name mysql-container \  
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \  
  -p 3306:3306 \  
  -d \  
  mysql:latest

参数解析

  • --name mysql-container:为容器指定名称,方便后续管理。
  • -e MYSQL_ROOT_PASSWORD:设置 MySQL 的 root 用户密码(必须指定)。
  • -p 3306:3306:将容器的 3306 端口(MySQL 默认端口)映射到宿主机的 3306 端口。
  • -d:后台运行容器。

验证运行状态

docker ps  # 查看所有运行中的容器  
docker logs mysql-container  # 查看容器日志(用于排查启动问题)

步骤四:连接 MySQL 数据库

容器启动后,可以通过以下方式连接到 MySQL:

方法一:通过 Docker 容器内的命令行

进入运行中的容器:

docker exec -it mysql-container bash  

然后在容器内执行:

mysql -u root -p  # 输入之前设置的密码

方法二:通过本地客户端工具

使用 MySQL Workbench、Navicat 等工具,配置以下参数:

  • 主机名localhost(若容器运行在远程服务器,则填服务器 IP)
  • 端口3306
  • 用户名root
  • 密码my-secret-pw(替换为实际设置的密码)

关键知识点:数据持久化

默认情况下,Docker 容器停止后,其内部数据会丢失。为避免这一问题,需将 MySQL 的数据目录挂载到宿主机的持久化存储中。

修改运行命令,添加数据卷

docker run --name mysql-container \  
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \  
  -p 3306:3306 \  
  -v /my/own/datadir:/var/lib/mysql \  # 挂载数据卷  
  -d \  
  mysql:latest

参数说明

  • -v:指定宿主机目录(/my/own/datadir)与容器内的 MySQL 数据目录(/var/lib/mysql)绑定。

比喻:数据卷就像在集装箱外部加装了一个固定储物柜,即使集装箱被移动或关闭,数据仍安全存储在宿主机上。


高级配置:自定义 MySQL 配置文件

若需修改 MySQL 的配置(如调整内存、优化性能),可通过挂载自定义的 my.cnf 文件实现:

步骤

  1. 在宿主机上创建配置文件 my.cnf,内容示例:
[mysqld]
max_connections = 500
innodb_buffer_pool_size = 1G
  1. 修改 docker run 命令,添加配置文件挂载:
docker run ... \  
  -v /path/to/my.cnf:/etc/mysql/conf.d/my.cnf \  
  ...

常见问题与解决方案

问题 1:端口冲突

若宿主机的 3306 端口已被占用,Docker 会报错。解决方法:

  • 修改 -p 参数,使用其他端口:-p 3307:3306
  • 关闭本地的 MySQL 服务:sudo systemctl stop mysql

问题 2:忘记 root 密码

可通过重置密码解决:

  1. 停止并删除现有容器:
docker stop mysql-container  
docker rm mysql-container  
  1. 重新运行容器时,通过环境变量指定新密码:
docker run ... \  
  -e MYSQL_ROOT_PASSWORD=new-password \  
  ...

实战案例:部署多版本 MySQL

假设需要同时运行 MySQL 8.0 和 5.7 版本:

步骤

  1. 拉取不同版本的镜像:
docker pull mysql:8.0  
docker pull mysql:5.7  
  1. 启动两个容器,指定不同端口和名称:
docker run --name mysql8 \  
  -e MYSQL_ROOT_PASSWORD=pass8 \  
  -p 3308:3306 \  
  -d mysql:8.0  

docker run --name mysql57 \  
  -e MYSQL_ROOT_PASSWORD=pass57 \  
  -p 3307:3306 \  
  -d mysql:5.7  

此时,可通过 localhost:3308localhost:3307 分别访问两个版本的 MySQL。


结论

通过 Docker 安装 MySQL,开发者可以高效、安全地管理数据库环境,避免传统安装中的复杂配置问题。本文详细讲解了从 Docker 安装到 MySQL 容器运行的全流程,并通过数据持久化、自定义配置等进阶操作,帮助读者应对实际开发中的多样化需求。

对于初学者,建议先通过本文步骤完成基础部署,并逐步尝试多实例、配置优化等实践;中级开发者可结合自身项目需求,进一步探索 Docker 的网络配置、服务编排(如 Docker Compose)等高级功能。掌握这一技能后,您将能够更灵活地构建和维护基于 MySQL 的应用程序,提升开发效率与环境可靠性。

最后提醒:在生产环境中,务必通过数据卷备份、密码加密等措施保障数据库安全。Docker 的灵活性与 MySQL 的稳定性相结合,将为您的技术栈带来显著的提升!

最新发布