docker - [13] docker网络
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启动tomcat01和tomcat02

2.测试tomcat01和tomcat02的网络通信情况

不同的集群使用不同的网络,保证集群是安全和健康的
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
- tomcat01:
- mynet
- tomcat-net-01:
192.168.0.2 - tomcat-net-02:
192.168.0.3
- tomcat-net-01:
(5)网络拓扑图
tomcat01如何和mynet连通?

(6)使用docker network connect

(7)测试网络连通

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

tomcat01会多一个虚拟网卡,分配一个mynet的IP:198.168.0.4
— 要养成终身学习的习惯 —
docker - [13] docker网络的更多相关文章
- Docker学习(13) Docker容器的网络连接
Docker容器的网络连接 Docker容器的网络基础 先安装网桥管理工具 Docker容器的互联 默认 Docker容器与外部网络的连接
- 理解Docker单机容器网络
在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...
- Docker容器的网络连接
Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...
- docker 跨主机网络:overlay 简介
简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...
- 【爬坑系列】之docker的overlay网络配置(未完,待续)
理论知识储备: 想了解vxlan网络的知识:https://www.cnblogs.com/shuiguizi/p/10923841.html 想了解docker网络的原理知识:https://www ...
- 理解Docker :Docker 网络
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- 在docker里部署网络服务
之前试着玩玩docker有一阵子了,今天算是头一回正式在docker里部署网络服务. 本来想和lxc差不多的东西那自然是手到擒来,没想到还是改了很多. 第一个遇到的问题是,远程连到docker宿主机干 ...
- docker 配置桥接网络
2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...
- docker多主机网络方案
本文探讨Docker多主机网络的性能. 在过去的博文里,我测试过 Docker的网络 . MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的. 本文里一系列的测试,想更多关注使用多主机的D ...
- Docker跨主机网络——overlay
前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...
随机推荐
- 树莓派获取唯一ID
树莓派的CPU有序列号,可以通过读取 /proc/cpuinfo 获取 储存的UUID,可以通过 ls /dev/disk/by-uuid或blkid
- vscode实现Markdown实时预览
vscode - 插件搜索: Markdown Preview Enhanced 安装 然后打开vscode预览框,即可. That's ALL
- SpringBoot项目请求路径中有正反斜杠的处理办法
在Application中添加静态代码块: //默认情况下Tomcat等服务器是拒绝url中带%2F或者%5C的URL,因为它们经浏览器解析之后就变成了/和\, // 服务器默认是拒绝访问的,所以需要 ...
- cs-script:一个非常成熟的C#脚本开源引擎
推荐一个强大C#脚本引擎,方便我们在项目中,动态执行C#脚本. 01 项目简介 CS-Script是非常成熟的C#脚本引擎,自2004年起就发布了,即.NET发布后的两年. 支持托管和独立(CLI)执 ...
- DevNow x Notion
前言 Notion 应该是目前用户量比较大的一个在线笔记软件,它的文档系统也非常完善,支持多种文档格式,如 Markdown.富文本.表格.公式等. 早期我也用过一段时间,后来有点不习惯,就换到了 O ...
- 问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
解决:Opencv(3.1.0/3.4/4.1.0)找不到 /opencv2/gpu/gpu.hpp 问题 环境: 系统:Win10 环境:Opencv3.4.0/4.1.0 显卡:1080ti 问题 ...
- 2022 年数据科学研究综述:重点介绍 ML、DL、NLP 等
2022 年数据科学研究综述:重点介绍 ML.DL.NLP 等 当我们在 2022 年底临近时,我对许多著名研究小组完成的所有惊人工作感到振奋,他们将 AI.机器学习.深度学习和 NLP 的状态扩展到 ...
- P1437 敲砖块 题解
题意 在一个凹槽中放置了 \(n\) 层砖块.最上面的一层有 \(n\) 块砖,从上到下每层依次减少一块砖.每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示: 14 15 4 3 23 3 ...
- Python在多个Excel文件中找出缺失数据行数多的文件
本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内.某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法. ...
- Solution Set -「AGC 010~012」C~F
目录 「AGC 010C」Cleaning 「AGC 010D」Decrementing 「AGC 010E」Rearranging 「AGC 010F」Tree Game ^ 「AGC 011C」S ...

