Docker系列02—Docker 网络模式
一、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 网络模式的更多相关文章
- Docker系列04—Docker的网络模式详解
本文收录在容器技术学习系列文章总目录 1.Docker的四种网络模式 (1)docker四种网络模式如下: Bridge contauner 桥接式网络模式 Host(open) containe ...
- docker学习3-虚拟网络模式
一.虚拟机网络模式 在理解docker网络隔离前,先看下之前虚拟机里对网络的处理,VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-onl ...
- Docker的4种网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定. · container ...
- 1021 docker搭建mysql、网络模式、grid
1.搭建并连接mysql服务 1.1.mysql官方命令 https://hub.docker.com/_/mysql/ #下载mysql镜像: docker pull mysql #启动mysql: ...
- Docker的4种网络模式详细介绍
docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式: bridge模式:使用–net =bridge指定: host模式:使用–net = ...
- Docker系列02: 容器生命周期管理 镜像&容器
A) Docker信息1. 查看docker运行状态 systemctl status docker docker.service - Docker Application Container Eng ...
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...
- Docker系列二: docker常用命令总结
https://docs.docker.com/reference/ 官方命令总结地址 容器生命周期管理 1.docker run 创建一个新的容器并运行一个命令 docker run [optio ...
- Docker系列01—Docker 基础入门
一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...
随机推荐
- 谈谈InnoDB中的B+树索引
索引类似于书的目录,他是帮助我们从大量数据中快速定位某一条或者某个范围数据的一种数据结构.有序数组,搜索树都可以被用作索引.MySQL中有三大索引,分别是B+树索引.Hash索引.全文索引.B+树索引 ...
- 在自己电脑上查看git远程分支列表比实际云端的远程分支要多一些
问题 最近打开一个很久没有打开过的项目,使用git branch -a查看了一下所以分支,其中有些远程分支没有什么用了 于是准备去gitlab上删除它,结果到gitlab上发现没有这些分支,猜测是自己 ...
- 多测师讲解python ____字典,字符,元组,集合(转换)___高级讲师肖sir
1.字符转换 a =['a','b','c','d','e'] #定义一个列表b =[1,2,3,4,5] #定义一个列表c=zip(a,b)# zip类:可以将两个列表进行拼接,返回一个列表且列表中 ...
- h5的第一份翻译
<!DOCTYPE html>DOCTYPE DOC文本文档documentTYPE 类型html hyper超,超级的:text文本:markup标记:language语言<htm ...
- CentOS 7的安装与部署 01
01 虚拟软件的安装与配置 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统.在实体计算机中能够完成的工作在虚拟机中都能够实现. ...
- 【数论】HDU 4143 A Simple Problem
题目内容 给出一个正整数\(n\),找到最小的正整数\(x\),使之能找到一个整数\(y\),满足\(y^2=n+x^2\). 输入格式 第一行是数据组数\(T\),每组数据有一个整数\(n\). 输 ...
- spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...
- 入门 第一个python可视化程序 基于pyqt5
不得不说 py的GUI实在是太难上手了 我现在突然很怀念MFC VB c#这些东西了 因为控件的代码你只要一点就能进入查看 而pyqt5 pyside2 都不可以 你要看就看全部的代码 你要改你也只能 ...
- day05 selenium基本使用
本文通过举例介绍selenium的基本使用方法,用来爬取京东笔记本电脑的商品信息,包括名称,url,价格,评价信息. from selenium import webdriver # 导入键盘Keys ...
- FFmpeg 将大量图片合成为视频 video
1.基本格式终端输入: ffmpeg -f image2 -i /home/ttwang/images/image%d.jpg tt.mp4其中/home/ttwang/images/images%d ...