Docker数据管理

Docker数据管理是可以用在数据持久化中,不做持久化,容器的数据随着容器关闭而消失。

目录

一、容器中管理数据方式

二、容器互联

三、总结

 

 

 

 

 

 

一、容器中管理数据方式

  1.容器中管理数据主要有两种方式

  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volume Dontainers)

  2.数据卷

 

  数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

  3.数据卷操作

#拉取镜像
docker pull centos:7

#没有/var/www这个目录
[root@localhost ~]# ls /var/www
ls: cannot access /var/www: No such file or directory
#宿主机目录/var/www挂载到容器中的/datal。
#注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
#-v选项可以在容器内创建数据卷
[root@localhost ~]# docker run -v /var/www:/data1 --name c7 -itd centos:7 /bin/bash
33c4514dfb161069f7ab0ee584bbddb2c7d74baec48ac6cfdfadb522455ed387
[root@localhost ~]# ls /var/www/
[root@localhost ~]# ls /var/www/ -d
/var/www/

 

#进入容器
[root@localhost ~]# docker exec -it c7 bash
[root@33c4514dfb16 /]# ls
anaconda-post.log  bin  data1  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
#写入数据
[root@33c4514dfb16 /]# echo 'qzzqzz' > /data1/123.txt
[root@33c4514dfb16 /]# cd data1
[root@33c4514dfb16 data1]# ls
123.txt
[root@33c4514dfb16 data1]# cat 123.txt
qzzqzz
[root@33c4514dfb16 data1]# exit
exit

#进入宿主机查看刚刚所在容器写的数据
[root@localhost ~]# cd /var/www/
[root@localhost www]# ls
123.txt
[root@localhost www]# cat 123.txt 
qzzqzz

 

   4.数据卷容器 

    容器之间共享文件内容(nfs)

    如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。 

#创建一个容器做数据卷容器
[root@localhost www]# docker run -itd --name test1 -v /data1 -it centos:7 /bin/bash
94e885f3b013476367a743a552a60aff601aa03dff69f1c6b9bbb9dca70a2a19
[root@localhost www]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
94e885f3b013   centos:7   "/bin/bash"   4 seconds ago    Up 2 seconds              test1
33c4514dfb16   centos:7   "/bin/bash"   12 minutes ago   Up 12 minutes             c7

#进入数据卷容器,并写入数据
[root@localhost www]# docker exec test1 bash
[root@localhost www]# docker exec -it test1 bash
[root@94e885f3b013 /]# ls
anaconda-post.log  bin  data1  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@94e885f3b013 /]# echo '123123' > /data1/123.txt
[root@94e885f3b013 /]# cd data1/

 

#使用--volumes-from 来挂载li容器中的数据卷到wang容器
[root@localhost www]# docker run -itd --volumes-from li --name wang centos:7 /bin/bash
458416a9d16887242f3ba41c800a4666321d29dbc1eb8145d3acafc7f3de51be 

[root@localhost www]# docker exec -it wang bash

可以看到数据已经同步

 

注意:使用–volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。

如果删除了挂载的容器,数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm-v命令来指定同时删除关联的容器。

挂载了数据卷的容器也可以作为数据卷容器

 

二、容器互联

  1.容器互联

    容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

[root@localhost www]# docker ps -a
#进入test1容器,ping不通test2容器
[root@localhost www]# docker exec -it test1 bash
[root@94e885f3b013 /]# ping test2
ping: test2: Name or service not known
[root@94e885f3b013 /]# exit
exit

 

 

 

#创建并运行接收容器取名test3,使用--1ink选项指定连接容器以实现容器互联
#--1ink容器名:连接的别名
[root@localhost www]# docker run -itd -P --name test3 --link test1:test1 centos:7 /bin/bash
              创建一个容器test3,和test1互联
9d1400fa124e958c8de5567deb40bdd3033a02fffa12074cedf3f5ba04002eab #进入test3,可以ping通test1 [root@localhost www]# docker exec -it test3 bash [root@9d1400fa124e /]# ping test1 PING test1 (172.17.0.3) 56(84) bytes of data. 64 bytes from test1 (172.17.0.3): icmp_seq=1 ttl=64 time=0.204 ms 64 bytes from test1 (172.17.0.3): icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from test1 (172.17.0.3): icmp_seq=3 ttl=64 time=0.106 ms 64 bytes from test1 (172.17.0.3): icmp_seq=4 ttl=64 time=0.075 ms ^C --- test1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 0.075/0.115/0.204/0.053 ms

 

三、总结

   Docker中的数据管理可以通过数据卷、绑定挂载和临时文件系统来实现,用于持久化和共享数据。容器互联可以通过网络连接和链接容器来实现,以实现容器间的通信和访问。数据管理和容器互联的选择取决于需求和场景,可以根据需要选择适合的方法进行数据管理和容器互联。

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-08-17 16:59  纸签  阅读(28)  评论(0编辑  收藏  举报