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 的方式长期来看会更方便。两种方式没有绝对好坏,选自己顺手、能快速跑起来的就好。

相关推荐
更深兼春远1 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
小白的码BUG之路5 小时前
Docker -- No space left on device
运维·docker·容器
wzq11_6665 小时前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes
程序员老陆6 小时前
Docker 命令全景指南:从镜像构建到生产运维
运维·docker·容器
灯澜忆梦16 小时前
【minio】#1 | 简介与安装
docker·对象存储·minio
江湖有缘1 天前
3款开源绘图工具整理合集,可Docker一键部署!
docker·容器·开源
TTATTC1 天前
告别协议选型内耗:深入拆解微服务“内部 gRPC + 边界 REST”混合通信架构与 Envoy 转码实战
docker·开源
小匠石钧知1 天前
06_在k8s集群中安装MetalLB实现LoadBalancer
云原生·容器·kubernetes·service·loadbalancer·metallb
光依旧2 天前
PageIndex没翻车,翻车的是我的解析器
docker·langchain·大模型·向量数据库·pdf解析·rag·pageindex
谢亮_vipxieliang2 天前
容器排障实战手册:从日志到内核的分层排障
docker·云原生·容器·eureka