docker---数据卷和数据卷容器

一.如何管理docker容器中的数据?

二、数据卷

1、数据卷原理

将容器内部的配置文件目录,挂载到宿主机指定目录下

数据卷默认会一直存在,即使容器被删除

宿主机和容器是两个不同的名称空间,如果想进行连接需要用ssh,exec和attch也类似于ssh这种方式登录

在企业中ssh这种登陆方式会比较危险,安全漏洞很大,尽量减少ssh这种,杜绝了频繁使用exec

因此使用数据卷的方式把容器内部的文件目录挂载到宿主机指定目录下进行修改,当容器里的文件频繁需要修改时不需要登陆进去,直接使用数据卷方式在宿主机指定的目录下进行修改即可。方便又安全

2、数据卷作用

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

扫描二维码关注公众号,回复: 14656231 查看本文章

3、数据卷案例

实例:将宿主机目录 /var/www 分别挂载到c1 c2容器中的 /data1,/data2

3.1 创建两个容器,指定挂载点,并在宿主目录写入数据

docker run -itd -v /var/www:/data1 --name c1 centos:7 bash

docker run -itd -v /var/www:/data2 --name c2 centos:7 bash

#在宿主机目录写入数据

echo "lichen youshoujiuxing" > lcdb.txt

3.3 在C2容器上创建一个文件,宿主机和C1上也能看到

在c1查看

三、数据卷容器

1、数据卷容器作用

让两个容器实现数据共享

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

php ---->mysql之间想要通讯,通过socket

2、数据卷容器案例

需求:创建数据卷容器

#创建一个容器作为数据卷容器

docker run -it --name test1 -v /data1 -v /data2 centos:7 bash    #创建并进入容器

echo "this is test02 file" > /data1/test.txt               #容器内创建测试文件1

echo "THIS IS TEST2 FILE" > /data2/TEST.txt                                #容器内创建测试文件2

#使用--volumes-from来挂载test2容器中的数据卷到新的容器

docker run -it --name test2 --volumes-from test1 centos:7 bash #创建并进入容器

cat data1/test.txt                                                                        #查看测试数据是否同步

cat data2/TEST.txt

四、容器互联(使用centos镜像)

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

#查看容器

[root@zhang ~]# docker ps -a

CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS             

e765fa362a92   centos:7       "bash"                   45 hours ago   Exited (255) 19 hour

c0a721151266   centos:7       "bash"                   45 hours ago   Exited (0) 45 hours

48f1749e6be4   centos:7       "bash"                   45 hours ago   Up 3 seconds       

ce7ebeacc41d   centos:7       "bash"                   45 hours ago   Up 6 seconds       

bf5a3bb91619   nginx:latest   "/docker-entrypoint.…"   46 hours ago   Exited (255) 19 hou

c91e34146686   nginx:latest   "/docker-entrypoint.…"   46 hours ago   Exited (255) 19 hou

#进入c1,ping c2发现ping不通

[root@zhang ~]# docker exec -it c1 bash

[root@ce7ebeacc41d /]# ping c2

ping: c2: Name or service not known

[root@ce7ebeacc41d /]# exit

exit

#创建并运行接收容器取名c3,使用--1ink选项指定连接容器以实现容器互联

#--1ink容器名:连接的别名

[root@zhang ~]# docker run -itd -P --name c3 --link c2:c2 centos:7 /bin/bash

c4adb8c6e0e802f5119bccebfb1a95b1ca344644aaf54b8501bd98350617ee46

#进入c3,ping c2 可以ping通

[root@zhang ~]# docker exec -it c3 bash

[root@c4adb8c6e0e8 /]# ping c2

PING c2 (172.17.0.3) 56(84) bytes of data.

64 bytes from c2 (172.17.0.3): icmp_seq=1 ttl=64 time=0.074 ms

64 bytes from c2 (172.17.0.3): icmp_seq=2 ttl=64 time=0.246 ms

64 bytes from c2 (172.17.0.3): icmp_seq=3 ttl=64 time=0.167 ms

^C

--- c2 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 0.074/0.162/0.246/0.071 ms

[root@c4adb8c6e0e8 /]# exit

exit

#进入c3容器,查看ip

[root@zhang ~]# docker exec -it c3 bash

[root@c4adb8c6e0e8 /]# ping 172.17.0.3

PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.

64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.050 ms

64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.120 ms

64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.116 ms

^C

--- 172.17.0.3 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 0.050/0.095/0.120/0.033 ms

[root@c4adb8c6e0e8 /]# exit

exit

[root@zhang ~]# docker exec -it c2 bash

[root@48f1749e6be4 /]# yum install -y net-tools

...........

[root@48f1749e6be4 /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255

        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)

        RX packets 4468  bytes 24538555 (23.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 3297  bytes 181507 (177.2 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        loop  txqueuelen 1000  (Local Loopback)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

四、总结

本文介绍了通过数据卷和数据卷容器对容器内数据进行共享、备份和恢复等操作,通过这些机制,即使容器在运行中出现故障,用户也不必担心数据发生丢失,只需要快速地重新创建容器即可。在生成容器的同时,加上-v选项,指定把当前服务器的目录映射到容器中。

命令       说明

docker run -v 数据卷  创建数据卷

docker run -v 宿主机目录:数据卷  挂载宿主机目录

docker run --volumes-from 数据卷容器  挂载数据卷容器(挂载点路径不变)

docker run --link 源容器名:别名    容器互联

猜你喜欢

转载自blog.csdn.net/a_b_e_l_/article/details/127395849