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. jacoco代码覆盖率报告分析

    一.目的 对Jacoco代码覆盖率统计维度.报告字段说明.报告详细分析描述.并为精准测试.健壮性测试提供指导. 二.Jacoco代码覆盖率统计维度 Jacoco是从代码指令(Instructions, ...

  2. Python__FLASK__MySQL基础

    1.数据库的基本操作 创建数据库:使用"CREATE DATABASE 数据库名:"语句创建新的数据库 查看数据库:使用"SHOW DATABASES:"语句查 ...

  3. Qt编写地图综合应用30-世界地图

    一.前言 世界地图也属于区域地图的一种,最开始做项目的时候只有国内的地图需求,后面有个客户他们的产品是面向国际市场,所以在大屏展示的时候,必须展示一张世界地图,所有箭头动态流向中国,当然这些都要离线使 ...

  4. Note -「基本子串结构」速通笔记

      学习自 crashed 的<一类基础子串数据结构>摘抄及注解, 略过了一些 crashed 口中 "用不上" 的东西. 这里是速通笔记, 希望快速学习技巧的读者可以 ...

  5. Solution -「AGC 020F」Arcs on a Circle

    \(\mathscr{Description}\)   Link.   在一个周长为 \(c\) 的圆周上放置长度分别为 \(l_1,l_2,\cdots,l_n\) 的弧,每条弧的位置独立均匀随机. ...

  6. 最新AI智能体开发案例:辅助写作神器!教你用Coze平台搭建「文匠智创 1.0」智能体!

    各位小伙伴们,大家好呀!我是疯狂老包.我精心打造的<疯狂AI智能体开发:100个实战案例, 从 入门到精通 >正在开发中!要是你对 AI 应用搭建满怀热忱,渴望深入学习其中的奥秘与技巧,那 ...

  7. 创建企业级地理数据库——PostgreSQL版

    创建PostgreSQL空间数据库 填写相应的参数,选择授权文件 报错 默认安装postgresql后,执行以上操作报错 "You must copy the latest ST_GEOME ...

  8. c# 远程调用 / Remoting IpcChannel sample

    . 远程调用 1. 创建一个远程的可序列化的类,这个类可以在远程调用中用于传输来去,似乎是个公共的类: using System; using System.Collections.Generic; ...

  9. MySQL事务ACID-隔离级别-锁介绍

    ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则 ...

  10. 计算困难假设(Computational hardness assumption)

    以下内容翻译自:维基 介绍 在计算复杂性理论中,计算困难假设是一个特定问题无法得到有效解决的假设(有效通常指"在多项式时间内").目前还不知道如何证明其困难性.同时,我们可以将一个 ...