Docker网络

我们之前使用的都是docker默认的网络,学习本章之后就可以创建自己的docker了。创建之前先解决两个问题

  1. docker是如果处理容器网络访问的?
  2. 每次启动容器docker都会重新分配一个ip,导致之前的ip无效,如何解决这个问题

一、Docker如何处理容器网络

1. Docker网络查看

在本机中使用ip addr可以查看到linux的网络情况,可以看到docker0的网关是172.18.0.1

2. 容器网络查看

在此之前我已经启动了两个容器,一个mytomcat8.5和mysql5.7,我们先通过docker exec -it mytomcat8.5 ip addr查看容器的网络,可以看出它的ip是172.168.0.4,显然属于docker0分配出来的一个ip。

在本机中使用ip addr查看网络

我们发现188和187是互相绑定的,即在运行容器时,会生成一对网络地址,分别在宿主机和容器中,而这个具体的网络地址172.18.0.4就是容器的ip。

理解:在安装docker时,会有一个docker0的网卡,默认是桥接模式,并且每启动一个容器,docker都会给docker容器分配一个ip,使用的是evth-pair技术

二、Docker固定IP

很简单,可以在启动时,启用自定义网络,并指定固定的ip

docker run -d -p 4567:8080 --name tomcat03 --ip 172.18.0.8  tomcat:8.0.30

三、自定义网络

1. docker network命令

查看docker 网卡命令docker network ls

2. 查看docker网卡详情

通过网卡详情可以从中能看到所有容器的网络配置,如之前创建的mytomcat8.5和mysql5.7的ip信息等

docker network inspect 网卡ID

3. docker 网络模式

bridge :桥接模式(默认模式,自定义时也使用这个为基础)

none:不配置网络

host:和宿主机共享网络

container:容器网络连通(用的少,局限性很大)

docker启动时,默认使用就是网络bridge模式,网络名称也是bridge

docker run -d -P --name tomcat01 --net bridge --ip 172.18.0.3 tomcat:8.0.30

4. 自定义网络

命令docker network create

docker network create --driver bridge --subnet 192.170.0.0/16 --gateway 192.170.0.1 mynet2

命令解释:

--driver bridge 设置模式为bridge
--subnet 192.170.0.0/16 设置子网个数
1、8位时,即255.0.0.0,子网占24位,可用IP数为2^24-2=16777214个。
2、16位时,即255.255.0.0,子网占16位,可用IP数为2^16-2=65534个。
3、24位时,即255.255.255.0,子网占8位,可用IP数为2^8-2=254个。
--gateway 192.170.0.1 设置默认网关
mynet2 网络名称

使用自定义网络启动容器

docker run -d -p 5678:8080 --name tomcat02 --net mynet2 --ip 192.170.0.2  tomcat:8.0.30

我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络

好处:

所以不同的应用集群可以使用不用的网络,如redis,mysql等,保证集群的网络安全。

四、自定义的网络连通

顺带提下,docker可以创建一个自定义网络与默认的docker0隔离,也可以连通,通过docker network connect这里的连通并不是将默认网卡和自定义网卡直接连通,而是将运行在默认网卡容器连通到自定义网络中,使之能访问互相访问

如以之前的tomcat01和tomcat02为例,tomcat01在默认的网络docker0中ip是172.18.0.3,tomcat02在自定义网络mynet2中ip是192.170.0.2,先执行ping命令

docker exec -it tomcat01 ping 192.170.0.2

发现此时一直出于等待中,没有结果,再执行连通命令

docker network connect mynet2 tomcat01

执行完成之后,没有任何消息,所以是好消息,再执行ping命令,发现已经能ping通了,执行查看mynet2的网络信息

docker network inspect ebd7168cee28

可以发现,所谓连通其实就是在tomcat01同时拥有了两个ip, 172.18.0.3和192.170.0.3