前言
刚开始学习docker的时侯,启动容器时并没有指定网络,使用的是默认的bridge,也就是桥接的模式,这种模式下启动的容器间都是可以相互通信的,所以使用起来也是特别的爽,其实docker还有两外两种模式分别时host模式和none模式,host模式下容器没有自己的ip,它使用的是共享主机的ip,端口也是主机的端口,所以在启动容器时不需要指定端口映射,而none模式下IP和端口都是需要从头开始设置的,比较麻烦一般不用这种模式,下面就简单说说这三种网络模式的妙用。
1. bridge网络模式
为每一个容器分配IP,并将容器连接到docker0虚拟网桥,是docker容器默认的网络模式,容器之间也可以相互通信
2. host网络模式
容器将不会虚拟出自己的网卡,而是使用宿主机的IP和端口,如果这是启动一个tomcat容器,我们访问这个tomcat,直接使用主机IP:8080端口就可以访问了
例如启动容器使用host
docker run -d --name tomcat --network host 3f1d6082f0ba
3. none网络模式
容器有独立的Network namespace,但是并没有对其进行任何的网络设置,没有分配veth pair 、网桥连接以及ip等
4. container模式
新创建的容器不会创建自己的网卡和IP,而是和一个指定的容器共享IP和端口
例如新启动一台容器连共用已运行的某个容器的IP和端口
docker run -d --name tomcat --network container:已运行的容器名称或id 3f1d6082f0ba
5. 自定义网络
查看网络模式
docker network ls
创建自定义网络
通常使用中我们需要自定义创建网络,如果使用默认的bridge,当我们启动容器的时候没有指定ip的话,重启容器后容器的ip地址会发生改变,导致容器间通信会有问题,但是自定义网络很好的规避了这个问题,同样我们可以创建bridge的网络,启动容器时都连接入这个网络,即使重启这些容器后容器ip会发生改变,容器仍然可以通过容器的名字来相互通信,默认的bridge没有这个功能,这就是为什么要自定义网络了,这一点很重要。
不指定默认为bridge
docker network create custom
指定为bridge
docker network create --driver bridge custom
指定为host
docker network create --driver host custom
例如启动一个tomcat指定网络和IP地址
docker run -d --name tomcat -p 8100:8080 --network custom --ip 10.89.0.3 3f1d6082f0ba
|