docker安装mysql并实现数据卷挂载的示例代码

 更新时间:2024年10月24日 09:36:48   作者:__imperfect__  
本文介绍了如何通过Docker安装MySQL并实现了数据卷挂载,详细说明了创建容器、配置挂载以及验证数据持久性的步骤,对于需要在Docker环境下部署MySQL的用户非常有帮助

1.下载mysql的镜像

我们先通过docker命令docker pull mysql:latest下载docker的镜像

这里我们可以在mysql:后加上我们想要的版本,这里如果没有指定版本将会下载最新的latest版本

2.数据卷挂载

在创建mysql容器之前,我们先了解一下什么时数据卷挂载:

首先,每当我们创建一个容器,容器内部的文件和宿主机文件是分离开的,这里会有两个比较重要的问题:

  • 我们如果要直接操作mysql容器中的文件会很麻烦,在容器中目录层级可能会很复杂
  • 我们如果要对mysql进行升级或者其他操作,那么数据卷会随之丢失,我们的数据库中的数据也会随之一起丢失

那么我们有什么方法去解决呢?当然就是数据卷挂载,我们先创建一个mysql容器来体验一下什么是容器

docker run -d \
--name mysql-demo \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql​

我这里因为3306端口已经有一个mysql容器,所以我用3307端口来演示

在这里插入图片描述

下面逐条来解释一下每一条命令的含义

# 创建并运行一个容器,-d 是让容器在后台运行 
docker run 

# 给容器起一个名字(mysql),必须唯一
--name mysql

# 设置端口映射 <宿主机端口>:<容器内端口>
-p 3306:3306

# 设置环境变量
-e KEY=VALUE

# 指定运行时的镜像的名字,一般由两部分组成:[repository]:[tag],其中repostory就是镜像名,tag是镜像的版本,没有指定tag时,默认是latest,代表最新版本的镜像
mysql

接下来可以通过docker ps来查看我们的已经启动的容器

在这里插入图片描述

通过docker inspect mysql-demo可以查看我们mysql-demo容器的详细信息,我们这里找到Mounts这里,这里就是我们mysql-demo容器的详细挂载信息。

在这里插入图片描述

看到这里你可能会问,我还不会设置容器的数据卷挂载,为什么他这里直接自动挂载了呢?

这是因为我们在创建容器的时候,docker会帮我们自动生成一个匿名卷,然后和我们的mysql容器进行挂载,我们可以docker volume ps通过查看所有的数据卷信息,对应上图发现,这个就是我们对应的数据卷,我们mysql容器的数据都会存放在这里。

在这里插入图片描述

但是这名字也太长了,我们后期也不好维护,我们可以在创建容器的时候就指定数据卷的挂载
先将刚刚创建的mysql容器删除docker rm -f mysql-demo

现在我们可以挑选一个地方来存储我们的数据卷,我这里以/root目录下来演示,先创建一个目录,并进入该目录

mkdir mysql-demo

cd mysql-demo

创建conf、data、init目录

mkdir conf
mkdir data
mkdir init

进入conf目录

cd conf

创建并编写一个.cnf配置文件,只要后缀是cnf即可,名字可以任意,我这里命名为custom.cnf

vi custom.cnf

编写内容如下,作用:在linux系统中查看数据库内容出现中文乱码

[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

到这里我们可以直接来创建并运行MySQL容器

docker run -d \
--name mysql-demo \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql-demo/data:/var/lib/mysql \
-v /root/mysql-demo/init:/docker-entrypoint-initdb.d \
-v /root/mysql-demo/conf:/etc/mysql/conf.d \
mysql

这次我们的命令和上面不同的是多出了三个-v 开头的命令,这就是指定数据卷目录挂载的命令

我们可以再次查看mysql容器的挂载信息

docker inspect mysql-demo

在这里插入图片描述

到这里,我们就实现了数据卷的挂载,那么到底有什么用呢?

3.为什么要实现数据卷挂载?

实现数据卷挂载,只要我们每次创建容器挂载的是同一目录,那么我们就可以将数据保留,不会造成数据的丢失我们可以先进入mysql容器docker exec -it mysql-demo bash然后连接mysqlmysql -u root -p123接着我们可以创建一个数据库create database mysql_test;查看当前所有的数据库show databases;

在这里插入图片描述

我们退出mysqlexit再推出mysql容器exit删除刚刚创建的mysql容器docker rm -f mysql-demo现在我们可以通过docker ps -a命令来查看当前的所有容器,发现mysql-demo已经被删除,我们再次运行上面的创建容器命令,这里我们可以给我们的容器改一个名称

docker run -d \
--name mysql-demo2 \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql-demo/data:/var/lib/mysql \
-v /root/mysql-demo/init:/docker-entrypoint-initdb.d \
-v /root/mysql-demo/conf:/etc/mysql/conf.d \
mysql

进入mysql容器,发现我们之前创建的mysql_test表还在,相信你也对数据卷挂载有了一个清晰的认识

在这里插入图片描述

到此这篇关于docker安装mysql并实现数据卷挂载的示例代码的文章就介绍到这了,更多相关docker mysql数据卷挂载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 用docker一键部署前后端分离项目的详细流程

    用docker一键部署前后端分离项目的详细流程

    这篇文章主要介绍了如何用docker一键部署前后端分离项目的详细流程,通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • win7下docker安装与报错问题的解决方法

    win7下docker安装与报错问题的解决方法

    这篇文章主要为大家详细介绍了win7下docker安装与报错问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 详解Docker Swarm服务发现和负载均衡原理

    详解Docker Swarm服务发现和负载均衡原理

    这篇文章主要介绍了详解Docker Swarm服务发现和负载均衡原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • docker exec执行多个命令的操作

    docker exec执行多个命令的操作

    这篇文章主要介绍了docker exec执行多个命令的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker下mysql设置字符集的方法

    Docker下mysql设置字符集的方法

    这篇文章主要介绍了Docker下的mysql设置字符集的方法,需要的朋友可以参考下
    2018-03-03
  • docker.service启动报错的一次排查详解

    docker.service启动报错的一次排查详解

    这篇文章主要介绍了docker.service启动报错的一次排查详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker Compose 搭建简单的Python网络应用程序(步骤详解)

    Docker Compose 搭建简单的Python网络应用程序(步骤详解)

    在这个页面上,你可以建立一个简单的Python网络应用程序,运行在Docker Compose上,这篇文章主要介绍了Docker Compose 搭建简单的Python网络应用程序,需要的朋友可以参考下
    2022-07-07
  • docker编译IJKPlayer播放器记录详解

    docker编译IJKPlayer播放器记录详解

    这篇文章主要为大家介绍了docker编译IJKPlayer播放器记录详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 如何打jar包为Docker镜像并部署

    如何打jar包为Docker镜像并部署

    这篇文章主要介绍了打jar包为Docker镜像并部署,通过将应用程序打包为Docker镜像,并在容器中运行,可以提供更高的灵活性、可移植性和可靠性,简化应用程序的部署和管理,提升开发和运维效率,降低系统运行成本,需要的朋友可以参考下
    2023-11-11
  • Docker容器连接相互通信的实现

    Docker容器连接相互通信的实现

    这篇文章主要介绍了Docker容器连接相互通信的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论