本文详细介绍了docker容器的三种互访方式,可以帮助大家更好的了解和应用Docker容器,有兴趣的可以掌握。
大家都知道docker容器是互相保护的,不能互相访问,但是如果一些依赖的服务呢?这里有三种方法来处理容器互访的问题。
方法一。虚拟ip访问
安装docker时,docker会默认创建一个内部桥接互联网docker0。创建的每个容器将被分配一个虚拟网卡,容器可以根据ip互相访问。
[root@33fcf82ab4dd/]#[root@CentOS~]#ifconfig ...... docker0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.1netmask255.255.0.0broadcast0.0.0.0 inet6fe80::42:35ff:feac:66d8prefixlen64scopeid0x20<link> ether02:42:35:ac:66:d8txqueuelen0(Ethernet) RXpackets4018bytes266467(260.2KiB) RXerrors0dropped0overruns0frame0 TXpackets4226bytes33935667(32.3MiB) TXerrors0dropped0overruns0carrier0collisions0 ......运行centos镜像系统,检查详细的ip地址得到:172.17.0.7
[root@CentOS~]#dockerrun-it--namecentos-1docker.io/centos:latest [root@6d214ff8d70a/]#ifconfig eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.7netmask255.255.0.0broadcast0.0.0.0 inet6fe80::42:acff:fe11:7prefixlen64scopeid0x20<link> ether02:42:ac:11:00:07txqueuelen0(Ethernet) RXpackets16bytes1296(1.2KiB) RXerrors0dropped0overruns0frame0 TXpackets8bytes648(648.0B) TXerrors0dropped0overruns0carrier0collisions0d出同样指令的容器,查看详细ip地址得到:172.17.0.8
[root@CentOS~]#dockerrun-it--namecentos-2docker.io/centos:latest [root@33fcf82ab4dd/]#ifconfig eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.8netmask255.255.0.0broadcast0.0.0.0 inet6fe80::42:acff:fe11:8prefixlen64scopeid0x20<link> ether02:42:ac:11:00:08txqueuelen0(Ethernet) RXpackets8bytes648(648.0B) RXerrors0dropped0overruns0frame0 TXpackets8bytes648(648.0B) TXerrors0dropped0overruns0carrier0collisions0容器内部ping检测结果如下:
[root@33fcf82ab4dd/]#ping172.17.0.7 PING172.17.0.7(172.17.0.7)56(84)bytesofdata. 64bytesfrom172.17.0.7:icmp_seq=1ttl=64time=0.205ms 64bytesfrom172.17.0.7:icmp_seq=2ttl=64time=0.119ms 64bytesfrom172.17.0.7:icmp_seq=3ttl=64time=0.118ms 64bytesfrom172.17.0.7:icmp_seq=4ttl=64time=0.101ms这种方法必须知道每个容器的ip,在具体应用中不好用。
方法2,链接
在容器 *** 作的情况下添加主参数链接。
*** 作第一个容器。
dockerrun-it--namecentos-1docker.io/centos:latest*** 作第二个容器。
[root@CentOS~]#dockerrun-it--namecentos-2--linkcentos-1:centos-1docker.io/centos:latest-link:主参数中的第一个centos-1是容器名,第二个centos-1是定义的容器昵称(访问容器的应用程序昵称)。为了更方便和更快,容器名通常是默认设置的。
测试结果如下:
[root@e0841aa13c5b/]#pingcentos-1 PINGcentos-1(172.17.0.7)56(84)bytesofdata. 64bytesfromcentos-1(172.17.0.7):icmp_seq=1ttl=64time=0.210ms 64bytesfromcentos-1(172.17.0.7):icmp_seq=2ttl=64time=0.116ms 64bytesfromcentos-1(172.17.0.7):icmp_seq=3ttl=64time=0.112ms 64bytesfromcentos-1(172.17.0.7):icmp_seq=4ttl=64time=0.114ms此方法指定容器的创建顺序。如果集群中的几个容器要互相访问,不方便申请。
方法3,创建桥接网络
1.安装docker后,运行以下命令创建桥接网络:dockernetworkcreatetestnet
查看新创建的桥测试网。
2. *** 作容器连接到testnetInternet。
*** 作:dockerrun-it-name<容器名>:-network<;桥>-网络别名<网络昵称>:<图像名称>:
[root@CentOS~]#dockerrun-it--namecentos-1--networktestnet--network-aliascentos-1docker.io/centos:latest [root@CentOS~]#dockerrun-it--namecentos-2--networktestnet--network-aliascentos-2docker.io/centos:latest3.从一个容器ping另一个容器,检测结果如下:
[root@fafe2622f2af/]#pingcentos-1 PINGcentos-1(172.20.0.2)56(84)bytesofdata. 64bytesfromcentos-1.testnet(172.20.0.2):icmp_seq=1ttl=64time=0.158ms 64bytesfromcentos-1.testnet(172.20.0.2):icmp_seq=2ttl=64time=0.108ms 64bytesfromcentos-1.testnet(172.20.0.2):icmp_seq=3ttl=64time=0.112ms 64bytesfromcentos-1.testnet(172.20.0.2):icmp_seq=4ttl=64time=0.113ms4.如果访问容器中的服务项,可以用这个方法访问::<服务项目服务器端口>:
强烈建议使用此方法自定义互联网。因为是互联网的别称,所以不用担心ip是否变更。如果在docker内部连接光明互联,可以互访。网桥也可以创建几个,在不同的子网中受到保护。
以上是Docker集装箱互访三种方式的详细内容。关于Docker集装箱互访的资料很多,请关心其他相关文章!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)