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主机上创建两个新网络:

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

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

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

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

2. 添加两个worker节点到集群
复制代码
# 获取加入集群的命令
docker swarm join-token worker
  1. 创建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选项:

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

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

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

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

Macvlan

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

  2. 注意一下几点:

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

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

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

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

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

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

None

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

相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦2 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875242 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant