一.需求说明
我们先来看一个需求:

首先查看mysql容器,是否有数据卷挂载。我们之前是没有对mysql容器进行数据卷挂载的。
docker inspect mysql
使用该命令可以查看容器的具体信息:
"Mounts": [{"Type": "volume","Name": "65e9f00956e191fe2aa144ace8f03904e738945d0b6d40cafdb3292a0097d4c3","Source": "/var/lib/docker/volumes/65e9f00956e191fe2aa144ace8f03904e738945d0b6d40cafdb3292a0097d4c3/_data","Destination": "/var/lib/mysql","Driver": "local","Mode": "","RW": true,"Propagation": ""}],
可以找到Mounts里面展示了挂载信息。其中Source目录是在宿主机上的挂载路径。而Destination是在容器内部的路径。容器内该路径“/var/lib/mysql”是mysql容器的数据存储目录。因为mysql要不断的进行数据存储。因此其存储数据会不断增加。容器会不断变大。如果不做挂载,容器将来想要做迁移会非常麻烦。因此挂载是合理的。
Name是数据卷的名字,而这个名字不是我们起的,是自动生成的。这种由容器自动生成的数据卷因此又叫做匿名卷。我们不想使用这个名字,因为太长了很不方便记忆和使用。
假如我们现在要针对mysql进行版本升级,要把旧的mysql删掉。创建新的容器。删除后数据卷还在,数据还在。创建新的mysql容器,生成卷的名字就变了,原来的数据在旧的卷中就丢失了,等于只做了版本升级而没有进行数据迁移。
因此我们要使用本地目录挂载。将mysql容器挂载到本地目录。挂载到任何你想要挂载的地方。即宿主机和容器内目录直接挂载。
二.本地目录挂载

请注意,在挂载本地目录时一定要以./或者/开头而不能以字段名开头,否则将会被识别成数据卷而非目录。
我们首先创建要挂载的目录和文件夹。
mkdir mysql
进入mysql目录下创建data,conf,init用来挂载mysql数据目录、配置文件和初始化脚本。
mkdir conf
mkdir data
mkdir init
目录创建好了,那么容器内的哪些目录要和这些新创建的目录进行挂载呢?我们在官方文档中进行查阅。
配置文件目录(该目录也可以通过容器具体信息查看):

数据存储目录:

初始化目录:

明确了挂载点和被挂载的路径,我们就可以执行docker run命令进行本地目录的挂载了。
首先我们删除原来的MySQL容器,然后进行本地目录挂载。
# 1.删除原来的MySQL容器
docker rm -f mysql# 2.进入root目录
cd ~

我们首先将准备好的两个文件放入挂载点目录中。

接着运行命令:
# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \mysql
挂载过后,有很多新数据产生。说明挂载成功的挂载到本地目录。

以上就容器本地目录挂载的方式。