docker网络

简介: docker网络

官方文档:https://docs.docker.com/network/

素材准备:

1.Dockerfile定义

From alpine:3.18
run apk add ethtool
run apk add ipvsadm
run apk add iptables

2.构建镜像

docker build -t myalpine .

网络解决什么问题

1. 容器与外界通信

2. 容器间通讯,跨主机容器间通讯

3. 网络隔离(容器网络命名空间、子网隔离)

4. 提供网络自定义能力

5. 提供容器间发现功能

6. 提供负载均衡能力

docker网络命令

//连接一个容器到一个网络
docker network connect Connect a container to a network
//创建一个网络
docker network create Create a network
//将容器从一个网络中断开
docker network disconnect Disconnect a container from a network
//查看网络的详细信息
docker network inspect Display detailed information on one or more networks
//查看网络列表
docker network ls List networks
//移除所有未使用的网络
docker network prune Remove all unused networks
//移除一个或多个网络
docker network rm Remove one or more networks

网络驱动

bridge(网桥网络)

什么是桥接网络

1. bridge是docker默认的网络驱动程序。如果没有指定驱动程序,这就是正在创建的网络类型。当应用程序在需要与同一主机上的其他容器通信的容器中运行时,通常会使用桥接网络。

2. 就联网而言,桥接网络是在网段之间转发流量的链路层设备,链路层设备Mac地址进行通信。桥接器可以是在主机内核运行的硬件设备或者软件设备。

3. 就docker而言,网桥网络为软件网桥。允许连接到同一网桥的容器进行通讯,同时提供与未连接到该网桥的容器的隔离。不同网桥上的容器无法直接通讯。

4. 启动docker是,会自动创建一个名为docker0的网桥网络,并且新启动的容器会默认连接到该网 络。

用户自定义网桥与默认网桥的区别

1. 自定义网桥提供容器之间的自动DNS解析,可通过容器名称或别名互相访问,默认网桥网络上的容 器只能通过IP地址互相访问。

2. 自定义网桥提供更好的网络隔离,因为所有未指定网络的容器都将连接到默认网桥,而自定义网桥 则必须显示指定容器网络后,方可加入该网络。

3. 每个自定义网络都会创建一个可配置的网桥。如果使用默认网桥,对其配置将使得所有容器都使用 相同的设置,此外配置默认网桥发生在docker本身之外,需要重新启动docker。使用docker网络创建和配置自定义网桥网络,可以在创建是分别对不同的网桥做不同的配置。

查看默认网络
1.查看网络
docker network ls

安装docker后,会默认创建bridge、host、none 三个网络

2. 默认桥接网络
docker network inspect bridge

默认桥接网络子网为:172.17.0.0/16,网桥名称为docker0

3. 查看本机网卡信息
ip addr

4. linux内核路由表
route -n

所有以172.17开头并且子网掩码为255.255.0.0的IP地址的数据包都会被发送到docker0网桥

Overlay(覆盖网络)

什么是overlay网络

1. overlay网络驱动程序在多个Docker守护进程主机之间创建分布式网络。该网络位于(覆盖)特定 于主机的网络之上,允许连接到该网络的容器(包括群集服务容器)在启用加密时安全通信。 Docker透明地处理每个数据包往返于正确的Docker守护进程主机和正确的目标容器的路由

2. 初始化一个swarm集群或将Docker主机加入现有swarm集群时,会在该Docker主机上创建两个新网络:

       1. 名为ingress的overlay网络,处理与swarm service相关的控制和数据流量。创建一个service 没有指定自定义网络时,默认将连接到ingress网络。ingress网络提供对容器化应用程序的负 载均衡和路由功能。它允许外部流量通过单一入口点访问多个容器,并根据定义的规则将请求 转发到适当的后端容器

        2. 名为docker-gwbridge的bridge网络,用于将覆盖网络(包括ingress网络)连接到单个 Docker守护程序的物理网络。通过这个网络,容器可以连接到宿主机

3. 可以使用docker network create创建自定义的overlay网络,方法与创建自定义bridge网络相同。 服务或容器一次可以连接到多个网络。服务或容器只能通过各自连接的网络进行通信。

overlay驱动使用案例
1. 初始化swarm集群,会默认创建ingress 网络和docker_gwbridge网络
docker swarm init

2. 添加两个worker节点到集群
# 获取加入集群的命令
docker swarm join-token worker
3. 创建service,将加入默认ingress网络素材准备
docker service create -p 8080:80 --replicas 3 --name nginx-svc nginx:latest

4. 查看ingress 网络明细
docker network inspect ingress
5. 查看docker_gwbridge网络详情
docker network inspect docker_gwbridge
6. 查看iptables网络转发
sudo iptables -nvL -t nat

Host(主机网络)

什么是Host网络

