容器数据卷
什么是容器数据卷
docker理念回顾
将应用和环境打包成一个镜像
如果数据都在容器中,那么我们容器删除,数据就会丢失。需求:数据持久化
MySql容器删了===》删库跑路 需求:MySql数据可以存储在本地
容器之间有一个数据共享的技术,Docker容器中产生的数据同步到本地
这就是卷技术,目录的挂载将我们容器内的目录挂载到Linux上面
总结一句话,容器的持久化和同步操作,容器间也是可以数据共享的
使用数据卷
方式一:使用命令来挂载
docker run -it -v 主机目录:容器目录 image /bin/bash
在主机中输入
docker run -it -v /home/ceshi:/home centos /bin/bash
新建一个会话,在主机中输入
[root@iZmu0fa4hv0jwzZ home]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e4176d89cd7 centos "/bin/bash" 3 minutes ago Up 3 minutes wizardly_bardeen [root@iZmu0fa4hv0jwzZ home]# docker inspect 1e4176d89cd7
可以找到
"Mounts": [ { "Type": "bind", "Source": "/home/ceshi", #主机内地址 "Destination": "/home", #docker容器内地址 "Mode": "", "RW": true, "Propagation": "rprivate" } ],
测试挂载是否成功
在容器内的/home目录下输入
[root@1e4176d89cd7 home]# touch test.java
可以看见在主机内测试目录中有test.java文件
[root@iZmu0fa4hv0jwzZ home]# ls ceshi
test.java
关闭容器
[root@1e4176d89cd7 home]# exit
exit
[root@iZmu0fa4hv0jwzZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
在主机中编辑test.java
[root@iZmu0fa4hv0jwzZ ceshi]# vim test.java
hello world
启动容器
[root@iZmu0fa4hv0jwzZ home]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e4176d89cd7 centos "/bin/bash" 22 minutes ago Exited (0) 3 minutes ago wizardly_bardeen e15284bd88f5 tomcat:9.0 "catalina.sh run" 3 hours ago Exited (143) 18 minutes ago tomcat01 03ae4ad1999f nginx "/docker-entrypoint.…" 5 hours ago Exited (0) 3 hours ago nginx01 [root@iZmu0fa4hv0jwzZ home]# docker start 1e4176d89cd7 1e4176d89cd7 [root@iZmu0fa4hv0jwzZ home]# docker attach 1e4176d89cd7 [root@1e4176d89cd7 /]# cd /home [root@1e4176d89cd7 home]# ls test.java [root@1e4176d89cd7 home]# cat test.java hello world
可以发现docker容器中的test.java也被修改了,说明挂载是有效的
使用容器数据卷的好处:以后修改只需要在本地即可,容器内会自动同步