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来实现具体对容器进行的操作。