docker网络之通过容器名进行容器间通讯
安装docker时,docker会默认创建一个内部的bridge网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问,且只能通过ip进行通讯。
在这种情况下,不能保证容器自动分配的ip地址不变,为了能通讯方便,我们可以再创建一个bridge网络,通过容器名来进行通讯。
1、创建网络:
首先我们创建一个自定义的bridge网络,名字为DockerNet:
[root@server ~]# docker network create DockerNet
这样我们就创建了一个名为DockerNet的网络。
2、加入网络:
然后把已创建的容器加入到这个DockerNet网络中来。
使用方法:docker network connect <bridge> <容器名>。
例如:把名字为docker_demo1和docker_demo2的容器加入到名为DockerNet的网络中:
[root@server ~]# docker network connect DockerNet docker1_demo
[root@server ~]# docker network connect DockerNet docker2_demo
3、查看网络:
可以查看指定的网络配置,如查看DockerNet的网络配置情况:
[root@server ~]# docker network inspect DockerNet
4、断开网络:
断开容器与网络的连接。
使用方法:docker network disconnect <bridge> <容器名>。
例如:把名字为docker_demo1和docker_demo1的容器从默认bridge网络断开:
[root@server ~]#docker network disconnect bridge docker1_demo
[root@server ~]#docker network disconnect bridge docker2_demo
5、创建容器时加入指定的bridge网络:
创建容器时可以直接连接到DockerNet网络,通过--network <bridge>来实现:
使用方法:docker run -it --name <容器名> --network <bridge> <镜像名>。
例如:创建一个centos容器并加入到DockerNet这个bridge中:
[root@server ~]# docker run -it --name centos-1 --network DockerNet centos:latest
6、查看docker中存在的所有网络:
[root@server ~]# docker network ls
7、检验是否可以通过容器名进行容器间的通讯:
a、进入docker_demo1容器:
[root@server ~]# docker exec -it docker_demo1 /bin/bash
b、ping另一个容器docker_demo2:
root@97f1d3fc38c0:l# ping docker_demo2
PING docker_demo2 (172.18.0.5) 56(84) bytes of data.
64 bytes from docker_demo2.DockerNet (172.18.0.5): icmp_seq=1 ttl=64 time=0.243 ms
64 bytes from docker_demo2.DockerNet (172.18.0.5): icmp_seq=2 ttl=64 time=0.142 ms