一、Docker的四种网络模式

1、Docker 的四种网络模式:

  Bridge container 桥接式网络模式

  Host(open) container 开放式网络模式

  Container(join) container 联合挂载式网络模式,是host网络模式的延伸

  None(close) container 封闭式网络模式

2、 查看容器运行的网络模式:

# 通过network命令查看

[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
afd8d014c5c8 bridge bridge local
f5b851d0c981 host host local
11159852eb6f none null local

  

3、指定容器运行的网络模式:

  docker run --network 命令可以指定使用网络模式 【详细命令见后文】

二、Bridge 网络模式

1、什么是 Bridge 网络模式

当 Docker 进程启动时,会在主机(宿主机)上创建一个名为 docker0 虚拟网桥,之后,在这台主机(宿主机)是上启动的 Docker容器会连接到这个虚拟的网桥上,导致有一个默认的172.17.0.0/16的地址。虚拟网桥的工作方式和物理交换机类似,这样主机(宿主机)就通过一个交换机连接在一个二层网络中。

从docker0 子网中分配一个ip给容器使用,并设置 docker0 的ip地址为容器的默认网关。在主机(宿主机)上创建一对虚拟网卡veth pair设备,Docker将veth pair设备加入到docker0网桥中。可以通过brctl show命令查看。

PS:安装网桥管理工具包:bridge-utile,

[root@docker ~]# yum install bridge-utils -y

[root@docker ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242a5b745b3 no vethd2cbd21
 

bridge 模式是docker的默认网络模式,不写 --net参数,就是默认bridge模式。使用docker run -p时,docker实际就是在iptables上做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL 查看。

[root@docker ~]# iptables -t nat -vnL
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * !docker0 172.18.0.0/16 0.0.0.0/0

2、bridge 模式示意图

3、创建示例

bridge 网络模式;--network不指定,默认也是bridge模式

# 1. # 启动一个bridge模式的容器
[root@docker ~]# docker run -it --name busybox1 --network bridge busybox:latest
/ # ip a # 查看ip地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:3/64 scope link
valid_lft forever preferred_lft forever

/ # route -n # 查看路由
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.18.0.1 0.0.0.0 UG 0 0 0 eth0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

/ # ping 118.25.159.45 # ping 主机(宿主机)
PING 118.25.159.45 (118.25.159.45): 56 data bytes
64 bytes from 118.25.159.45: seq=0 ttl=62 time=1.062 ms
64 bytes from 118.25.159.45: seq=1 ttl=62 time=0.261 ms
^C
--- 118.25.159.45 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.261/0.661/1.062 ms

/ # exit # 退出

  

三、Host 网络模式

1、什么是 Host 网络模式

如果启动容器的时候使用的是host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

2、Host模式示意图

3、创建示例

[root@docker ~]# docker run -it --name busybox2 --network host busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 52:54:00:6c:b4:a0 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.9/20 brd 172.17.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe6c:b4a0/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 02:42:20:a3:10:1e brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:20ff:fea3:101e/64 scope link
valid_lft forever preferred_lft forever
11: veth249dde6@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0
link/ether de:80:5f:66:26:6f brd ff:ff:ff:ff:ff:ff
inet6 fe80::dc80:5fff:fe66:266f/64 scope link
valid_lft forever preferred_lft forever
/ # exit

 

四、Container 网络模式

1、什么是 Container 网络模式

这个模式指定新创建的容器和已存在的一个容器共享一个 Network Namespace,而不是和主机(宿主机)共享。新创建的容器不会创建自己的网卡,配置自己的ip,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过io网卡设备通信。

2、Container 模式示意图

3、创建示例

# 创建一个bridge网络模式的容器busybox_01

 [root@docker ~]# docker run -it --name busybox_01 --network bridge busybox:latest
/ # ip a # 查看得出IP地址为172.18.0.3
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:3/64 scope link
valid_lft forever preferred_lft forever
/ # echo "This is busybox_01 !!!" /tmp/index.html
This is busybox_01 !!! /tmp/index.html
/ # httpd -h /tmp/
/ # netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::80 :::* LISTEN 8/httpd
# 启动另一个终端使用 Container 网络模式创建容器busybox_02

[root@docker ~]# docker run -it --name busybox_02 --network container:busybox_01 busybox:latest
/ # ip a # 和busybox_01共用一个ip
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:3/64 scope link
valid_lft forever preferred_lft forever
/ # netstat -lntp # 查看得出有httpd服务
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::80 :::* LISTEN -
/ # ls /tmp/ # 文件系统并不共享,只共享网络

五、None 网络模式

1、什么是 None 网络模式

使用 none 模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何的网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有IO网络接口。需要我们自己为Docker容器添加网卡、配置IP地址等。

不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无需网络通信的场景中,例如:备份、进程诊断和各种离线任务等。

2、None模式示意图

3、创建示例

[root@docker ~]# docker run -it --name busybox --network none busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
/ # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface

Docker系列02—Docker 网络模式的更多相关文章

  1. Docker系列04—Docker的网络模式详解

    本文收录在容器技术学习系列文章总目录 1.Docker的四种网络模式 (1)docker四种网络模式如下: Bridge contauner   桥接式网络模式 Host(open) containe ...

  2. docker学习3-虚拟网络模式

    一.虚拟机网络模式 在理解docker网络隔离前,先看下之前虚拟机里对网络的处理,VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-onl ...

  3. Docker的4种网络模式

    我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定. · container ...

  4. 1021 docker搭建mysql、网络模式、grid

    1.搭建并连接mysql服务 1.1.mysql官方命令 https://hub.docker.com/_/mysql/ #下载mysql镜像: docker pull mysql #启动mysql: ...

  5. Docker的4种网络模式详细介绍

    docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式: bridge模式:使用–net =bridge指定: host模式:使用–net = ...

  6. Docker系列02: 容器生命周期管理 镜像&容器

    A) Docker信息1. 查看docker运行状态 systemctl status docker docker.service - Docker Application Container Eng ...

  7. Docker系列03—Docker 基础入门

    本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...

  8. Docker系列二: docker常用命令总结

    https://docs.docker.com/reference/  官方命令总结地址 容器生命周期管理 1.docker run 创建一个新的容器并运行一个命令 docker run [optio ...

  9. Docker系列01—Docker 基础入门

    一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...

随机推荐

  1. Appium自动化测试之环境安装

    安装前准备: Python 安装包下载       选择想要想在的python包Node-v6.11.2下载安卓SDK下载appium_forwindows下载 以上四个文件下载下来后,分别解压安装, ...

  2. 《我想进大厂》之Redis夺命连环11问

    这是面试题系列第三篇--redis专题. 说说Redis基本数据类型有哪些吧 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型.C语言的字符串不记 ...

  3. 基于空镜像scratch创建一个新的Docker镜像

    我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像.优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包. 比如我机器上docke ...

  4. Python+Appium自动化测试(5)-appium元素定位常用方法

    对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor.之前已经介绍过了weditor的使用,这里我将 ...

  5. 前端传递的json格式与SpringMVC接收实体类的对应关系

    这篇文章主要是帮助刚刚入行的猿猿尽快适应Restful风格的搬砖生活 @RequestBody注解 基本介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数 ...

  6. Linux设备驱动中的阻塞和非阻塞I/O <转载>

    Green 博客园 首页 新随笔 联系 订阅 管理 Linux设备驱动中的阻塞和非阻塞I/O   [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件 ...

  7. 【线段树分治】Dash Speed

    代码的美妙 #include <bits/stdc++.h> %:pragma GCC optimize(3) using namespace std; const int maxn=7e ...

  8. 【事件中心 Azure Event Hub】在Linux环境中(Ubuntu)安装Logstash的简易步骤及配置连接到Event Hub

    在文章([事件中心 Azure Event Hub]使用Logstash消费EventHub中的event时遇见的几种异常(TimeoutException, ReceiverDisconnected ...

  9. C# POst 接收或发送XML

    摘自:http://www.cnblogs.com/Fooo/p/3529371.html 项目分成两个 web(ASP.Net)用户处理请求,客户端(wpf/winform)发送请求 1.web项目 ...

  10. JS的Document属性和方法(转)

    document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)docume ...