回顾

我们没有开启docker,直接在虚拟机里面使用命令,ifconfig
我们可以看到


在我们启动docker时候,我们查看


会多了一个docker0

docker0 讲解


会多了一个docker0;

·查看docker网络模式命令

默认创建3大网络模式

docker network ls

docker关于网络的常用命令

查看网络

docker network ls

查看网络源数据

docker network inspect XXX网络名字

删除网络

docker network rm XXX网络名字

docker 网络能干嘛

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

网络模式

·bridge模式:使用--network  bridge指定,默认使用docker0
·host模式:使用--network host指定
·none模式:使用--network none指定
·container模式:使用--network container:NAME或者容器ID指定

·docker容器内部的ip是有可能会发生改变的
也就是我们创建每一个容器,里面默认的网络模式是bridge,如果我们关闭容器,启动容器,里面的ip是可能变化的

bridge模式

网桥;

我们的虚拟机里面,进入虚拟机,看当前虚拟机的ip,使用ifconfig就可以查看到
有一个ens33了,里面就有当前虚拟机的ip;
只要我们把虚拟机的防火墙关闭,在外面浏览器,就可以访问到这个ip里面的东西,也就是这个虚拟机和外界互通的,网络互通的

我们启动了docker,这个docker也创建了一个ip,叫docker0


也就是在docker里面的网络操作,就是关联ens33,就是docker里面的操作,和网络关联的,先通过docker0,之后关联到ens33,之后到我们的外网;

他们就是这样关联的;

我们在docker里面还可以创建容器,每一个容器里面也有ip,那么在容器里面要访问网络,就要一层一层的关联到外面了

他们之间的关系可以这样表示


从上图可以看到,容器直接互相访问,需要docker0

host模式

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

也就是我们创建的容器如果是以host的模式,那么这个容器里面没有ip了,默认和ens33的ip一样,没有中间的docker0了;


容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

none模式

在none模式下,并不为Docker容器进行任何网络配置。
也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo
需要我们自己为Docker容器添加网卡、配置IP等。
·禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

使用了这个,就是没网络了

container模式

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

自定义网络

为什么要使用这个?

两个容器里面,互相ping,通过ip地址是可以互通的,但是IP地址是随机变化的,我们想要使用服务名进行互相联通,所以就不能使用gridge了;
我们就需要自定义的网络了;

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

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

新建容器的时候,使用了自己新建的网络模式,那么两个容器之间互通,就可以使用容器的服务名