前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker | Docker技术基础梳理(五) - Docker网络管理

Docker | Docker技术基础梳理(五) - Docker网络管理

作者头像
咸鱼学Python
发布2019-10-09 14:42:22
7400
发布2019-10-09 14:42:22
举报
文章被收录于专栏:咸鱼学Python咸鱼学Python
为什么需要容器的网络管理?

容器的网络默认与宿主机、与其他容器相互隔离,且容器中可以运行一些网络应用,比如nginx、web应用、数据库等,如果需要让外部也可以访问这些容器中运行的网络应用,那么就需要配置网络来实现。

同样的,不同需求下,容器与宿主机的通信有不同的业务状态这时候就需要容器网络管理以达成管理不同业务下相关的网络配置。

Docker中的网络驱动模式有那些?

bridge network(网桥)模式:默认的网络模式,类似虚拟机的nat模式

host network(主机)模式:容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络

none network模式:容器禁用所有网络

overlay network(覆盖)模式:利用vxlan实现的bridge模式

macvlan network模式:容器具备MAC地址,使其在外部看来是一台真实的网络设备

Docker网络管理命令浅析
查看网络(docker network ls)

命令格式: docker network ls [参数]

常用参数:

代码语言:javascript
复制
-q 只显示网络对象的ID

注意: docker安装之后,会自动创建bridge、host、none三种网络驱动。

创建网络(docker network create)

命令格式:docker network create [参数] 网络

常用参数:

代码语言:javascript
复制
-d 指定网络的驱动,不指定默认为bridge
-- subnet 指定子网网段(192.168.0.0/16)
-- ip-range 指定容器的IP范围
-- gateway 子网的网

注意:

  • 创建网络部分参数,涉及到网络工程师相关的知识,这里不做详细介绍有需要可以参考「计算机网络」这本书,内有详解。
  • host、none模式的网络只能存在一个,再次创建会报错。
  • overlay网络创建依赖于docker swarm(集群负载均衡)服务
网络删除(docker network rm)

删除一个或多个网络

命令格式:docker network rm 网络[网络..]

查看网络详细信息(docker network inspect)

命令格式:

docker network inspect [参数] 网络

docker inspect [参数] 网络

常用参数:

代码语言:javascript
复制
-f 根据format输出结果
使用网络(docker run)

命令格式:docker run/create --network 网络

注意:默认情况下,docker创建或启动容器时,会默认使用名为bridge的网络

网络连接与断开(docker network connect /disconnect)

命令格式:

docker network connect/disconnect [参数] 网络 容器

常用参数:

代码语言:javascript
复制
-f 强制断开连接
Docker网络模式简介
bridge网络模式
  1. bridge网络模式的特点:
  • 宿主机上需要单独的bridge网卡,如默认docker默认创建的docker0。
  • 容器之间、容器与主机之间的网络通信,是借助为每一个容器生成的一对veth pair虚拟网络设备对,进行通信的。一个在容器上,另一个在宿主机上。(这是网桥)
  • 每创建一个基于bridge网络的容器,都会自动在宿主机上创建一个veth**虚拟网络设备。 外部无法直接访问容器。需要建立端口映射才能访问。(可以理解为网卡)
  • 容器借由veth虚拟设备通过如docker0这种bridge网络设备进行通信。
  • 每一容器具有单独的IP
  • bridge网络模式下宿主机与容器服务使用的端口可以重复

bridge原理示意图

  1. bridge网络模式下的端口映射 根据上面关于bridge的特点我们可以知道访问bridge网络模式的设备,需要端口映射。

端口映射的命令格式:docker run/create -P/-p

命令参数:

代码语言:javascript
复制
-P 将容器内部所有暴露端口进行随机映射
-p 手动指定端口映射 (-p [宿主机IP] : [宿主机端口] : 容器端口)

关于-p参数的举例:

代码语言:javascript
复制
-p ::80 将容器的80端口随机映射到宿主机的随机IP上
-p :8000:6379 将容器的6379端口映射到宿主机的任意IP的8000端口上
host网络模式

host网络模式的特点:

  • 容器完全共享宿主机的网络,网络没有隔离。宿主机的网络就是容器的网络。
  • 容器、主机上的应用所使用的端口不能重复。
  • 外部可以直接访问容器,不需要端口映射
  • 容器IP就是宿主机的IP

host网络模式示意图

除了普通的host网络模式外,同样还有特殊版本的host网络模式(container网络模式)。

container网络模式的特点:

其实就是容器共享其他容器的网络,相当于该容器,在网络层面上,将其他容器作为“主机”。它们之间的网络没有隔离。

container网络模式

container网络模式的使用:

docker run/create --network container:容器

none、overlay与macvlan网络模式

none网络模式的特点:

  • 容器上没有网络,也无需任何网络设备
  • 如果需要使用网络,需要用户自行安装与配置

overlay网络模式的特点:

  • overlay网络模式实现方案有很多种,在Docker自身集成了一种,基于VXLAN隧道技术实现
  • overlay网络主要用于实现跨主机容器之间的通信

macvlan网络模式的特点:

  • macvlan的主要特点就是通信直接基于mac地址进行转发
  • 在macvlan中宿主机担任的角色是一台二层交换机,docker会维护一张mac地址表,当宿主机收到数据包时,直接根据mac地址找到对应的容器
  • 而在容器内部互相通信的时候,容器直接使用IP互通,所以每个容器对于外面的网络都是一台真实的网络设备
总结

这次文章主要复习了docker的网络管理的内容,其中host,bridge,container是主要的复习内容,且在三种网络模式中建议优先选用host网络模式,其使用性能最优。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么需要容器的网络管理?
  • Docker中的网络驱动模式有那些?
  • Docker网络管理命令浅析
    • 查看网络(docker network ls)
      • 创建网络(docker network create)
        • 网络删除(docker network rm)
          • 查看网络详细信息(docker network inspect)
            • 使用网络(docker run)
              • 网络连接与断开(docker network connect /disconnect)
              • Docker网络模式简介
                • bridge网络模式
                  • host网络模式
                    • none、overlay与macvlan网络模式
                    • 总结
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档