Docker 安装 MySQL

Docker 是一个容器化平台 ,它把应用和它的依赖(如 MySQL、Python、配置文件等)一起打包进一个**标准化的"集装箱"(容器)**里。这个"集装箱"可以在任何安装了 Docker 的服务器上直接运行,无需关心底层操作系统是什么。

可以把它理解为更轻量级的虚拟机:

  • 虚拟机需要模拟整个操作系统,比较笨重(几个 GB)。

  • 容器共享主机操作系统内核,非常轻快(通常几十到几百 MB),启动时间以秒计算。

用 Docker 安装 MySQL

对于"搭建一个能用的 MySQL 环境"这个任务,用 Docker 非常方便。 主要体现在这几个方面:

对比 传统安装 Docker 安装
安装步骤 需要下载、安装、配置、启动服务,步骤较多 一条命令拉取镜像,一条命令启动容器
环境隔离 直接装在系统里,可能与其他软件冲突 运行在独立容器里,互不干扰
版本管理 换版本需要卸载重装 拉取不同版本的镜像,或改一下版本号重启
卸载 容易卸载不干净 删除容器和镜像即可,不留痕迹
学习成本 对新手有一定门槛 需要了解基本的 Docker 命令,但上手并不难

用 Docker 安装 MySQL 的步骤

第一步:拉取 MySQL 镜像(相当于下载安装包)

复制代码
# 拉取最新版本的 MySQL 8.0
docker pull mysql:8.0

第二步:启动 MySQL 容器(相当于安装并启动服务)

复制代码
docker run -d \
  --name mysql_demo \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v mysql_data:/var/lib/mysql \
  mysql:8.0

参数说明:

参数 作用
-d 后台运行(守护模式),不占用当前终端
--name mysql_demo 给容器命名,方便后续管理
-e MYSQL_ROOT_PASSWORD=123456 通过环境变量设置 root 密码,这是创建容器时必须配置的
-p 3306:3306 端口映射:将容器内部的 3306 端口映射到宿主机的 3306 端口,这样你的电脑就能通过 localhost:3306 访问它
-v mysql_data:/var/lib/mysql 数据持久化:将容器内的 MySQL 数据目录挂载到一个名叫 mysql_data 的卷上,即使容器被删除,数据依然保留

第三步:连接到 MySQL

复制代码
# 方法1:进入容器内部
docker exec -it mysql_demo mysql -uroot -p
# 输入密码 123456

# 方法2:使用宿主机的客户端工具(如 Navicat、DBeaver)
# 连接地址:localhost,端口:3306,用户名:root,密码:123456

常用管理命令

复制代码
# 停止容器
docker stop mysql_demo

# 启动容器
docker start mysql_demo

# 查看容器日志(排查错误)
docker logs mysql_demo

# 删除容器(注意:数据卷需要单独删除)
docker rm mysql_demo

# 删除数据卷(会丢失所有数据)
docker volume rm mysql_data

# 查看数据卷列表
docker volume ls

注意事项

  1. 密码配置 :MYSQL_ROOT_PASSWORD 是必需的,容器没有它就无法启动。

  2. 端口冲突 :如果宿主机 3306 端口已被占用,可以修改映射,比如 -p 3307:3306,之后连接时端口用 3307。

  3. 数据持久化 :建议用 -v 挂载卷保存数据,否则容器一删,数据就没了。

  4. 多版本共存:可以同时运行 MySQL 5.7 和 8.0 两个容器,只要映射不同的宿主机端口就行。

情况 建议
平时习惯用包管理器(如 apt-get、Homebrew) 传统安装更顺手,对新手也更直观
想在本地快速测试多个 MySQL 版本,或者快速搭一个环境用完就扔 Docker 最合适
自己是初学者,想先弄懂 MySQL 本身的配置逻辑 传统安装能让你更清楚配置文件在哪,日志怎么查
自己常用的工具链已经依赖 Docker 了 直接选 Docker,减少学习负担

如果还不熟悉 Docker 命令,用传统安装可能更省心;如果打算长期用容器来管理开发环境,Docker 的方式长期来看会更方便。两种方式没有绝对好坏,选自己顺手、能快速跑起来的就好。

相关推荐
闲云野鹤在人间9 小时前
Kubernetes Service 与 kube-proxy 详解
云原生·容器·kubernetes
说实话起个名字真难啊10 小时前
实战docker部署dify及注意点
运维·docker·容器
闲云自留地11 小时前
K8s Service 全解:服务发现、四种类型、会话保持、金丝雀发布一篇通
容器·kubernetes·服务发现
choumin12 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
Starry-sky(jing)14 小时前
crane 下载镜像:不连接 Docker,3 步准备并校验 ARM64 离线包
运维·docker·arm64·crane
对象存储与RustFS15 小时前
GPU 在空转等数据?PyTorch 训练集进 RustFS 的三种接法
后端·docker·云原生
可涵不会debug18 小时前
超级马里奥常驻极空间以后怎么打开?Docker运行游戏页面,手机电脑都能从浏览器进入
游戏·docker·智能手机
姜鱼问生1 天前
网页一片白?Docker 跑 Nginx 读不到文件,403 Forbidden 排查实录
nginx·docker·容器
\光辉岁月/2 天前
2.spring5-IOC
java·容器·ioc·注解
ms72wx2 天前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker