Docker在创建容器时有
四种网络模式:,bridge/host/container/none,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用–net去指定,今天所展示的是两种模式bridge和host(桥接和仅主机模式),
,docker run时使用–net=bridge,这种模式会为每个容器分配一个独立的Network Namespace,,同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的,
所虚拟的服务器都有独立的ip, 注1:bridge为默认模式,不需要使用参数–net去指定,使用了–net参数反而无效, 注2:bridge模式无法指定容器IP(但非绝对,具体操作可参考其他资料),
,
,查看当前桥接模式的情况:docker inspect bridge ,里面有个c2的网络地址 ,
, 然后再关闭c2,重新查看桥接模式的情况,
, 接着我们ifconfig查看当前虚拟ip,里面因为装了docker引擎,对应上面那个图docker0和docker1都有独立的ip,
,docker run时使用–net=host,容器将不会虚拟出IP/端口,而是使用宿主机的IP和端口,注1:host模式不能使用端口映射和自定义路由规则,这些都与主机一致,-p 与-icc 参数是无效的,
,初识网络模式,
,然后查看一下网络状态,
, 发现里面没有ip,我们删掉那些多余的镜像:docker rm -f $(docker ps -aq),
,
结论:
仅主机模式是不会分配独立的ip,只会共享相同的ip,而桥接模式是随机分配独立的ip,
,通过指令1启动两个tomcat 通过宿主机访问端口8081或8082 访问到映射到的容器内部的8080端口 , ,
,
, 接着我们访问一下网址:(ip a 查看ip地址),
, 如果还想再来一个直接改一下映射的端口号就行:,
,
, 接着我们重新查看一下桥接模式下的网络状态,
,在一般情况下仅主机模式对我们更方便些,若我们需要部署单体应用,则仅主机是优选,现在我们再创建一个容器,发现容器将不会虚拟出IP/端口,而是使用宿主机的IP和端口,
,
, 而在hosto模式中,我们只能进入第一个创建的容器里,
,
网络模式与数据卷容器挂载的操作,
,
,
,挂载后也可以进行访问tomcat: ,
,为什么需要自定义网络,因为当使用docker引擎进行部署项目在容器中之后,会被分配随机IP,当关闭之后再开启时,所被分配的IP地址极大可能会不一样。,作用:创建容器的时候可以指定IP地址,
,改成自己的容器就行,
,
, 当有部署很多微服务需要暂停时,该自定义的ip也不会随便改变了,