1. Host模式,即容器网络不会与宿主机产生网络隔离,而是使用主机的网络栈,容器不会分配自己的 IP地址。运行容器是所有端口映射的选项都将失效,并且在使用时产生警告信息。主机模式可以用 于性能优化,因为主机模式下无需网络地址转换(NAT),并且不会为每个端口创建userland-proxy(在默认情况下,Docker使用Userland Proxy作为默认的端口转发机制。Userland Proxy基 于iptables规则进行转发,将容器内部的网络流量通过宿主机上的特定端口进行转发。)

2. Host模式,仅适用于linux主机,Mac和windows主机不支持

3. docker run 或docker service create 通过指定--network host 来使用主机网络。该模式下集群节点上运行容器将受到限制(例如:容器端口为80端口,由于使用主机网络,则每个集群节点仅能运行 一个80端口的容器)

IPvlan

什么是IPvlan

1. IPvlan驱动程序为用户提供了对IPv4和IPv6寻址的完全控制。VLAN驱动程序在此基础上构建,使运 营商能够完全控制第2层VLAN标记,甚至为对底层网络集成感兴趣的用户提供IPvlan L3路由。

2. ipvlan网络驱动程序可以用于创建IPVLAN网络,它允许将容器连接到现有的物理网络接口,并通过 共享主机内核栈来实现高性能和低延迟

3. 创建ipvlan驱动网络,--option选项:

        1. ipvlan_mode:设置IPvlan模式默认值为 l2,可选值为:l2(容器和主机共享相同的MAC地 址,但拥有不同的IP地址)、l3、l3s。

       2. ipvlan_flag:设置IPvlan模式flag,默认值为 bridge,可选值为:bridge,private,vepa (Virtual Ethernet Port Aggregator)

       3. parent:指定需要使用的父级网卡

内核要求

1. linux 内核版本 v4.2+ 2. unname -r 查看内核版本

Macvlan

什么是Macvlan

1. 一些应用程序,特别是遗留应用程序或监控网络流量的应用程序,期望直接连接到物理网络。在这 种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配一个MAC地址,使其 看起来像是直接连接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个 物理接口用于Macvlan,以及网络的子网和网关。您甚至可以使用不同的物理网络接口隔离您的 Macvlan网络

2. 注意一下几点:

       1. 由于IP地址耗尽或“VLAN扩散”(当您的网络中有大量不适当的唯一MAC地址时会出现这种情 况),您可能会无意中降低网络性能。

        2. 您的网络设备需要能够处理“混杂模式”,即一个物理接口可以分配多个MAC地址。

        3. 如果您的应用程序可以使用bridge(在单个Docker主机上)或overlay(在多个Docker主机之 间进行通信)来工作,那么从长远来看,这些解决方案可能会更好。

3. 创建macvlan驱动网络,--option选项:

        1. macvlan_mode:默认为bridge,可选项有:bridge, vepa, passthru, private

        2. parent:指定需要使用的父级网卡

None

如果要完全隔离容器的网络堆栈,可以在启动容器时使用--network-none标志。在容器中,只创建 环回设

 

目录
相关文章
|
2月前
|
Ubuntu 应用服务中间件 nginx
Docker 网络
Docker 网络
37 0
|
4天前
|
JSON Kubernetes Linux
Docker之网络模式
docker基础 网络模式
28 2
|
9天前
|
测试技术 Linux 数据安全/隐私保护
【好用的个人工具】在Docker环境下部署WatchYourLAN轻量级网络IP扫描器
【2月更文挑战第2天】在Docker环境下部署WatchYourLAN轻量级网络IP扫描器
50 0
|
28天前
|
消息中间件 安全 网络安全
【网络安全 | Kali】基于Docker的Vulhub安装教程指南
【网络安全 | Kali】基于Docker的Vulhub安装教程指南
32 0
|
2月前
|
Linux 应用服务中间件 虚拟化
一文了解Docker之网络模型
Docker是一种容器化平台,它提供了一种轻量级的虚拟化解决方案,使得应用程序能够以容器的形式运行。在Docker中,每个容器都有自己的网络栈,可以与其他容器或主机进行通信。Docker网络模型为容器提供了灵活的网络配置和连接选项。 Docker网络模型基于Linux内核的网络命名空间和虚拟以太网桥技术。每个Docker容器都有自己的网络命名空间,这意味着每个容器都有自己的网络接口、IP地址和路由表。Docker还提供了一些网络驱动程序,用于实现容器之间的通信和与外部网络的连接。
|
2月前
|
存储 网络协议 Linux
深入剖析docker核心技术(namespace、cgroups、union fs、网络)(二)
深入剖析docker核心技术(namespace、cgroups、union fs、网络)(二)
31 0
|
2月前
|
Linux 调度 虚拟化
深入剖析docker核心技术(namespace、cgroups、union fs、网络)(一)
深入剖析docker核心技术(namespace、cgroups、union fs、网络)(一)
92 0
|
2月前
|
网络协议 Unix Linux
docker网络模式详解及容器间网络通信
docker网络模式详解及容器间网络通信
57 0
|
2月前
|
Linux 网络架构 Docker
Docker 网络详解
Docker 网络详解
|
3月前
|
网络协议 关系型数据库 MySQL
docker网络和docker compose
docker网络和docker compose