docker网络之网络模型

简介: Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器Container-IP直接通信。

Docker网络

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器Container-IP直接通信。

Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);

Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高因为Linux是在内核中进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。

原理:

1、每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。桥接网卡

2、每启动一个容器linux主机多了一个虚拟网卡。

3、docker run -d -P --name tomcat --net bridge tomcat:8

网络模式

docker默认使用桥接模式

网络模式 配置 说明
bridge模式

--net=bridge

默认值,在Docker网桥docker0上为容器创建新的网络栈
none模式

--net=none

不配置网络,用户可以稍后进入容器,自行配置
container模式

--

net=container:name/id

容器和另外一个容器共享Network namespace。

kubernetes中的pod就是多个容器共享一个Network

namespace。(联盟式容器)

host模式

--net=host

容器和宿主机共享Network namespace;
用户自定义

--net=mynet

用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络

--update 2022年5月13日23:18:04 结合下面这个图来理解。

27707b2094394a0fbc7b199b84880b5c.png

docker桥接网络模式示意图

多主机通信

159013ab1c294704b66c13962c2e155a.png

docker网络-端口转发

docker run -it --name --rm myweb -p 80 nginx

-p 参数的指定会在iptables的nat表中新增转发记录

宿主机上如何访问这个myweb服务呢?

因为重启了myweb服务,所以端口变成了49154. 宿主机可以通过49154访问到nginx服务。

删除该容器之后,iptables中的nat表内容自动删除。

还有另外一种方式查看这种映射关系

docker port containername

-P 不指定端口,暴露构建镜像时的默认端口,例如Nginx,不适用任何端口暴露,宿主机是无法访问的,可以使用-P 参数无需指定端口,宿主机通过80端口可访问nginx,因为nginx默认暴露的是80端口。

6743928fd5ab4f81b85104432969d99a.png

联盟式容器

自定义docker0网桥

远程连接其他服务器上的docker deamon

这个和mysql的通信是类似的。

同一个宿主机上创建多个docker网桥

docker network create

可以指定子网以及网关

启动容器的时候就可以指定所要连接的网桥.  

baae1f34789542bead390a9eca598f0f.png只要宿主机开启了路由转发功能,两个网段的容器是可以通信的。

实战

创建4个Docker容器:con1、con2、con3、con4

$ docker run -itd ——name con1 ubuntu /bin/bash
$ docker run -itd ——name con2 ubuntu /bin/bash
$ docker run -itd ——name con3 ubuntu /bin/bash
$ docker run -itd ——name con4 ubuntu /bin/bash

在主机上查看网络

目录
相关文章
|
2天前
|
关系型数据库 MySQL 网络安全
Docker部署MySQL,2024网络安全通用流行框架大全
Docker部署MySQL,2024网络安全通用流行框架大全
|
2天前
|
运维 网络协议 Linux
Docker网络_docker 网络,来看看这份超全面的《Linux运维面试题及解析》
Docker网络_docker 网络,来看看这份超全面的《Linux运维面试题及解析》
|
3天前
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:生成对抗网络(GAN)
使用Python实现深度学习模型:生成对抗网络(GAN)
18 3
|
4天前
|
Linux 开发工具
【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)
【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)
9 0
|
4天前
|
机器学习/深度学习 自然语言处理 网络安全
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
7 1
|
4天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
4天前
|
运维 Linux 虚拟化
Docker详解(十四)——Docker网络类型详解
Docker详解(十四)——Docker网络类型详解
22 0
|
4天前
|
Kubernetes Docker 容器
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
【5月更文挑战第7天】本文介绍了Docker的四种网络类型:Bridge(默认,每个容器连接虚拟桥)、Host(容器共享宿主机网络命名空间)、Overlay(跨宿主机通信,适合集群环境)和Macvlan(容器直接连接物理网络)。Bridge网络适用于同主机通信,而Overlay适合多主机集群。Host网络缺乏隔离,Macvlan则让容器直接连到外部网络。理解这些网络类型有助于优化Docker容器的网络配置。
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
|
4天前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言神经网络模型金融应用预测上证指数时间序列可视化
R语言神经网络模型金融应用预测上证指数时间序列可视化