首页 > 其他分享 >Docker网络详解

Docker网络详解

时间:2023-08-05 19:44:46浏览次数:29  
标签:容器 network -- 网络 详解 Docker docker

Docker是一种轻量级容器化技术,允许通过隔离OS级的虚拟化方式在一个操作系统上运行多个应用。网络是Docker中的一个非常重要的组件,它允许容器之间进行通信和联网访问。本文介绍Docker网络的基础知识,包括网络类型、网络驱动程序和网络配置等方面。

一、Docker网络概述

Docker网络有三个基本要素:网络类型、网络驱动程序和网络配置。

Docker支持四种类型的网络:

bridge:这是默认的网络类型,建立在宿主机的网络接口之上。容器默认使用这个网络类型。
host:这种网络类型,直接使用宿主机的网络栈,容器和宿主机共享网络栈。
overlay:这种网络类型可以跨越多个Docker守护进程,通过内置的DNS服务,允许容器之间跨主机进行通信。
macvlan:这种方式可以让容器拥有自己的MAC地址,从而可以直接与物理网络中的设备进行通信。

二、Docker网络 驱动

Docker支持多种网络驱动程序,每种网络驱动的实现方式都不同。下面列出了Docker支持的网络驱动程序。

1、bridge驱动:此驱动为Docker的默认设置,docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。但与外界通信使用NAT,增加了通信的复杂性,在复杂场景下使用会有诸多限制。

2、host驱动:使用这种驱动的时候,Docker容器和宿主机共用同一个network namespace,使用宿主机的网卡、IP和端口等信息。但是,容器其他方面,如文件系统、进程列表等还是和宿主机隔离的。host模式不存在虚拟化网络带来的额外性能负担。但是host驱动也降低了容器与容器之间、容器与宿主机之间网络层面的隔离性,引起网络资源的竞争与冲突。

3、overlay驱动:此驱动采用IETF标准的VXLAN方式,并且是VXLAN中被普遍认为最适合大规模的云计算虚拟化环境的SDN controller模式。在使用的过程中,需要一个额外的配置存储服务, 还需要在启动Docker daemon的的时候额外添加参数来指定所使用的配置存储服务地址。

4、remote驱动:这个驱动实际上并未做真正的网络服务实现,而是调用了用户自行实现的网络驱动插件,使libnetwork实现了驱动的可插件化。

5、null驱动:使用这种驱动的时候,Docker容器拥有自己的network namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器除了network namespace自带的loopback网卡外,没有其他任何网卡、IP、路由等信息,需要用户为Docker容器添加网卡、配置IP等。这种模式如果不进行特定的配置是无法正常使用的,但是优点也非常明显,它给了用户最大的自由度来自定义容器的网络环境。

三-、docker网络配置

docker安装后会自动创建3种网络:bridge、host、none

可以用命令docker network ls查看

Docker的网络配置包括以下几个方面:

网络使用:容器可以连接到多个网络。
IP地址:容器可以使用静态或动态IP地址。
网络别名:容器可以使用多个别名来访问网络。
网络作用域:容器可以选择使用全局或本地作用域的网络。
在Docker中,可以使用以下命令来进行网络配置:

以下是对这些命令的举例说明及用途:

1. `docker network create`:创建一个新的Docker网络。
   例如:`docker network create my-network`
   用途:创建一个名为"my-network"的Docker网络,供容器使用。

2. `docker network connect`:将容器连接到一个已存在的Docker网络。
   例如:`docker network connect my-network my-container`
   用途:将名为"my-container"的容器连接到名为"my-network"的Docker网络,使容器可以与该网络中的其他容器进行通信。

3. `docker network inspect`:检查一个Docker网络的详细信息。
   例如:`docker network inspect my-network`
   用途:获取名为"my-network"的Docker网络的详细信息,包括网络标识符、容器连接到该网络的信息等。

