Docker网络

Docker网络作用:容器间的互联和通信以及端口映射,容器IP变动时候可以通过服务名直接网络通信而不受到影响

常用基本命令

docker newwork --help
docker network ls #查看网络
docker network inspect  XXX网络名字  #查看网络源数据
docker network rm XXX网络名字 #删除网络

网络模式有五种

  • bridge模式:使用–network bridge指定,默认使用docker0
  • host模式:使用–network host指定
  • none模式:使用–network none指定
  • container模式:使用–network container:NAME或者容器ID指定
  • 自定义网络

容器实例内默认网络IP生产规则

1 先启动两个ubuntu容器实例
Docker网络

2 docker inspect 容器ID or 容器名字
Docker网络
3 关闭u2实例,新建u3,查看ip变化
Docker网络
可以看出:docker容器内部的ip是有可能会发生改变的

bridge

桥接模式

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信
Docker网络

# 查看 bridge 网络的详细信息,并通过 grep 获取名称项
docker network inspect bridge | grep name

Docker网络

ifconfig | grep docker

Docker网络

docker run -d -p 8081:8080   --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080   --name tomcat82 billygoo/tomcat8-jdk8

Docker网络

host

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。

容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
Docker网络

docker run -d  --network host --name tomcat83 billygoo/tomcat8-jdk8
#这里就不要写 -p 了,通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。
docker inspect tomcat83 | tail -n 20
#可以看到Networks里边Gateway和IPAddress都是空

此时访问 http://宿主机IP:8080/即可访问tomcat

none

在none模式下,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo
需要我们自己为Docker容器添加网卡、配置IP等。
Docker网络
在容器外部查看
Docker网络

container

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
Docker网络
用Alpine Linux镜像模拟,用tomcat会公用同一个ip同一个端口,导致端口冲突

docker run -it                             --name alpine1  alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2  alpine /bin/sh

运行结果,验证共用搭桥
Docker网络
关闭alpine1,再看看alpine2也没了
Docker网络

自定义网络

自定义桥接网络,自定义网络默认使用的是桥接网络bridge

docker network ls
#新建自定义网络
docker network create zzyy_newwork

新建容器加入上一步新建的自定义网络

docker run -d -p 8081:8080 --network zzyy_network  --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network zzyy_network  --name tomcat82 billygoo/tomcat8-jdk8

互相ping测试
Docker网络
Docker网络
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

上一篇:剑指offer(第二版)——重建二叉树


下一篇:递归算法及其案例用途