Docker(三)—数据卷

 

简介

在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。为了能保存数据在docker中我们使用卷。

在这里插入图片描述

目的:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止

    实践效果

挂载

dockerq启动mysql

docker pull mysql:5.7.35
docker run --name -it wyt-mysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.35
mysql -uroot -proot -h 192.168.2.248 -P 3307
#进入容器的数据库
create database wyt;
exit

查看挂载信息

docker stop wyt-mysql
docker start wyt-mysql
#关闭容器,再打开,远程容器数据库可以看到wyt数据还在
docker container inspect wyt-mysql|grep -C 10 Mounts
#看到有挂载信息

在这里插入图片描述

所以容器有一套机制可以实现数据的持久化。使用卷把数据挂载到宿主机。

dockerq启动nginx

docker pull nginx
docker run --name nginx-1 -d -p 8080:80 nginx
docker exec -it nginx-1 /bin/bash
#进入容器
cd /usr/share/nginx/html
echo 'wangyutao' >index.html

浏览器访问192.168.2.248::8080,nginx主页变为wangyutao 启动第二个nginx容器

mkdir /root/web
vim /root/web/index.html
>wangyutao
docker run --name nginx-2 -d -p 8081:80 -v /root/web/:/usr/share/nginx/html nginx
#-v选项挂载宿主机中的web页面到容器,并启动
#浏览器访问192.168.2.248:8081,nginx主页为wangyutao

在这里插入图片描述

卷(Volume)的引入

docker volume ls
#列出所有卷
docker volume create wyt
#创建卷wyt
cd /var/lib/docker/volumes/
#挂载卷的目录,可以看到所有卷
cp /root/web/index.html /var/lib/docker/volumes/wyt/_data
#复制之前创建的挂载文件到卷目录下
docker volume inspect wyt
#查看卷的详细信息
docker run --name nginx-3 -d -p 8082:80 --mount source=wyt,target=/usr/share/nginx/html nginx
#开启容器nginx-3,使用卷wyt

浏览器访问192.168.2.248:8082,内容是wangyutao 如果不再使用自定义数据卷了,那么可以手动清理

docker stop nginx-3 
#暂停容器实例
docker rm nginx-3 
#移除容器实例
docker volume rm wyt
#删除自定义数据卷

多容器也可以共享同一个卷