Docker数据管理 data container

创建Data Container

持久保存container中的数据除了named volume还可以使用data volume container, 为了方便本文统一称为data container.

使用docker create创建data container

事前volume情况等的确认

没有volume等存在
[root@liumiao volumes]# pwd
/var/lib/docker/volumes
[root@liumiao volumes]# docker volume ls
DRIVER              VOLUME NAME
[root@liumiao volumes]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@liumiao volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用docker create创建data container

[root@liumiao volumes]# docker create -v /datainf --name datacontainer debian /bin/true
ec96e7a392631b61cfc902f1e5457d0f432741a439ea756e594a24c6f0c3db74
[root@liumiao volumes]#
  • 1
  • 2
  • 3

是不是觉得非常熟悉,使用docker run -v创建以及docker volume create的时候如果不指定name,系统自动会生成的一个volume名称和刚刚创建的非常像,让我们来看一下到底发生了什么。

[root@liumiao ~]# docker volume ls
DRIVER              VOLUME NAME
local               aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f
[root@liumiao ~]#
  • 1
  • 2
  • 3
  • 4

确认之后,没有一丝惊喜,这个不是,应该是和普通container类似,返回的container的Id,确认一下,果然如此

[root@liumiao ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ec96e7a39263        debian              "/bin/true"         7 minutes ago       Created                                 datacontainer
[root@liumiao ~]# docker inspect ec96e7a39263 |grep Id
        "Id": "ec96e7a392631b61cfc902f1e5457d0f432741a439ea756e594a24c6f0c3db74",
                "DeviceId": "457",
[root@liumiao ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

用来存放数据的volume是不是和我们不指定名字产生的volume是一样的呢,确认之后发现,确实如此。缺省此volume在/var/lib/docker/volumes下被生成。

[root@liumiao volumes]# pwd
/var/lib/docker/volumes
[root@liumiao volumes]# ll
total 0
drwxr-xr-x. 3 root root 18 Jul 26 07:53 aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f
[root@liumiao volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意要点:data container和普通的container的区别在哪里呢。主要有如下两点。

  • 在这个container中只有volume,没有应用程序
  • Entrypoint设定为/bin/true,所以不会被运行起来

路人甲Container使用此data container

路人甲使用他的centos按照如下的方式与data container进行了连接。

[root@liumiao volumes]# docker run -it --volumes-from datacontainer --name centoscontainer centos /bin/bash
[root@57e8263a3d1e /]#
  • 1
  • 2

进入之后,发现了创建data container时候使用的datainf目录,果断进入,初始状态,什么信息都没有。

[root@57e8263a3d1e /]# ls
anaconda-post.log  bin  datainf  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@57e8263a3d1e /]# cd datainf
[root@57e8263a3d1e datainf]# ls
[root@57e8263a3d1e datainf]#
  • 1
  • 2
  • 3
  • 4
  • 5

在主机中,此时也进行确认,发现也是没有任何信息的状态。

[root@liumiao volumes]# pwd
/var/lib/docker/volumes
[root@liumiao volumes]# find . -type f
[root@liumiao volumes]#
  • 1
  • 2
  • 3
  • 4

确认一下此时活动着的container,确实只有路人甲(centoscontainer)

[root@liumiao volumes]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
57e8263a3d1e        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            centoscontainer
[root@liumiao volumes]#
  • 1
  • 2
  • 3
  • 4

路人甲向大家say hello

[root@57e8263a3d1e datainf]# ls
[root@57e8263a3d1e datainf]# echo "hello, this is `hostname`" >>helloworld
[root@57e8263a3d1e datainf]# ls
helloworld
[root@57e8263a3d1e datainf]# cat helloworld
hello, this is 57e8263a3d1e
[root@57e8263a3d1e datainf]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

宿主机看到消息了

[root@liumiao volumes]# pwd
/var/lib/docker/volumes
[root@liumiao volumes]# find . -type f
./aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f/_data/helloworld
[root@liumiao volumes]# cat ./aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f/_data/helloworld
hello, this is 57e8263a3d1e
[root@liumiao volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

路人乙也加入使用此data container

[root@liumiao ~]# docker run -it --volumes-from datacontainer --name ubuntucontainer ubuntu /bin/bash
root@a3cefc373b4a:/#
  • 1
  • 2

路人乙看到了甲的message

root@a3cefc373b4a:/# ls
bin  boot  datainf  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@a3cefc373b4a:/# cd datainf
root@a3cefc373b4a:/datainf# find . -type f
./helloworld
root@a3cefc373b4a:/datainf# cat ./helloworld
hello, this is 57e8263a3d1e
root@a3cefc373b4a:/datainf#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

路人乙决定对甲say hello

root@a3cefc373b4a:/datainf# cat helloworld
hello, this is 57e8263a3d1e
root@a3cefc373b4a:/datainf# echo "hello, this is `hostname`" >>helloworld
root@a3cefc373b4a:/datainf# cat helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
root@a3cefc373b4a:/datainf#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

路人甲和宿主机都看到了乙的message

[root@liumiao volumes]# pwd
/var/lib/docker/volumes
[root@liumiao volumes]# find . -type f
./aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f/_data/helloworld
[root@liumiao volumes]# cat ./aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f/_data/helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
[root@liumiao volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
[root@57e8263a3d1e datainf]# pwd
/datainf
[root@57e8263a3d1e datainf]# ls
helloworld
[root@57e8263a3d1e datainf]# cat helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
[root@57e8263a3d1e datainf]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

宿主机准备刷一下存在感

宿主机向两个都发出了一条message,表示他也要加入say hello活动中。

[root@liumiao _data]# pwd
/var/lib/docker/volumes/aa31ef55b196dc13a120496dae2be903c37f256d3a200a3741167253b1495c1f/_data
[root@liumiao _data]# cat helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
[root@liumiao _data]# echo "hello, this is `hostname`" >>helloworld
[root@liumiao _data]# cat helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
hello, this is liumiao
[root@liumiao _data]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

两个container都看到了

[root@57e8263a3d1e datainf]# pwd
/datainf
[root@57e8263a3d1e datainf]# cat helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
hello, this is liumiao
[root@57e8263a3d1e datainf]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
root@a3cefc373b4a:/datainf# pwd
/datainf
root@a3cefc373b4a:/datainf# cat helloworld
hello, this is 57e8263a3d1e
hello, this is a3cefc373b4a
hello, this is liumiao
root@a3cefc373b4a:/datainf#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意事项

为了介绍data container和volume的本质所以用了比较极端的方式。在实际的设计中,多个container共用一个数据卷有可能会导致数据损坏。同时宿主机虽然能够看到数据,但是直接从宿主机修改该数据绝对不是Best Practice.

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自www.cnblogs.com/firsttry/p/10294256.html