首页 > 其他分享 >docker 网络

docker 网络

时间:2024-01-24 18:25:07浏览次数:30  
标签:容器 IP 网络 模式 网桥 docker Docker

docker 网络

Docker 网络实现原理

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

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

 

 

 

 

Docker 的网络模式

●Host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
●Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
●None:该模式关闭了容器的网络功能。
●Bridge:默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat 表配置与宿主机通信。
●自定义网络
安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

 

 

网络模式详解

1.host模式
相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。
Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。

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

3.none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。


4.bridge模式
bridge模式是docker的默认网络模式,不用--net参数,就是bridge模式。


相当于Vmware中的 nat 模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。


(1)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。


(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。 veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。


(3)Docker将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放在主机中, 以 veth* 这样类似的名字命名, 并将这个网络设备加入到 docker0 网桥中。可以通过 brctl show 命令查看。


(4)使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL 查看。


 


5.自定义网络
#直接使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错
可以用来自定义创建一个网段,、网桥、网络模式,从而可以创建容器时自定义容器IP
docker run -itd --name test3 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
docker network create --subnet 自定义网段 --opt "com.docker.network.bridge.name"="自定义网桥名" 自定义网络模式
docker run --network 自定义网络模式名称 --ip 自定义容器IP

 

 

 #随机映射端口(从32768开始)

#指定映射端口

 #开启路由转发

 #访问服务器地址,加指定端口

 #查看容器的输出和日志信息      (显示主进程日志)

 #查看docker网络列表

 

 

container模式

 #创建容器

 #查看容器进程号

 #查看容器的进程、网络、文件系统等命名空间编号

 #基于c1再创建个容器

 

 #查看可以发现两个容器的 net namespace 编号相同

 

host模式

 

 

#创建host模式的容器

 

 

none模式

使用none模式,Docker容器拥有自己的Network Namespace,
但是,并不为Docker容器进行任何网络配置。 也就是说,
这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。
这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

 

 

bridge模式

 

bridge模式是docker的默认网络模式,不用--net参数,就是bridge模式。

相当于Vmware中的 nat 模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。    

(1)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。 veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

(3)Docker将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放在主机中, 以 veth* 这样类似的名字命名, 并将这个网络设备加入到 docker0 网桥中。可以通过 brctl show 命令查看。

(4)使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL 查看。

 

 #默认值。表示bridge

 #再创建个指定bridge

自定义网络

 #先自定义网络,再使用指定IP运行docker

 

 #运行

 

标签:容器,IP,网络,模式,网桥,docker,Docker
From: https://www.cnblogs.com/yanrui07/p/17985461

相关文章

  • 神经网络的反向传导的自动微分中前向模式和后向模式的适用情况
    神经网络的自动微分求导这里不做解释和介绍,自动微分求导中的前向模式和后向模式这里也不做解释和介绍。根据资料显示,如果一个神经网络的输入层维度为M,输出层维度为N,当M>N时,反向自动微分求导的后向模式计算效率高于前向模式,反之,如果M<N时,前向模式计算效率高于后向模式,下面给出自己......
  • docker的安装
    一、docker的简单介绍建议看阮一峰老师的这篇博文Docker入门教程也可以看一下这篇博文Docker容器入门二、docker的安装环境介绍:-内核:CentOSLinuxrelease7.4.1708(Core)-centos系统发行版本:3.10.0-693.el7.x86_64-yum第一步:确认本机是否安装docker命令:dock......
  • containerd 像Docker一样丝滑操作镜像【转】
    containerd像Docker一样丝滑操作镜像• 我们知道DockerCLI工具提供了需要增强用户体验的功能,containerd同样也提供一个对应的CLI工具:ctr,不过ctr的功能没有docker完善,但是关于镜像和容器的基本功能都是有的。接下来我们就先简单介绍下ctr的使用。➜  ~ ctrN......
  • 绿联DH2600 docker基本命令
    查看容器(运行中的Containers)dockerps或dockercontainerls查看所有容器dockerps-a或dockercontainerls--all进入容器(ubuntu系统)dockerexec-it容器id/bin/bash或dockerattach容器id注:attach进入后exit退出会关闭容器。可以通过:ctrl+P+Q挂起容......
  • 绿联DH2600配置如何进入docker内部
    前提:已经能ssh进入绿联、已经成功运行docker容器已进入dockerhome-assistant为例查看当前docker运行容器dockerps输出:root@UGREEN-3822:~#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUS......
  • 使用Java中的HttpClient进行网络请求
    使用Java中的HttpClient进行网络请求是一种常见的操作,它可以帮助我们轻松地发送HTTP请求并获取响应。以下是使用Java中的HttpClient进行网络请求的基本步骤:1. 添加依赖:首先,确保您的项目中包含了HttpClient的依赖。如果您使用的是Maven项目,请在pom.xml文件中添加以下依赖:2. xml复......
  • Docker部署Prometheus监控
    1.拉取所需的镜像dockerpullprom/node-exporter #用于机器系统数据收集dockerpullprom/mysqld-exporter #用于MySQL数据库数据收集dockerpullgoogle/cadvisor #用于收集宿主机上的docker容器数据dockerpullprom/prometheus #监控&报警&时间序列......
  • nfs网络文件系统介绍_
    1NFS介绍1.1NFS概念描述 1.2NFS历史介绍1.3NFS在企业中的应用场景 1.4NFS服务挂载结构图解 1.5NFS在企业生产集群架构中的位置 ......
  • 小白使用Docker实现每周「自动领取」 Epic 免费游戏
    每周的epic免费游戏,已经成了我的快乐源泉!游戏可以不玩,但是不可以不领!白嫖的快乐,懂得都懂......
  • 网络二层环路,老网工都是这么排查的
    中午好,我的网工朋友。在复杂且多变的网络架构中,二层环路的问题可能由多种因素引起,包括但不限于配置错误、设备故障或是网络设计上的缺陷。当网络中出现广播风暴、MAC地址表不稳定或是通信质量下降等现象时,很可能是环路问题的征兆。今天这篇文章,就和你一起探讨一番,如何有效地识别和......