一、docker数据卷是什么?
我们都知道,把我们的程序和环境打包成一个镜像之后,然后通过镜像开启容器,那么容器之中应该是有数据的,但是假如我们把数据删除了,那么岂不是数据也就删除了,于是乎我们就需要把容器之中的数据持久化到本地,docker的数据卷就是这样产生的,它可以用于把容器中产生的数据存储到本地,将容器内的目录挂载到容器外也就是本机目录上,实现同步。
二、使用步骤
1.测试基本操作
启动centos容器,以交互运行的方式
#启动容器,将主机的`/home/haihui`目录和容器内部`/home`目录进行挂载
[root@iZbp10d5h2h0qbsabf055iZ docker]# docker run -it -v /home/haihui:/home centos /bin/bash
进到容器里面的home目录,我们创建一个文件看看。
#进到容器里面的home目录,我们创建一个文件看看。
[root@37d9e0091e1b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@37d9e0091e1b /]# cd home/
[root@37d9e0091e1b home]# ls
[root@37d9e0091e1b home]# touch a.txt
[root@37d9e0091e1b home]# ls
a.txt
[root@37d9e0091e1b home]#
回到主机的/home/haihui目录下查看。
#接下来,我们离开容器内部,然后回到主机,看下对应的目录下面有没有所谓的a.txt,发现确实有
[root@37d9e0091e1b home]# exit
exit
[root@iZbp10d5h2h0qbsabf055iZ docker]# cd /
[root@iZbp10d5h2h0qbsabf055iZ /]# cd home/haihui/
[root@iZbp10d5h2h0qbsabf055iZ haihui]# ls
a.txt
接下来我们在主机上修改一下文件的内容,进入容器内部看看数据是否也同步到了容器当中。
[root@iZbp10d5h2h0qbsabf055iZ haihui]# vim a.txt
[root@iZbp10d5h2h0qbsabf055iZ haihui]# cat a.txt
i love my family
加油,努力找到一份好工作,去上海混,未来可期。
我们找到创建这个容器的时候的id,然后根据attach命令启动,确实是看到了我们在主机上修改的文件。
[root@iZbp10d5h2h0qbsabf055iZ /]# docker attach 37d9e0091e1b
[root@37d9e0091e1b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@37d9e0091e1b /]# cd home/
bash: $'\347\250cd': command not found
[root@37d9e0091e1b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@37d9e0091e1b /]# cd /home/
[root@37d9e0091e1b home]# ls
a.txt
[root@37d9e0091e1b home]# cat a.txt
i love my family
加油,努力找到一份好工作,去上海混,未来可期。
[root@37d9e0091e1b home]#
2.测试mysql数据持久化
启动mysql,
[root@iZbp10d5h2h0qbsabf055iZ /]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
6268f841c85d1cedfff88f3fd5cb3e6ca257d54354c5ff3015d87adac10fb2a7
[root@iZbp10d5h2h0qbsabf055iZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6268f841c85d mysql "docker-entrypoint.s…" 6 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01
启动一个已在运行的容器
#mysql容器已经打开了。
docker exec -it 6268f841c85d /bin/bash
root@6268f841c85d:/# ls
bin dev entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint-initdb.d etc lib media opt root sbin sys usr
root@6268f841c85d:/# pwd
/
接下来我们通过navicat进行连接,发现连接不上。