[Docker][Docker NetWork][下]详细讲解

DieSnowK 2024-08-16 11:37:03 阅读 54

目录

1.网络管理命令1.docker network creatre2.docker network inspect3.docker network connect4.docker network disconnect5.docker network prune6.docker network rm7.docker network ls

2.docker bridge 详解0.基本概念1.默认 bridge2.自定义 bridge3.DNS解析4.端口暴露和转发

3.docker host 详解4.docker container 详解5.docker none 详解


1.网络管理命令

1.docker network creatre

功能:创建自定义网络语法:`docker network creatre [OPTIONS] NETWORK关键参数

<code>-d, --driver:网络驱动--gateway:网关地址--subnet:表示网段的CIDR格式的子网--ipv6:启动ipv5 示例docker network creatre --driver=bridge --subnet=192.168.0.0/16 br0

2.docker network inspect

功能:查看网络详情语法docker network inspect [OPTIONS] NETWORK [NETWORK...]关键参数-f, --format:指定格式

3.docker network connect

功能

将容器连接到网络,可以按名称或ID连接容器一旦连接,容器可以与同一网络中的其他容器通信 语法docker network connect [OPTIONS] NETWORK CONTAINER关键参数

--ip:指定IP地址--ip6:指定IPV6地址 示例

# 将正在运行的容器连接到网络

docker network connect multi-host-network my_container1

# 启动时将容器连接到网络

# 还可以使用docker run --network=<network-name>选项启动容器并立即将其连接到网络

docker run -itd --network=multi-host-network SnowK_Container

# 指定容器的IP,可以指定要分配给容器网络接口的IP地址

docker network connect --ip 172.21.26.211 multi-host-network my_container2

4.docker network disconnect

功能:断开网络语法docker network disconnect [OPTIONS] NERWORK CONTAINER关键参数-f:强制退出示例docker network disconnect multi-host-network my_container

5.docker network prune

功能:删除不使用的网络语法docker network prune [OPTIONS]关键参数-f, --force:强制删除

6.docker network rm

功能:删除1个或多个网络语法:`docker network rm NETWORK [NETWORN…]关键参数-f:强制删除

7.docker network ls

功能:列出网络语法docker network ls [OPTIONS]关键参数

-f, --filter:指定过滤条件--format:指定格式--no-trunc:不截断-q, --quiet:仅仅显示 id


2.docker bridge 详解

0.基本概念

Docker Bridge网络采用内置的bridge驱动,bridge驱动底层采用的是 Linux内核中Linux bridge技术

就网络而言,bridge网络是在网络段之间转发流量的链路层设备, 而网桥可以是在主机内核中运行的硬件设备或软件设备就Docker而言,桥接网络使用软件网桥docker0,它允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络容器的隔离 Docker Container的bridge桥接模式

请添加图片描述


1.默认 bridge

默认情况下,创建的容器在没有使用<code>--network参数指定要加入的 docker 网络时, 默认都是加入 Docker 默认的单机桥接网络

默认的bridge网络会被映射到内核中名为docker0的网桥上

Docker默认的bridge网络和Linux内核中的docker0网桥是对应关系bridge是Docker对网络的命名,而docker0是内核中网桥的名字

请添加图片描述

容器间的网络通信

安装Docker的时候会默认docker0这个网桥软件设备,这个docker0设备可以类比成交换机/路由器设备当创建好容器之后, 如果不手动指定网络模式,默认会使用bridge网络, 容器会自动连接到<code>docker0这个网桥设备, 然后通过这个网桥来进行容器间的通信


2.自定义 bridge

除了默认的docker0,也可以创建一些自定义的bridge,让运行的容器通过自定义bridge进行通信创建docker network create -d bridge new-bridge连接docker run -itd --name c3 --network new-bridge SnowK

通过--network选项指定要连接的网络,如果不指定, 默认是连接的bridge


3.DNS解析

Docker自定义桥接网络是支持通过Docker DNS服务进行域名解析的

可以直接使用容器名进行通信因为DNS服务可以解析容器名到IP地址的映射, 但是默认的bridge网络是不支持DNS的


4.端口暴露和转发

暴露方式:端口暴露有2种方式,在启动容器的时候添加端口参数

-P:暴露所有端口

将指定的容器端口映射至主机所有地址的一个动态端口

动态端口 即 随机端口 具体的映射结果可使用docker port命令查看 -p:暴露指定端口

语法-p <hostPort>:<containerPort>功能:将容器端口<containerPort>映射至指定的主机端口<hostPort> 端口转发:连接bridge网络的容器只能与连接在当前网络中的容器进行通信。如果一个容器想要对外提供一些网络服务的话,需要进行端口转发才可以实现

端口转发将Docker容器的端口映射到宿主机的端口上

任何发送到宿主机该端口的流量,都会被转发到容器的端口中 如下图所示,两个容器内部均开放80端口,它们分别映射到宿主机的8088和8089端口

任何发送到 8088 端口的流量都会转发到Container 1容器的80端口任何发送到8089端口的流程都会转发到Container 2 容器的80端口

请添加图片描述


3.docker host 详解

Docker容器运行默认都会分配独立的Network Namespace隔离子系统

但是如果基于host网络模式,容器将不会获得一个独立的Network Namespace,而是和宿主机共用同一个Network Namespace

容器将不会虚拟出自己的网卡,IP等,而是直接使用宿主机的IP和端口连接到host网络的容器共享宿主机的网络栈,容器的网络配置与宿主机完全一样

请添加图片描述

适用场景

<code>bridge网络在通信的时候需要进行端口转发以及NAT地址转换, 这势必会消耗掉一些资源以及性能直接使用host网络最大的好处就是性能好

如果容器对网络传输效率有较高的要求,建议选择host网络当然也会牺牲一些东西,比如要考虑端口冲突问题,其他服务已经被占用的端口就不能再使用了


4.docker container 详解

Docker Container的other container网络模式是Docker中一种较为特别的网络的模式

之所以称为“other container模式“,是因为这个模式下的Docker Container,会使用其他容器的网络环境之所以称为“特别”,是因为这个模式下容器的网络隔离性会处于bridge桥接模式与host模式之间

Docker Container共享其他容器的网络环境,则至少这两个容器之间不存在网络隔离而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离

Docker Container的other container网络模式

请添加图片描述

Docker Container的other container网络模式实现逻辑如下:

查找other container(即需要被共享网络环境的容器)的网络namespace将新创建的Docker Container(也是需要共享其他网络的容器)的namespace,使用other container的namespace

操作实例

<code># 创建一个容器

docker run -itd --name netcontainer1 SnowK

# 使用netcontainer1的网络创建另外一个容器

docker run -itd --name netcontainer2 --network container:netcontainer1 SnowK

适用场景

在这种模式下的Docker Container可以通过localhost来访问namespace下的其他容器,传输效率较高但是两个容器之间存在依赖,如果依赖容器重启了,会导致另外一个服务的网络不可用


5.docker none 详解

none网络就是指没有网络挂在这个网络下的容器除了lo(本地回环),没有其他任何网卡适用场景

针对一些对安全性要求比较高并且不需要联网的应用, 可以使用none网络

比如生成随机密码, 避免生成密码被第三方获取 一些第三方的应用可能需要docker帮忙创建一个没有网络的容器, 网络由第三方自己来配置



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。