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 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...
随机推荐
- 题解【[USACO18FEB]New Barns 】
浅谈一下对于这题做完之后的感受(不看题解也是敲不出来啊qwq--) 题意翻译 Farmer John注意到他的奶牛们如果被关得太紧就容易吵架,所以他想开放一些新的牛棚来分散她们. 每当FJ建造一个新牛 ...
- 101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联——方案二
101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联--方案二 本文知识点:通过方法实现学生类与 ...
- NOIP提高组2013 D2T3 【华容道】
某王 老师给我们考了一场noip2013的真题...心态爆炸! 题目大意: 有一个n*m的棋盘,每个格子上都有一个棋子,有些格子上的棋子能够移动(可移动的棋子是固定的),棋盘中有一个格子是空的,仍何 ...
- Python+Appium自动化测试(2)-appium连接真机启动app
app自动化测试的第一步,是启动被测app.appium环境搭建好后,我们就可以连接真机启动app了.环境为windows,Appium1.18.0,Android手机,被测app为今日头条app,让 ...
- leaflet如何加载10万数据
作为一名GIS开发者,你工作中一定遇到过这种问题,根据业务设计,需要在地图上添加1万+条数据,数据或是点.或是线.或是面.但不管哪种,当你添加到5000条时,地图操作就会出现明显的卡顿.当你添加超过1 ...
- spring boot:shardingsphere多数据源,支持未分表的数据源(shardingjdbc 4.1.1)
一,为什么要给shardingsphere配置多数据源? 1,shardingjdbc默认接管了所有的数据源, 如果我们有多个非分表的库时,则最多只能设置一个为默认数据库, 其他的非分表数据库不能访问 ...
- spring boot:在项目中引入第三方外部jar包集成为本地jar包(spring boot 2.3.2)
一,为什么要集成外部jar包? 不是所有的第三方库都会上传到mvnrepository, 这时我们如果想集成它的第三方库,则需要直接在项目中集成它们的jar包, 在操作上还是很简单的, 这里用luos ...
- centos8平台使用xfs文件系统
一,xfs文件系统的特点 XFS是一种高性能的日志文件系统, 它是由SGI公司设计的,被称为业界最先进的.最具可升级性的文件系统技术. 最初是从unix(irix)移植到linux系统上的. 从cen ...
- Postgres 10.11安装教程
Postgres搭建 考虑到Drone和Sonarqube等都需要借助Postgres存储,为了保证CI服务的高效的工作,将考虑独立其中依赖的数据库,避免在繁忙时占用过多资源从而影响整体CI的速度. ...
- java List<T>和List<Object>的区别
// List<T> 的T表示的是某一类型可以用人一类型来替代,一般在定义的时候使用 // List<Object> 就是具体的了表示这个List里只能放置Object pub ...