smo smo smo "狂神" omz omz omz

一、理解网络

本机回环地址:127.0.0.1,本机IP地址:192.168.2.131,docker地址:172.17.0.1

1.1、docker如何处理容器网络访问的?

(1)首先,拉取一个tomcat镜像(我直接从之前制作的tomcat镜像拉取下来了)

(2)拉取之后修改了一下名字:docker tag <imageId> tomcat:1.0

(3)之后把名称特别长那个tomcat镜像删掉:docker rmi -f registry.cn-shanghai.aliyuncs.com/harleyhub/harleyrepo:1.0

(4)查看镜像:docker images

(5)然后启动镜像:docker run -d -P --name tomcat01 tomcat1.0

启动tomcat容器并查看ip addr的执行结果:docker exec -it tomcat01 ip addr

可能会遇到ip addr命令不存在的情况,可以问一下文心、通义、混元和豆包它们。

测试一下容器内的ip是否可以ping通

每启动一个容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!在宿主机(容器外)再次执行ip addr,发现会多出一个网卡:vethefdc19@if40

再启动一个容器

1.2、veth-pair 技术原理

  veth-pair(Virtual Ethernet Pair)是一种在Linux系统中实现的虚拟网络设备对技术,主要用于在不同网络命名空间(network namespace)之间建立通信连接。以下是veth-pair技术的关键特点和工作原理:

  成对出现:veth-pair由两个虚拟网络接口组成,这两个接口如同一对虚拟以太网线连接的两端。数据包从一端发送后,会出现在另一端,反之亦然。

  命名空间间的桥梁:veth-pair常用于隔离网络环境的场景,如Docker容器、Linux网络命名空间等。它可以将一个命名空间中的网络流量导向另一个命名空间,使得不同命名空间内的进程可以通过虚拟链路相互通信,而不会影响到宿主机或其他命名空间的网络配置。

  内核层面的转发:当数据包被发送到veth-pair的一端时,它会通过内核的网络栈,然后从配对的另一端出来,这个过程实现了命名空间之间的透明通信,如同物理连接一样。

  配置灵活性:veth-pair设备可以独立配置IP地址、路由规则等,就像物理网络接口一样。此外,它们可以被添加到Linux网桥、与物理网络接口一同参与复杂的网络拓扑构建。

  与网络命名空间结合使用:通过ip netns命令,veth-pair可以被分配到特定的网络命名空间中,从而实现网络资源的灵活隔离和管理。

  原理简述:veth-pair基于Linux内核的网络栈工作,利用内核的网络协议处理能力来传递数据包。数据从一端注入时,内核会根据目的MAC地址和IP配置,将数据包正确地路由到另一端,反之亦然,实际上是在内核层面完成了数据包的转发。

  总之,veth-pair是实现容器网络、虚拟机网络以及其他需要网络隔离场景下的关键技术之一,它提供了简单而强大的机制来构造和控制复杂的虚拟网络拓扑。

1.3、容器之间是否可以ping通

tomcat01的ip(172.17.0.2):docker exec -ti tomcat01 ip addr

tomcat02的ip(172.17.0.3):docker exec -ti tomcat02 ip addr

进行测试:docker exec -ti tomcat01 ping 172.17.0.2

Q:255.255.0.1/16 能用多少个IP

Q:255.255.0.1/24呢

二、docker link

注意:目前已经不建议使用这种方式。

两个容器无法通过容器名进行ping......如何处理?

再次启动一个容器:docker run -d -P --name tomcat03 --link tomcat02 tomcat:1.0,测试tomcat02可以ping通tomcat01

但是tomcat01无法ping通tomcat02,这种link方式是单向的。

查看容器inspect,拿到network的ID,使用docker network inspect networkId

执行结果如下

执行link之后,会修改hosts文件,所以可以ping通

三、自定义网络

容器互联

查看所有的docker网络:docker network ls

3.1、网络模式

  • bridge(桥接模式,docker默认)
  • none(不配置网络)
  • host(和宿主机共享网络)
  • container(容器网络连通,局限大,用的较少)

测试

# 启动容器的命令,隐藏掉了--net bridge
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat

docker0特点
1.默认的网络模式
2.域名不能访问
3.使用--link才能打通连接

3.2、自定义网络

用来解决容器互联问题

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

--driver:桥接模式,--subnet:子网地址,--gateway:网关(路由器的地址)

使用桥接的网络模式,设置子网地址和网关,用该网络启动容器,可以通过容器名互相ping通

开始测试


