千家信息网

MySQL容器化详细教程

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,前言:上篇文章介绍了Docker工具的安装及常用命令使用。本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker里部
千家信息网最后更新 2026年10月31日MySQL容器化详细教程

前言:

上篇文章介绍了Docker工具的安装及常用命令使用。本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker里部署MySQL实例操作简单,不需要考虑操作系统等依赖差异,而且可以多实例部署,比如说我们原来服务器有安装MySQL5.7,我们想再运行MySQL8.0实例的话只需要用Docker启动MySQL8.0镜像即可。下面我们就来介绍下如何用Docker启动MySQL实例。

▍1.拉取MySQL官方镜像

在上篇文章中我们介绍过Docker中三个基本的概念:镜像,容器,仓库。要用在Docker中部署MySQL,第一步要做的是从官方仓库中拉取MySQL镜像,这里我们从Docker Hub中拉取MySQL镜像。进入Docker Hub,搜索MySQL,可以看到如下画面,其中有不同版本的镜像及使用介绍。

cdn.nlark.com/yuque/0/2019/png/119537/1572918549506-2b81bb36-1574-4aea-bc6b-9bb21fd1178d.png">

比如我们想拉取MySQL5.7版本及8.0版本的镜像,可以做如下操作:

# 拉取5.7及8.0版本镜像 稍等片刻即可拉取成功docker pull mysql:5.7.23docker pull mysql:8.0.18# 查看镜像docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmysql               8.0.18              c8ee894bd2bd        2 weeks ago         456MBmysql               5.7.23              1b30b36ae96a        12 months ago       372MB

其实MySQL官方镜像也存在一些缺陷,比如说时区不是北京时间,系统字符集问题等。下面以MySQL5.7.23版本镜像为基础,展示下如何修改构建镜像。

# 创建Dockerfile 主要作用是更改系统字符集及时区 内容如下:cat Dockerfile FROM mysql:5.7.23MAINTAINER wangRUN echo "alias ls='ls --color=auto'" >> /root/.bashrc \    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeENV LANG=C.UTF-8# 构建镜像docker build -t my-mysql:5.7.23 . Sending build context to Docker daemon  2.048kBStep 1/4 : FROM mysql:5.7.23 ---> 1b30b36ae96aStep 2/4 : MAINTAINER wang ---> Running in a7cc94f95cc7Removing intermediate container a7cc94f95cc7 ---> d9590ed98de5Step 3/4 : RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc     && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ---> Running in e698bfdb3817Removing intermediate container e698bfdb3817 ---> 31c9ed9103c5Step 4/4 : ENV LANG=C.UTF-8 ---> Running in eefa296fef94Removing intermediate container eefa296fef94 ---> 10aa697936e9Successfully built 10aa697936e9Successfully tagged my-mysql:5.7.23# 再次查看镜像即可找到我们新构建的镜像docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED              SIZEmy-mysql            5.7.23              10aa697936e9        About a minute ago   372MBmysql               8.0.18              c8ee894bd2bd        2 weeks ago          456MBmysql               5.7.23              1b30b36ae96a        12 months ago        372MB
▍2.启动MySQL实例

这里为大家介绍如何利用上面构建的镜像来运行MySQL实例,MySQL容器化其实也需要映射端口,数据持久化,加载配置文件等操作,下面给大家演示下具体启动操作。

2.1 创建数据持久化路径及配置文件

# 创建配置文件目录及数据目录mkdir -p /data/mysql57/{cnf,data}# 添加配置文件my.cnfcd /data/mysql57/cnf/vim my.cnf# 配置文件内容如下,可自定义[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlserver-id = 33061max_connections = 1000sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONlower_case_table_names=1innodb_file_per_table = 1log_timestamps=SYSTEMcharacter-set-server = utf8max_allowed_packet = 32Msort_buffer_size = 4Mread_buffer_size = 4Mjoin_buffer_size = 4Mbinlog_cache_size = 4Mtmp_table_size = 96Mmax_heap_table_size = 96Minnodb_buffer_pool_size = 512M#logsslow_query_log = 1slow_query_log_file = /var/lib/mysql/slow.loglong_query_time = 3log-bin = /var/lib/mysql/binlogbinlog_format = rowexpire_logs_days = 15log_bin_trust_function_creators = 1

2.2 docker run运行MySQL实例

# 一条命令启动一个MySQL实例docker run -itd -p 33061:3306 --name mysql57 --hostname=mysql57 -v /data/mysql57/cnf:/etc/mysql -v /data/mysql57/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=Asdf@123456  my-mysql:5.7.23# 解释下各个参数的含义-d: 后台运行容器,并返回容器ID-i: 以交互模式运行容器,通常与 -t 同时使用-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用-p: 指定端口映射,格式为:主机(宿主)端口:容器端口--name="mysql57": 为容器指定一个名称--hostname=mysql57: 指定容器的hostname-v: 绑定一个卷--privileged=true: 以特权方式启动容器

2.3 检查容器状态

# 查看容器状态docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES04cd3d99d5cb        my-mysql:5.7.23     "docker-entrypoint.s…"   13 seconds ago      Up 11 seconds       33060/tcp, 0.0.0.0:33061->3306/tcp   mysql57# 进入容器内docker exec -it mysql57 /bin/bash 或 docker exec -it [CONTAINER ID] /bin/bash
▍3.其他相关操作

到此为止,我们已经在Docker中成功运行了MySQL实例,其实还没有结束,还有好多操作还没讲,比如如何备份恢复,怎么更改配置等,下面简单介绍下这类相关操作。

  • 备份恢复
# 备份docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all-databases.sql# 恢复docker exec -i mysql57 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /tmp/all-databases.sql
  • 更改配置
# 更改配置只需要修改宿主机 /data/mysql57/cnf/my.cnf 文件,然后重启容器即可docker restart mysql57

如果你想在本地通过工具连接容器内MySQL的话,可以使用宿主机ip加映射端口来连接。比如我们上面创建的MySQL实例就可以通过宿主机ip+30661端口来连接,若无法连接请检查网络及服务器防火墙。

总结:

本文主要介绍在Docker中部署MySQL的方法步骤,体验下来你会发现非常简单方便,而且可以大规模多实例部署。假如你想体验最新版本8.0.18的话,可以自己部署下试试看,其实还可以更简单,比如说直接运行docker run mysql:5.7.23 即可启动一个实例,但是为了更加规范,还是建议将配置文件及数据目录都挂载到宿主机本地。

参考资料:

  • https://hub.docker.com/_/mysql
镜像 容器 实例 运行 配置 文件 版本 端口 宿主 宿主机 数据 备份 官方 文章 比如说 目录 系统 成功 上篇 仓库 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 互联网的科技 互联网通讯科技 互联网金融 金融科技 互联网与新科技 互联网科技论坛 互联网科技公司名称 科技大学互联网专业好不好 互联网公司会议桌创意科技软装饰 互联网教育科技公司vipkid 互联网软件和科技 杭州壁岐互联网科技有限公司 深圳市优智互联网科技有限公司 互联网科技人工智能实验室 中国科技创新与世界互联网大会 互联网金融科技元年 江苏互联网科技小贷 广州梦谷互联网科技有限公司领导 福仕德教育科技互联网 10位科技互联网大佬 河南云网互联网络科技有限公司 美国互联网前沿科技 互联网科技素材视频竖屏 中正互联网科技招聘 创业天下互联网科技有限公司 汽车互联网创新科技园 浙江互联网科技研学营 广州市恰铎互联网科技有限公司 科技赋能视角下互联网保险发展 中国主要互联网科技公司
0