我们首先来回顾一下docker的理念,就是将应用和环境打包成一个镜像,那数据呢就存在于容器中,如果容器被删,那数据就会丢失,因此我们有一个希望数据可以长久保存的需求,就算容器被删,也能找回数据,尽力减少删库跑路带来的损失。实际上容器之间有一种数据共享的技术,使得docker容器产生的数据,直接同步到本地,这就是docker数据卷技术。
一 docker数据卷技术概念
实现数据的持久化和同步操作,实际上就是目录的挂载,将容器内的目录挂载到容器外的目录 ,即linux上面,例子如下图所示。容器内的Mysql文件系统放在/usr/mysql目录下,通过数据卷技术,可以自动同步到容器外的/home/mysql.
二 数据卷使用
方式1.直接使用-v: docker run -it -v 主机目录:容器内目录 镜像 /bin/bash
//目录挂载
[root@wangstudy ~]# docker run -it centos /bin/bash
[root@56364a55ad50 /]# cd /home
[root@56364a55ad50 home]# ls
[root@56364a55ad50 home]# [root@wangstudy ~]# docker run -it -v /home/ceshi:/home centos /bin
//通过docker inspect 容器id查找到挂载信息
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
测试:
我们在容器内home目录下添加了文件test.txt
然后去查看容器外/home/ceshi,也发现了test.txt
说明已经挂载成功。
再测试:停止容器后修改文件也能同步
1.停止容器
[root@wangstudy ceshi]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d13e77bcdb8b centos "/bin/bash" 7 minutes ago Up 7 minutes zealous_hellman
[root@wangstudy ceshi]# docker stop d13e77bcdb8b
d13e77bcdb8b
[root@wangstudy ceshi]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2. 修改test.txt内容,添加了wang
3.重启docker centos镜像并进入查看test.txt看到,同步成功
这表明我们要修改容器内的文件,可以通过数据卷技术在容器外挂载的目录下修改对应文件而无需进入到容器内