docker笔记之数据卷

一、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进行连接,发现连接不上。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41486775/article/details/113799256