一、Docker 网络管理简介

为什么需要Docker网络管理

容器的网络默认与宿主机、与其他容器都是相互隔离。

容器中可以运行一些网络应用(如nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用,那么就需要配置网络来实现。

有可能有的需求下,容器不想让它的网络与宿主机、与其他容器隔离。

有可能有的需求下,容器根本不需要网络。

有可能有的需求下,容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)。

有可能有的需求下, 容器数量特别多,体量很大的一系列容器的网络管理如何 ……

因此容器的网络管理是非常重要的

Docker中有哪些网络驱动模式

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

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

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

Overlay network 模式(覆盖网络): 利用VXLAN实现的bridge模式

Macvlan network 模式:容器具备Mac地址,使其显示为网络上的物理设备

Docker网络管理命令

查看网络 – docker network ls

作用:     查看已经建立的网络对象

命令格式:     docker network ls [OPTIONS]

命令参数(OPTIONS):     -f, --filter filter           过滤条件(如 'driver=bridge’)

--format string       格式化打印结果

--no-trunc            不缩略显示

-q, --quiet                   只显示网络对象的ID

注意:     默认情况下,docker安装完成后,会自动创建bridge、host、none三种网络驱动

命令演示:

 创建网络 – docker network create

作用:     创建新的网络对象

命令格式:     docker network create [OPTIONS] NETWORK

命令参数(OPTIONS):     -d, --driver string                指定网络的驱动(默认 "bridge")

--subnet strings               指定子网网段(如192.168.0.0/16、172.88.0.0/24)

--ip-range strings             执行容器的IP范围,格式同subnet参数

--gateway strings              子网的IPv4 or IPv6网关,如(192.168.0.1)

注意:     host和none模式网络只能存在一个     docker自带的overlay 网络创建依赖于docker swarm(集群负载均衡)服务     192.168.0.0/16 等于 192.168.0.0~192.168.255.255    192.168.8.0/24     172.88.0.0/24 等于 172.88.0.0~172.88.0.255

命令演示:

网络删除 – docker network rm

作用:     删除一个或多个网络

命令格式:     docker network rm NETWORK [NETWORK...]

命令参数(OPTIONS):     无

查看网络详细信息 – docker network inspect

作用:     查看一个或多个网络的详细信息

命令格式:     docker network inspect [OPTIONS] NETWORK [NETWORK...]

或者 docker inspect [OPTIONS] NETWORK [NETWORK...]

命令参数(OPTIONS):     -f, --format string       根据format输出结果

使用网络 – docker run --network

作用:     为启动的容器指定网络模式

命令格式:     docker run/create --network NETWORK

命令参数(OPTIONS):     无

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

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

作用:     将指定容器与指定网络进行连接或者断开连接

命令格式:     docker network connect [OPTIONS] NETWORK CONTAINER

docker network disconnect [OPTIONS] NETWORK CONTAINER

命令参数(OPTIONS):     -f, --force           强制断开连接(用于disconnect)

二、Docker网络模式简介

bridge 网络模式(一)

特点: 宿主机上需要单独的bridge网卡,如默认docker默认创建的docker0。

容器之间、容器与主机之间的网络通信,是借助为每一个容器生成的一对veth pair虚拟网络设备对,进行通信的。一个在容器上,另一个在宿主机上。

每创建一个基于bridge网络的容器,都会自动在宿主机上创建一个veth**虚拟网络设备。

外部无法直接访问容器。需要建立端口映射才能访问。

容器借由veth虚拟设备通过如docker0这种bridge网络设备进行通信。

每一容器具有单独的IP

bridge 网络模式(二) – 端口映射

作用:     启动的容器时,为容器进行端口映射

命令格式:     docker run/create -P …       或者 docker run/create –p …

命令参数(OPTIONS):     -P, --publish-all        将容器内部所有暴露端口进行随机映射

-p, --publish list     手动指定端口映射

注意:     -p [HOST_IP]:[HOST_PORT]:CONTAINER_PORT

如:-p ::80        将容器的80端口随机(端口)映射到宿主机任意IP

-p :8000:6379     将容器的6379端口映射到宿主机任意IP的8000端口

-p 192.168.5.1::3306    将容器的3306端口随机(端口)映射到宿主机的192.168.5.1IP上

host 网络模式

特点:

容器完全共享宿主机的网络。网络没有隔离。宿主机的网络就是容器的网络。

容器、主机上的应用所使用的端口不能重复。例如:如果宿主机已经占用了8090端口,那么任何一个host模式的容器都不可以使用8090端口了;反之同理。

外部可以直接访问容器,不需要端口映射。

容器的IP就是宿主机的IP

特殊host 网络模式(Container网络模式)

Container网络模式,其实就是容器共享其他容器的网络。

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

这些容器之间的特性同host模式。

使用方法:     Docker run/create --network container:CONTAINER …

none 网络模式

特点:

容器上没有网络,也无任何网络设备。

如果需要使用网络,需要用户自行安装与配置。

应用场景

该模式适合需要高度定制网络的用户使用

overlay 网络模式(一)

Overlay 网络,也称为覆盖网络。

Overlay 网络的实现方式和方案有多种。Docker自身集成了一种,基于VXLAN隧道技术实现。

Overlay 网络主要用于实现跨主机容器之间的通信。

应用场景:需要管理成百上千个跨主机的容器集群的网络时。

overlay 网络模式(二)- 了解TCP/IP协议栈

overlay 网络模式(三)- 实现原理

IP隧道网络原理

macvlan 网络模式

macvlan网络模式,最主要的特征就是他们的通信会直接基于mac地址进行转发。

这时宿主机其实充当一个二层交换机。Docker会维护着一个MAC地址表,当宿主机网络收到一个数据包后,直接根据mac地址找到对应的容器,再把数据交给对应的容器。

容器之间可以直接通过IP互通,通过宿主机上内建的虚拟网络设备(创建macvlan网络时自动创建),但与主机无法直接利用IP互通。

应用场景:由于每个外来的数据包的目的mac地址就是容器的mac地址,这时每个容器对于外面网络来说就相当于一个真实的物理网络设备。因此当需要让容器来的网络看起来是一个真实的物理机时,使用macvlan模式

三、总结

重点掌握: bridge网络、host网络、Container网络模式的原理和使用(应用得较多,且host网络性能最优)。 docker network命令的使用

了解: none网络的效果 overlay网络、macvlan网络的原理。(使用起来难度较大)

Docker核心技术之网络管理相关推荐

  1. Docker核心技术

    整理自<Docker技术入门与实践>(杨保华 戴王剑 曹亚仑) - Docker核心技术一文. Docker是一种基于Linux Container(LXC)技术实现的容器虚拟化技术,现又 ...

  2. Docker核心技术之联合文件系统

    本文来说下docker核心技术之联合文件系统 文章目录 概述 概述

  3. 后端技术杂谈10:Docker 核心技术与实现原理

    Docker 核心技术与实现原理 30 NOV 2017  docker  namespaces  cgroups  unionfs  aufs  server Namespaces 进程 网络 挂载 ...

  4. 【云原生进阶之容器】第一章Docker核心技术1.6节——UnionFS

    <重识云原生系列>专题各章首节索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第三章云存储第1节--分布式云存储总述 第四章云网络第一节--云网络技术发展简 ...

  5. 【重识云原生】第六章容器6.1.8节——Docker核心技术UnionFS

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  6. Docker核心技术学习笔记

    Docker核心技术 文章目录 Docker核心技术 一 .Docker简介 二.Docker安装 前提说明 Docker 的基本组成 安装 centos 7 安装docker 启动hello-wor ...

  7. 深入剖析docker核心技术(namespace、cgroups、union fs、网络)

    深入剖析docker核心技术 前言 docker概述 为什么要用docker Namespace 概述 实现 操作方法 隔离性 常用操作 Cgroups 概述 实现 配额和度量 CPU 子系统 Lin ...

  8. Docker核心技术(二):网络管理

    一.Docker 网络管理简介 为什么需要Docker网络管理 容器的网络默认与宿主机.与其他容器都是相互隔离. 容器中可以运行一些网络应用(如nginx.web应用.数据库等),如果要让外部也可以访 ...

  9. 深入浅出Docker(一):Docker核心技术预览

    [编者按]Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种 ...

最新文章

  1. oracle导入dmp报无效的sql,oracle施用pl/sql导入数据库备份文件dmp导入失败原因
  2. Rsync和Sersync(企业实时同步方案)
  3. cpci检索为什么那么慢_索引原理与慢查询优化
  4. 博客园添加一个分享的
  5. 【深度学习】mask_rcnn训练自己的数据集以及模型使用(实践结合GitHub项目)
  6. 网速dns怎么调快_怎么设置dns?教你快速解决网速慢的问题
  7. DxO FilmPack 5教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
  8. 【ECCV2020】完整论文集part2
  9. 转 markdown编写规则、语法
  10. 软件开发文档-详细设计文档
  11. kubuntu18.04 重装显卡驱动后无法进入桌面
  12. Java应用无响应、内存飙升、CPU飙升排查
  13. 转载:声优 - 野上ゆかな
  14. 如何向PD充电器取电9V12V15V20V给电池或者智能家居供电快充?
  15. 基础用户登录测试用例-最全用例设计
  16. 网站被黑该怎么处理和解决
  17. 2021年度总结:这一年你过的怎么样?
  18. 动态规划(Dynamic Programming)的一些事一些情
  19. AWS S3数据传输实验
  20. 物理层——奈氏准则和香农定理

热门文章

  1. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define
  2. 网络安全工具:Wireshark
  3. xgboost重要参数1
  4. matplotlib绘制热力图
  5. github下载慢,轻松提速教程
  6. Adam那么棒,为什么还对SGD念念不忘 (3)—— 优化算法的选择与使用策略
  7. 超车新势力齐聚港股,谁主沉浮?
  8. 深度学习到底有哪些卷积?
  9. 电脑总有安装计算机更新,为什么我们的电脑总会莫名的安装垃圾软件,看完吓一跳,欢迎关注...
  10. C++ .h(头文件) 与 .cpp(源文件) 的使用