目录
1、什么是数据卷
2、数据卷操作命令
2.1、创建和查找数据卷
2.2、小结
3、容器挂载到数据卷
3.1、挂载数据卷命令
3.2、案例-给nginx挂载数据卷
4、容器挂载到宿主机目录
1、去dockerhub搜索mysql并拉取镜像编辑
2、创建/mysql/data和/mysql/conf两个目录作为mysql容器的挂载点
3、在DockerHub查看mysql镜像的详细资料,通过Mysq镜像创建并运行mysql器
4、测试远程连接mysql容器
1、什么是数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了。
2、数据卷操作命令
数据卷操作的基本语法:docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
- create 创建一个volume
- inspect 显示一个或多个volume的信息
- ls 列出所有的volume
- prune 删除未使用的volume
- rm 删除一个或多个指定的volume
2.1、创建和查找数据卷
1、创建数据卷
docker volume create html
2、查看所有数据卷
docker volume ls
3、 查看数据卷详细信息卷
docker volume inspect html

我们创建的html这个数据卷关联的宿主机目录为`/var/lib/docker/volumes/html/_data`目录。
2.2、小结
数据卷的作用:
- 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
数据卷操作:
- docker volume create:创建数据卷
- docker volume ls:查看所有数据卷
- docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
- docker volume rm:删除指定数据卷
- docker volume prune:删除所有未使用的数据卷
3、容器挂载到数据卷
3.1、挂载数据卷命令
我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

这里的-v就是挂载数据卷的命令:
-v html:/root/htm:把html数据卷挂载到容器内的/root/html这个目录中
3.2、案例-给nginx挂载数据卷
1、将刚刚创建的html数据卷挂载到mynginx容器的 /usr/share/nginx/html/目录下
docker run --name mynginx -v html:/usr/share/nginx/html -p 8080:80 -d nginx

html数据卷所在位置,并修改HTML内容

修改完成后访问:

4、容器挂载到宿主机目录
容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:
- 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录
- 直接挂载模式:宿主机目录 ---> 容器内目录
大多数情况下不需要主动的创建数据卷
提示:目录挂载与数据卷挂载的语法是类似的:
-v [ 宿主机目录 ]:[ 容器内目录 ]
-v [ 宿主机文件 ]:[ 容器内文件 ]
案例:给MySQL挂载宿主机目录
1、去dockerhub搜索mysql并拉取镜像
2、创建/mysql/data和/mysql/conf两个目录作为mysql容器的挂载点

在conf目录下创建1个hmy.cnf的文件,内容如下:
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
3、在DockerHub查看mysql镜像的详细资料,通过Mysq镜像创建并运行mysql容器
要求:挂载/mysql/data到mysql容器中吧类数据存储目录
挂载/mysql/conf/hmy.cnf到mysql容器的配置文件
设置mysql密码
docker run \
--name myMysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 8406:3306 \
-v /mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25

4、测试远程连接mysql容器

















