1.Docker网络是什么

2.Docker网络能做什么

3.Docker网络根本命令

4.Docker网络的四种模式以及案例阐明

5.Docker平台架构图解阐明

1.Docker网络是什么
当咱们在应用虚拟机的时候,咱们都晓得有好多种网络模式

咱们大略介绍一下这几种网络模式:
1.bridged(桥接模式)
在bridged模式下,虚拟机虚构进去的操作系统就如同局域网中一台独立的主机,能够拜访局域网中任何一台机器。然而你须要手工为其配置IP地址,子网掩码,而且还要和宿主机放弃在同一网段,这样虚拟机零碎能力和宿主机零碎进行通信。

2.NAT(网络地址转换模式)
VMnet8 默认 NAT 模式。

虚拟机向内部网络发送申请的时候,会先将数据交给NAT网络适配器由NAT网络适配器加上“标记”,并以主机的名义转发进来,内部网络返回时的数据,也先由主机接管,而后由NAT网络适配器依据“标识”转发给对应的虚拟机。因而,NAT网络模式下,虚拟机和主机共享一个IP地址,个别状况下,内部网络无法访问到虚拟机

3.host-only(仅主机模式)
仅主机模式下,虚拟机是一种与世隔绝的状态,不能连贯上外网。

虚拟机尚且有这么多网络模式,咱们docker也有三种网络模式

2.Docker网络能做什么

Docker网络个别有两个作用

2.1)容器间的互联和通信以及端口映射

咱们都晓得容器领有本人独立的IP地址,然而在容器之间如何通信哪几个容器在同一网段,还是说几个容器共享主机的同一网段,这都须要咱们领有Docker网络的常识。

2.2)容器IP变动时候能够通过服务名间接网络通信而不受到影响
咱们的容器重启/扩缩容,是常有的事,不可能咱们容器每次重启之后都要手动更改IP,所以容器之间通过Docker网络依据容器名称直连的形式就变得尤为重要

3.Docker网络根本命令
全副命令:

查看所有网络:

docker network ls

查看网络源数据:

docker network inspect  XXX网络名字

删除网络:

docker network rm XXX网络名字

查看某一容器的网络模式:

docker inspect 容器ID or 容器名字

4.Docker网络的四种模式以及案例阐明

总体介绍:

网络模式简介应用命令
bridge为每一个容器调配,设置IP,和VM的bridge模式相似。--network bridge
host虚拟机不会虚构出本人的网卡,和主机专用IP--network host
none容器有本人独立的网络,然而没有任何设置(不能连贯外网,和VM的host相似)--network none
container新的容器不会创立本人的网卡,而是和一个指定的容器共享IP,端口等等--network container:NAME或者容器ID指定

容器实例的网络模式查看:

默认为bridge模式。

4.1)bridge

Docker服务启动的时候,默认会创立一个docker0网桥:

docker0在内核层连同了物理网络,这就将所有的容器与本地的主机都放在同一个物理网络,Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间能够通过网桥互相通信。

执行过程:

4.1.1)
Docker服务在宿主机虚构一个Docker容器网桥(docker0),Docker启动一个容器的时候,会依据Docker网桥的网段调配给容器一个IP地址,同时Docker网桥就是每个容器的默认网关。因为所有同一宿主机的容器应用了bridge模式后,都接入同一个网桥,这样容器之间就能通过容器的IP进行通信。

4.1.2)
docker 在运行run命令的时候,没有指定netword的话就默认应用的是bridge模式

4.1.3)
每个容器实例有一个网卡,叫eth0.
整个宿主机的网桥模式都是docker0,相似于交换机有一堆接口,每一个接口对应一个Docker容器,让他们彼此联通。
Docker容器通过docker0实现互联docker0再通过eth33和外网进行互联,因而容器实例之间互联,同时也能拜访外网。

验证:

启动两个容器:

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

宿主机查看:

tomcat1查看:

tomcat2查看:

4.2) host
host间接应用宿主机的IP地址进行外界通信,不须要额定进行NAT转换。

案例:

正告:

docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8

如果docker启动的时候,应用--network=host,这个时候还指定了-p映射端口,这个时候就会有正告,且-p参数不会有任何成果,端口号会以主机端口号为主,反复时则递增。

正确形式:不应用任何端口号

docker run -d                          --network host --name tomcat83 billygoo/tomcat8-jdk8

此时运行的时候,就可宿主机应用同一IP了。

4.3) none

示意禁用网络性能,只有lo标识(127.0.0.1本地回环)

案例:

docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8

4.4) container

新建的容器和一个曾经存在的容器共享一个网络ip,端口等等。这两个容器除了网络,其它各方面的零碎是隔离的。

案例:

为了防止配置命令,咱们这里的案例应用Alpine Linux,他以小,平安著称,作为根底镜像是一个十分好的抉择,只有6M不到的大小。

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

运行后果,查看是否用了同一个网桥:

1号机:

2号机:

此时敞开1号机,再查看2号机,会发现网卡隐没:

4.5) 自定义网络

在后面的docker brige网络模式中,咱们会发现,能够应用ip地址相互连同,然而用服务名,无奈连同,咱们能够尝试着看看:

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

案例:

新建一个自定义网络,应用自定义网络启动docker容器

咱们能够发现用服务名的形式能够ping通:

论断:
自定义网络模式自身就保护好了主机名和ip的对应关系。

5.Docker平台架构图解阐明

在学习了Docker网络以及之前一系列的基础知识之后,咱们能够得出:Docker是一个C/S模式的架构,后端为一个松耦合的架构,泛滥模块各司其职。

Docker 运行的根本流程为:

1 用户应用 Docker Client 与 Docker Daemon 建设通信,并发送申请给后者。
2 Docker Daemon 作为 Docker 架构中的主体局部,首先提供 Docker Server 的性能使其能够承受 Docker Client 的申请。
3 Docker Engine 执行 Docker 外部的一系列工作,每一项工作都是以一个 Job 的模式的存在。
4 Job 的运行过程中,当须要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像治理驱动 Graph driver将下载镜像以Graph的模式存储。
5 当须要为 Docker 创立网络环境时,通过网络管理驱动 Network driver 创立并配置 Docker 容器网络环境。
6 当须要限度 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来实现。
7 Libcontainer是一项独立的容器治理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。