Docker学习--容器数据卷

什么是容器数据卷?

docker理念回顾:将应用和环境打包成一个镜像!

数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化 ?

MySQL,容器删了,数据就丢失了!需求:Mysql数据可以保存在本地

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地。

这就是卷技术!目录的挂载,将我们容器中的目录,挂载在Linux上面!

总结:容器的持久化和数据同步操作!容器间也是可以数据共享!

使用数据卷

方式1:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器内目录

#测试
[root@tianliang home]# docker run -it -v /home/ceshi:/home centos /bin/bash

#启动起来后 通过命令查看镜像的详细信息
docker inspect 镜像ID

测试文件的同步效果:

再来测试:

1:关闭镜像容器

2:修改主机内的文件内容

3:运行容器镜像查看,发现数据也是可以同步的

好处:我们以后修改只需要在本地修改即可,容器内会自动同步!

实战:安装Mysql

思考:mysql的数据持久化问题

#搜索获取镜像
docker search mysql

#下载镜像
docker pull mysql:5.7

总结:安装后测试是否能连接上,卸载和移除mysql镜像,本地的挂载文件不会变化,可以一次挂载多个文件。

具名和匿名挂载
# 匿名挂载
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx

#查看所有volume的情况
docker volume ls
local    b8d2e5bcadf2550abd36ff5aa544c721a45464a4406fb50979815de773086627
#这里发现,这种就是一种匿名挂载, 我们在-v的时候,只写了容器内的路径,没有写容器外的路径导致

#具名挂载,通过-v 容器卷名:容器内路径指定

查看这个卷:docker volume inspect juming-nginx,如下:

说明,所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data目录下

我们通过具名挂载,可以方便的找到我们的这个卷,大多数情况下使用具名挂载。

问题1:

#如果确定是具名挂载还是匿名挂载,还是指定路径挂载?
-v 容器内路径         #匿名挂载
-v 卷名:容器内路径     #具名挂载
-v /宿主机路径:容器内路径   #指定路径挂载

扩展:

经验分享 程序员 微信小程序 职场和发展