4. `docker network rm`:删除一个已存在的Docker网络。
   例如:`docker network rm my-network`
   用途:删除名为"my-network"的Docker网络,该网络及其相关联的容器将被移除,停止容器之间的通信和连接。

这些命令提供了管理Docker网络的功能,可以方便地创建、连接、检查和删除网络,使容器之间能够进行通信和连接。

 

 

docker network create
docker network connect
docker network inspect
docker network rm








#参数
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置,不需要加。
container模式:使用 --net=container:NAME_or_ID 指定。


1、bridge驱动

Docker默认网络模式是bridge模式, docker0网桥是在docker daemon启动时自动创建的,之后创建的docker容器都会在docker0自网范围内选取一个未占用的ip并连接到docker0网桥上,docker0以veth pair连接各容器的网络,容器中的数据通过docker0网桥转发到eth0网卡上。

veth pair:就是一对的虚拟设备接口,它都是成对出现的。一端连着协议栈,一端彼此相连着。

docker0网桥的概念等同于交换机,为连在其上的设备转发数据帧。网桥上的veth网卡设备相当 于交换机上的端口,可以将多个容器或虚拟机连接在其上,这些端口工作在二层(数据链路层),所以是不需要配置IP信息的。下图docker0网桥就为连在其上的容器转发数据帧,使得同一台宿主机上的Docker 容器之问可以相互通信。docker0是普通的Linux网桥,它是可以在上面配置IP的,可以认为其内部有一个可以用于配置IP信息的网卡接口。在Docker的桥接 网络模式中,docker0的IP地址作为连于之上的容器的默认网关地址存在。

外面的机器是如何访问Docker容器的服务?

创建一个web应用的容器,将容器的80端口映射到主机的80端口

docker run --name=nginx_bridge --net=bridge -p 80:80 -d nginx

查看Iptable规则的变化:

-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80

此条规则就是对主机eth0收到的目的端口为80的tcp流量进行DNAT转换,将流量发往172.17.0.2:80,也就是我们上面创建的Docker容器。所以,外界只需访问10.10.101.105:80就可以访问到容器中的服务。

无需加--net=bridge参数。

创建容器方法

docker run -dit -p 3306:3306 --name imagename --restart always imagename:tag(版本号)

访问方式:宿主机IP:映射端口

2、host驱动

host模式可以让容器共享宿主机网络栈,外部主机与容器直接通信,但是容器的网络缺少隔离性。

host网络模式在创建时需指定: --network=host

##创建容器,指定参数
docker run -dit --network host --name imagesname

3、none

none模式是指禁用网络功能,只有lo接口,在容器创建时使用。

##创建容器,指定参数--network=none
docker run -it --rm --network none busybox

4、自定义网络(Custom Network)

- 创建自定义网络:

docker network create my-custom-network

还可以自定义Docker使用的IP地址、DNS信息、网桥等

##指定网关以及IP范围
docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 image-network
##指定子网以及IP范围
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 image-network

- 在自定义网络上启动容器:

docker run -d --name imagename --network images-network imagename:tag

5、Overlay网络(Overlay Network)

- 创建覆盖网络:

docker network create --driver overlay my-overlay-network

- 在覆盖网络上启动容器:

docker run -d --name my-container --network my-overlay-network my-image

6、 MACVLAN网络(MACVLAN Network)

Macvlan是一个新的尝试,是真正的网络虚拟化技术的转折点。Linux实现非常轻量级,因为与传统的Linux Bridge隔离相比,它们只是简单地与一个Linux以太网接口或子接口相关联,以实现网络之间的分离和与物理网络的连接。

Macvlan提供了许多独特的功能,并有充足的空间进一步创新与各种模式。这些方法的两个高级优点是绕过Linux网桥的正面性能以及移动部件少的简单性。删除传统上驻留在Docker主机NIC和容器接口之间的网桥留下了一个非常简单的设置,包括容器接口,直接连接到Docker主机接口。由于在这些情况下没有端口映射,因此可以轻松访问外部服务。