1.使用网络mynet启动tomcat01tomcat02

2.测试tomcat01tomcat02的网络通信情况

不同的集群使用不同的网络,保证集群是安全和健康的

redis、mysql

3.3、网络连通测试

场景:使用docker0启动两个tomcat容器,然后使用mynet启动两个tomcat容器,测试网络连通情况。

(1)启动容器

(2)查看以docker0启动的两个容器的IP

(3)查看以mynet启动的两个容器的IP

(4)四个容器的IP如下

  • docker0

    • tomcat01:172.17.0.2
    • tomcat02:172.17.0.3
  • mynet
    • tomcat-net-01:192.168.0.2
    • tomcat-net-02:192.168.0.3

(5)网络拓扑图

tomcat01如何和mynet连通?

(6)使用docker network connect

(7)测试网络连通

(8)执行ip addr查看tomcat01的网络信息如下

tomcat01会多一个虚拟网卡,分配一个mynet的IP:198.168.0.4

— 要养成终身学习的习惯 —

docker - [13] docker网络的更多相关文章

  1. Docker学习(13) Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络基础 先安装网桥管理工具 Docker容器的互联 默认 Docker容器与外部网络的连接

  2. 理解Docker单机容器网络

    在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...

  3. Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...

  4. docker 跨主机网络:overlay 简介

    简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...

  5. 【爬坑系列】之docker的overlay网络配置(未完,待续)

    理论知识储备: 想了解vxlan网络的知识:https://www.cnblogs.com/shuiguizi/p/10923841.html 想了解docker网络的原理知识:https://www ...

  6. 理解Docker :Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  7. 在docker里部署网络服务

    之前试着玩玩docker有一阵子了,今天算是头一回正式在docker里部署网络服务. 本来想和lxc差不多的东西那自然是手到擒来,没想到还是改了很多. 第一个遇到的问题是,远程连到docker宿主机干 ...

  8. docker 配置桥接网络

    2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...

  9. docker多主机网络方案

    本文探讨Docker多主机网络的性能. 在过去的博文里,我测试过 Docker的网络 . MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的. 本文里一系列的测试,想更多关注使用多主机的D ...

  10. Docker跨主机网络——overlay

    前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...

随机推荐

  1. Chats 开发指南

    Chats 开发指南 欢迎使用 Chats!在我上一篇博客 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro 中,我介绍了 Chats ...

  2. DB-GBP功能使用探索

    目录 1.DBGPT支持的功能 2.配置StarRocks数据库 3. ChatBI 4. APP创建使用 5. 元数据库配置 6. API 调用探索 6.1 app 6.2 datasources ...

  3. Flutter之GetX之GetConnect

    Flutter之GetX之GetConnect GetConnect可以便捷的通过http或websockets进行前后台通信. 默认配置 能轻松的通过extend GetConnect就能使用GET ...

  4. 如何使用Jet家软件进行学习(intellij、idea、IDEA、Pycharm……)

    如何使用Jet家软件进行学习 本文档提供方法只用于学习研究,不得用于其他用途 以下,萌狼蓝天将会提供两种方式 目录 如何使用Jet家软件进行学习 第一种方式:使用EAP版本 第二种方式:使用插件 (1 ...

  5. maven打jar包运行main方法

    pom文件添加上这段 <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</ ...

  6. 区分PO、VO、 BO、 DTO、 POJO

      分层领域模型规约: DO(Data Object):此结构与数据库表结构一一对应,通过DTO向上传输数据源对象. DTO(Data Transfer Object):数据传输对象,Service ...

  7. Qt 5.15.6 发布

    一.前言 我们今天为商业许可证持有者发布了 Qt 5.15.6 LTS.作为补丁版本,Qt 5.15.6 没有添加任何新功能,但提供了错误修复和其他改进. 您可以使用维护工具在现有的在线安装中添加 Q ...

  8. Llama3.1 是怎么工作哒?原文翻译版😘

    了解Llama3.1如何工作--深入探讨模型流程 原文标题:Understand How Llama3.1 Works - A Deep Dive Into the Model Flow 原作者:Xi ...

  9. VC++2008、2010、2012、2015、2017等IDE中如何设置命令行参数进行程序调试

    有时我们在写程序时会从命令行中直接读入参数,形如: int main(int argc,char**argv){ //your code here return 0; } 其实在vc2010 IDE中 ...

  10. CDS标准视图:技术对象类别文本 I_TechnicalObjectTypeText

    视图名称:技术对象类别文本 I_TechnicalObjectTypeText 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'Technical Object T ...