1、什么是容器数据卷

Docker的理念:

将应用与运行环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的

容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过Docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么容器删除后,数据自然也就没有了

为了能保存数据在Docker中我们使用数据卷

2、容器数据卷能做什么

(1)容器数据的持久化

(2)容器之间继承和共享数据

3、添加数据卷的方式

3.1 直接使用命令添加

①语法:

docker run -it -v /宿主机目录:/容器内目录 centos /bin/bash

②查看数据卷容器是否挂载成功

docker inspect 容器ID

注:使用命令直接关联容器数据卷时,则关联的容器数据卷会根宿主机目录文件夹下内容进行同步

例子:

第一步:查看现有的镜像:

docker容器数据卷

第二步:添加一个卷册(位置存在/root/data),执行以下命令

docker run -it -v /root/data:/root/data centos /bin/bash

查看是否挂载成功:

docker容器数据卷

宿主机目录:

docker容器数据卷

进入容器后,容器目录:

docker容器数据卷

结果:宿主机和数据卷容器数据共享

第三步:向宿主机data目录下新增文件host.txt文件,然后去数据卷容器对应目录下查看

docker容器数据卷

再次进入容器/root/data查看时,提示无权限访问,

解决方案:在挂载目录后多添加一个--privileged=true参数即可

第四步:删除已运行的centos,重新运行新的centos,再次执行第三步操作

docker rm -f $(docker ps -aq)

docker run -it -v /root/data:/root/data --privileged=true --name ="mycentos01" centos

第五步:再次进入数据卷容器,查看/root/data目录,文件已经存在

docker容器数据卷

第六步:再次修改宿主机txt文件内容,容器内txt文件内容也修改了

 

3.2 使用DockerFile添加

(1)在root下建立docker文件夹,在文件夹下创建Dockerfile文件

mkdir docker

touch Dockerfile

注意:默认Dockerfile文件名不能写错了

(2)编写Dockerfile文件,添加以下内容

#基于centos构造一个镜像

FROM centos

#加入容器卷

VOLUME ["/mydata"]

CMD echo "finished -------success"

CMD /bin/bash

(3)使用Dockerfile生成自定义镜像mycentos02

docker build -t mycentos02:1.0 .

注意:在生成自定义镜像时,注意最后面的点;

docker容器数据卷

docker容器数据卷

(4) 运行镜像mycentos02

docker run -it mycentos02:1.0

(5)查看数据卷容器是否挂载成功

docker inspect 57cb8eb129c7

docker容器数据卷

(6)进入宿主机目录,创建文件

cd

/var/lib/docker/volumes/b014ef8087c6975346d9f0a872f4ae1d2d7d817c1511194f7470c7a3ee036f11/_data

touch host.txt

(7)进入数据卷容器,/mydata目录下查看,存在文件

 

4、数据卷容器

4.1 作用:实现容器之间数据共享

4.2 操作思路

第1步:进入到/root/docker目录,执行以下命令,使用Dockerfile生成一个自定义的centos镜像

docker build -t mycentos01:1.0 .

第2步:使用自己创建的镜像,启动一个容器

docker run -it --name test1 mycentos01:1.0 /bin/bash

第3步:使用自己创建的镜像,启动第二个容器(继承第一个容器)

docker run -it --name test2 --volumes-from test1 mycentos01:1.0 /bin/bash

第4步:使用自己创建的镜像,启动第三个容器(继承第二个容器)

docker run -it --name test3 --volumes-from test2 mycentos01:1.0 /bin/bash

第5步:测试

进入容器test1,在/mydata下创建文件test1.txt

进入容器test2,在/mydata下查看有文件test1.txt,在/mydata文件夹下创建文件test2.txt

进入容器test3,在/mydata下查看有文件test1.txt,test2.txt

进入容器test1,在/mydata下查看有文件test1.txt,test2.txt

到此则验证容器之间数据共享

第6步:删除容器test1,容器test2,test3下/mydata文件夹下数据不会变化

原因:使用Dockerfile添加容器数据卷,容器卷挂载是跟宿主机关联,而非容器之间挂载,宿主机容器卷挂载指定地址下文件不删除则不会影响其它容器。

 

相关文章:

  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-02
  • 2021-06-10
  • 2021-05-13
  • 2021-06-15
  • 2021-07-09
相关资源
相似解决方案