使用--volumes-from实现docker容器之间互相挂载目录实现数据同步

这里我们使用Dockerfile构建一个自己的容器,并指定匿名挂载。
然后再启动几个容器使用--volumes-from来跟启动的第一个容器挂载相同的目录来实现数据同步。

编写Dockerfile文件

[root@localhost home]# vim Dockerfile
#Dockerfile中输入命令

FROM centos

VOLUME ["voluem01","volume02"]

CMD echo "----end----"
CMD /bin/bash

#通过DockerFile 生成一个自己的镜像
# 注意后边的那个"." 不能丢
[root@localhost home]# docker build -f ./dockerfile -t centos-new:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 831691599b88
Step 2/4 : VOLUME ["voluem01","volume02"]
 ---> Running in b9595dbaaaa0
Removing intermediate container b9595dbaaaa0
 ---> 75ba95ccfe41
Step 3/4 : CMD echo "----end----"
 ---> Running in 7e428af507b2
Removing intermediate container 7e428af507b2
 ---> 58d92196cb96
Step 4/4 : CMD /bin/bash
 ---> Running in 89ecf6c9ce27
Removing intermediate container 89ecf6c9ce27
 ---> 19cf71587b30
Successfully built 19cf71587b30
Successfully tagged centos-new:1.0

[root@localhost home]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
centos-new            1.0                 19cf71587b30        49 seconds ago      215MB

#运行我们自己的镜像
[root@localhost dockerfile]# docker run -it 19cf71587b30 
[root@dd8cbb4f3ea4 /]# ls 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  voluem01  volume02 #可以看到我们挂在的目录在这里了

#进入挂在目录创建一个测试文件
[root@dd8cbb4f3ea4 /]# cd voluem01
[root@dd8cbb4f3ea4 voluem01]# touch test.java
#在另一个终端中查看容器的信息
[root@localhost logs]# docker inspect dd8cbb4f3ea4

使用--volumes-from实现docker容器之间互相挂载目录实现数据同步_第1张图片
可以看到它具体挂在到了哪里,然后进去查看

[root@localhost logs]# cd /var/lib/docker/volumes/9a4ccf92430b0c906ccd13743b3ced9b8c4bd66ea6af615d07cc020bb473b2ed/_data

[root@localhost _data]# ll
总用量 0
-rw-r--r--. 1 root root 0 8月   2 00:37 test.java  #说明挂在成功

使用 --volumes-from 继承挂载

#启动一个新容器 挂在并让他继承上一个容器
[root@localhost dockerfile]# docker run -it --name docker-new02 --volumes-from infallible_dewdney centos-new:1.0  
[root@c9f3d2b6d173 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  voluem01  volume02
[root@c9f3d2b6d173 /]# cd voluem01
#这里可以看到我们在容器一中创建的文件,说明数据同步没有问题
[root@c9f3d2b6d173 voluem01]# ls
test.java
如果我在通过这个镜像启动容器那么他们挂在的目录相同,这就实现了多个容器的数据同步问题。

注意 :
1、启动新容器的时候挂载卷必须有–volumes-from 你想同步数据的那个容器,要不然他们数据是不能同步的

2、这个卷的生命周期是持续到没有容器使用为止

3、如果你使用-v将数据持久化到本机器上容器删除数据也不会丢失

你可能感兴趣的:(docker,docker,linux,centos,运维)