- 创建MACVLAN网络:

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-network

- 在MACVLAN网络上启动容器:

docker run -d --name my-container --network my-macvlan-network my-image

 

标签:容器,network,--,网络,详解,Docker,docker
From: https://www.cnblogs.com/elfin/p/17607838.html

相关文章

  • Docker启动运行Redis
    Docker安装Redis服务并以配置文件方式启动1)镜像获取#搜索镜像dockersearchredis#拉取镜像dockerpullredis#查看镜像dockerimages2)启动Redis一、从Redis.io官网获取redis.conf配置文件二、在/usr/local/创建redis文件夹,并把redis.conf文件拷贝进来三、修改red......
  • linux select函数详解
    转载:linuxselect函数详解-AlanTu-博客园(cnblogs.com)在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核:     •我们所关心的文件描述符     •对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还......
  • docker rm
     bim@bim114:/data$sudodockerimages|grepnone|awk'{print$3}'2acf3d17a200a5e42b93c93535c90cd89fc593894b576f0c0bd0be7f24e66acecd00de00729f0cd01664ecb08cdb7f69f941cfbd4bae98aaa85e328976778f8a63e4653240a3272c5f552a20682ad1ebc9210......
  • Windows 11跳过网络连接设置方法
    在第一次启动Windows11的时候,会提示连接到网络,如果没有网络的话,则无法进入下一步,如下图: 通过输入命令oobe\/bypassnro可以跳过连接到网络,步骤如下:1.在“让我们为你连接的网络”这一步,按键盘【Shift】+【F10】或者【FN】+【Shift】+【F10】会弹出命令提示符,输入命令oobe\bypa......
  • 网络安全等级保护基本概念
    什么是网络安全等级保护对网络(含信息系统,数据)实施分等级保护,分等级监管,对网络中使用的网络安全产品实行按等级管理,对网络中发生的安全事件分等级响应,处理网络(含信息系统,数据):由计算机或其他信息终端及相关设备组成的,按照一定的规则和程序对信息进行收集、存储、传输、处......
  • IPv6 - linux网络编程
    IPv6网络编程假设双栈服务器有一个IPv4地址、和一个IPv6地址:IPv6服务器启动后创建一个IPv6的监听套接字,假设绑定通配地址客户端调用connect,发送要给IPv4SYN给服务端服务端接收IPv4SYN设置一个标识指示本连接使用IPv4映射的IPv6地址,然后响应一个IPv4SYN/ACK。连接......
  • 10.1 网络编程
    客户端-服务器编程模型每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。例如,一个Web服务器管理着一组磁盘文件,它会代表客户端进行检索和执......
  • 网络安全专有名词详解_3
    80.WAF即为WebApplicationFirewall,即Web应用防火墙,通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。81.SOCSecurityOperationsCenter,翻译为安全运行中心,通过建立一套实时的资产风险模型,协助管理员进行事件分析、风险分析、预警管理贺应......
  • Docker-Compose 一键部署mysql及初始化sql脚本
    1.部署前提:服务器具备docker和docker-compose环境2.镜像准备:-mysql:DockerFile文件:FROMmysql:5.7.41COPY*.sql/docker-entrypoint-initdb.d/初始化sql脚本xxx.sql放在DockerFile文件同级目录下执行指令:dockerbuild-fdockerfile_mysql-tmysql:1.0.0.......
  • 网络接口dhcp失败时会获得一个169.254.x.x的IP地址
    最开始发现这个现象是在windows上面,之前以为是dhcp失败后,会有个随机值作为IP地址,以为是个垃圾数据,是windows特有的行为。最近一个项目,基于buildroot构建,用到4G上网功能,在开发其他功能,一直没插SIM卡,总发现4G接口会拿到一个奇怪的IP地址169.254.118.160。测试把这个问题当作一个bug......