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. WinForm 通用权限框架,简单实用支持二次开发

    前言 开发一个安全.灵活且易于维护的应用程序是至关重要的.特别是在企业级应用中,权限管理不仅涉及到用户访问控制,还关系到数据的安全性和系统的稳定性. 推荐一款 WinForm 通用.完整的权限架构开发 ...

  2. Shiro简单入门+个人理解

    身为一个刚刚进入开发行业的学生,进入公司就开始了Shiro框架的应用,特此在这里写下收获. Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权 ...

  3. 03-FTP和TFTP命令

    http://www.h3c.com/cn/d_202101/1375275_30005_0.htm 1 FTP 1.1 FTP服务器配置命令 1.1.1 display ftp-server 1.1 ...

  4. MySQL百万级数据量分页查询方法及其优化

    1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count 当起始页较小时,查询没有性能问题, ...

  5. React部署到线上Nginx环境中刷新页面后404解决方案

    我们需要在Nginx的配置文件中修改以下内容(通常Nginx配置文件位置为/etc/nginx/nginx.conf): server { # ... location / { # ... # 增加下 ...

  6. Qt音视频开发49-通用截图截屏

    一.前言 采用了回调方式的视频通道,截图只需要对解析好的QImage对象直接保存即可,而对于句柄的形式,需要调用不同的处理策略,比如vlc需要用它自己提供的api接口函数libvlc_video_ta ...

  7. [转]idea2021.1破解版 附安装教程免激活码

    参看链接:http://www.ddooo.com/softdown/190256.htm 百度网盘地址:https://pan.baidu.com/share/init?surl=qwywmPK-F ...

  8. 移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)

    本文由携程技术团队Aaron分享,原题"干货 | 携程弱网识别技术探索",下文进行了排版和内容优化. 1.引言 网络优化一直是移动互联网时代的热议话题,弱网识别作为移动端弱网优化的 ...

  9. 巧用VTable打造炫酷金字塔图表

    在数据分析和可视化领域,表格是展示数据直观.有效的方式之一.今天,就让我们来探索如何利用VTable这个强大的表格组件,制作出既美观又富有信息量的金字塔图表,以及深入了解VTable中各种单元格类型的 ...

  10. ffmpeg 去除音频中的静音

    去除音频中的静音 //去除所有超过0.3秒的静音部分 ffmpeg -i input.mp3 -af silenceremove=stop_periods=-1:stop_duration=0.3:s ...