宿主机运行docker后,会产生docker0的默认网桥,默认为172.17.0.1:
查看docker的默认网络模式:
docker network ls
brigde(桥接)网络是默认的网络模式,创建容器时不指定--network选项就是桥接模式,容器有自己的ip和端口。host主机模式则以为着容器和主机公用同一个网络ip和端口。none表示禁用该容器的网络,一般用不到。还有一种container模式,用于共享容器间的网络,在本文文末再介绍。
自定义一个docker网络:
docker network create mynet
可以看出新建的mynet默认也是桥接模式。
删除自定义网络:
docker network rm mynet
查看网络详情:
docker network inspect 网络名
以上是docker网络的基本命令,而docker网络的最大作用在于可以让多个容器位于同一个自定义的网络中,避免因容器ip变化导致的业务功能、微服务调用等错误。现在自定义一个网络mynet:
然后运行两个redis实例,网络模式都指定为mynet(注意虽然指定为自定义网络,但驱动还是bridge):
这里为了简便,没有指定redis的数据卷路径映射关系。然后进入其中一个容器:
docker exec -it redis_network1 bash
尝试通过容器名来ping redis_network2:
发现能ping通,而进入前两篇文章的redis集群,通过容器名ping其他节点是ping不通的:
上述例子阐明了docker自定义网络的好处,即一旦某个容器宕机重启,其ip是会变的,如果不使用容器名/服务名,而直接将ip写死肯定是会出业务问题的。
上述过程中可能会报ping命令/ifconfig命令不存在,可以依次执行以下命令安装网络命令:
apt-get update apt-get install -y net-tools apt-get install iputils-ping
最后简单介绍容器间共享网络使用的container模式:
docker run -d --network container:容器1 --name 容器2 镜像名
上述命令就可以使容器2复用容器1的网络,但上述命令最好别用于tomcat镜像。如果容器1停掉了,容器的网络也没了。



