一、Docker的五种网络模式

  在使用docker run创建docker容器时,可以用--net选项指定容器的网络模式,Docker有以下5种网络模式:

  1. bridge模式

  使用docker run --net=bridge指定,bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。 此模式与外界通信使用NAT协议,增加了通讯的复杂性,在复杂场景下使用会有诸多限制。

   2. host模式

  使用docker run --net=host指定,这种模式Docker Server将不为Docker容器创建网络协议栈,即不会创建独立的network namespace,Docker容器中的进程处于宿主机的网络环境中,相当于Docker容器的宿主机共用同一个network namespace,使用宿主机的网卡、IP、端口等信息。此模式没有网络隔离性,同时会引起网络资源的竞争与冲突。 

docker run -it --rm --name=centos-test --net=host centos:7 /bin/bash

# --rm :当进入到容器后,退出时将删除该容器

yum -y install net-tools

[root@localhost ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:f9:fe:32:41 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.200.208 netmask 255.255.255.0 broadcast 172.16.200.255
inet6 fe80::20c:29ff:fefc:9a4b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:fc:9a:4b txqueuelen 1000 (Ethernet)
RX packets 47243 bytes 18062368 (17.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17177 bytes 2678186 (2.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 112 bytes 6172 (6.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 112 bytes 6172 (6.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  使用host模式container 和宿主机的IP一样

  3.container模式

   使用docker run --net=container:othercontainer_name指定,这种模式与host模式相似,指定新创建的容器和已经存在的某个容器共享同一个network namespace, 以下两种模式都共享network namespace,区别就在于host模与宿主机共享,而container模式与某个存在的容器共享。 在container模式下,两个容器的进程可以通过lo回环网络设备通讯,增加了容器间通讯的便利性和效率。container模式的应用场景就在于可以将一个应用的多个组件放在不同的容器趾,这些 容器配成container模式的网络,这样它们可以作为一个整体对外提供服务。同时,这种模式也降低了容器间的隔离性。

  

# 1. 启动一个现有容器
[bigberg@localhost ~]$ docker-enter my-test
Last login: Mon Feb 26 03:42:28 UTC 2018
[root@0cd0fd089ea0 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 16 bytes 1296 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # 新建一个容器 [bigberg@localhost ~]$ docker run -it --net=container:my-test --name=my-test2 centos:7 /bin/bash [root@0cd0fd089ea0 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 9021 bytes 13565843 (12.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7500 bytes 503022 (491.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  可以看到两个容器eth0的IP地址一样

  4.none模式

  使用docker run --net=none指定,在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。这种模式如果不进行特定的配置是无法正常使用的,但它也给了用户最大的自由度来自定义容器的网络环境。 

[bigberg@localhost ~]$ docker run --rm -it --net=none --name=test01 test/centos:v1.0 /bin/bash
[root@006f8d383dd3 /]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  

  5.overlay模式

overlay网络特点:

  • 跨主机通讯
  • 无需做端口映射
  • 无需担心IP冲突

  

Docker入门与应用系列(四)网络管理的更多相关文章

  1. 《Visual C++ 2010入门教程》系列四:VC2010中初学者常见错误、警告和问题

    <Visual C++ 2010入门教程>系列四:VC2010中初学者常见错误.警告和问题   这一章将帮助大家解释一些常见的错误.警告和问题,帮助大家去理解和解决一些常见问题,并了解它的 ...

  2. Docker入门与应用系列(四)数据卷管理

    一.介绍 Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存 ...

  3. Docker 入门到实践(四)Docker 使用镜像

    一.获取镜像 Docker Hub 上有大量的高质量的镜像让我们获取,命令为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 具体的选项可以 ...

  4. Docker入门与应用系列(三)容器管理

    一.启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将终止状态的容器重新启动. 1.1 新建并启动 主要命令为 docker run 下面的命令输出一个”Hello,world ...

  5. Docker入门与应用系列(一)介绍和部署

    Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  6. Docker入门与应用系列(一)介绍与部署

    Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  7. Docker入门与应用系列(二)镜像管理

    1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...

  8. Docker入门与应用系列(五)Dockerfile

    Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...

  9. Docker入门与应用系列(六)Docker私有与公共镜像仓库

    1.搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像:如果想搭建自己的私有镜像仓库,官方提供registry镜像,使搭建私有仓库非常简单 1.1下载registry镜像并启动 d ...

随机推荐

  1. web07-jdbcBookStore

    新建web项目,名字 新建servlet,名字CreateDBServlet 内容为: ---- 配置web.xml 数据库的URL.driveclass.user.passWord都写在web.xm ...

  2. stateful openflow------整理openstate原理以及具体应用

    openstate基本思想就是控制器下放一部分功能,交换机不再是简单的dumb,而是保留一些简单的wise. 论文中以端口锁定为例,提出了米粒型状态机在交换机内部的应用从而可以大大减少交换机和控制器之 ...

  3. 软工1816 · Beta冲刺(2/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成考试 确定历史记录页面与排行榜页面的前端页面风格 接下来的计划 & ...

  4. Hibernate主键注解

    http://www.cnblogs.com/hongten/archive/2011/07/20/2111773.html 版权声明:本文为博主原创文章,未经博主允许不得转载.

  5. Hibernate left join

    6.4.5  左外连接 左外连接(Left Outer Join)查询出左表对应的复合条件的所有记录,如查询李晓梅同学的选课信息.下面是类HQLLeftOuterJoinQuery的源代码. 其实关联 ...

  6. java下Mysql基本操作

    https://www.cnblogs.com/centor/p/6142775.html

  7. ASP.NET MVC 2.0 参考源码索引

    http://www.projky.com/asp.netmvc/2.0/System/Web/Mvc/AcceptVerbsAttribute.cs.htmlhttp://www.projky.co ...

  8. 转 webpack 插件 svg-sprite-loader

    最近开始看 Vue 了,首先用官方的模版把项目快速搭建起来: Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程.只需几分钟即 ...

  9. Scrum 7.0

    Sprint回顾 让我们一次比一次做得更好.   1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. ...

  10. HTML常用标签及约束

    注释 <!--这是一段注释--> 样式表 外部样式(CSS) <head> <link rel="stylesheet" type="tex ...