关于docker:系统学习DockerDocker网络

4次阅读

共计 3310 个字符,预计需要花费 9 分钟才能阅读完成。

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-jdk8
docker 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/sh
docker 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-jdk8

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

正文完
 0