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