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标志。在容器中,只创建 环回设

 

目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
130 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
30天前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
38 6
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
102 7
|
2月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
46 5
|
3月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
51 5
|
3月前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
52 5
|
3月前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
43 4
|
2月前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
2月前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
2月前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。

热门文章

最新文章