Docker高级篇之Docker网络

文章目录

    • 1. Docker Network简介
    • 2. Docker 网络模式
    • 3. Docker 网络模式之bridge
    • 4. Docker 网络模式之host
    • 5. Docker 网络模式之none
    • 6. Docker 网络模式之container
    • 7. Docker 网络模式之自定义网络模式

1. Docker Network简介

从Docker的架构和运作流程来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。Docker运作的基本流程是:

  1. 用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者
  2. Docker Daemon作为Docker架构的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求
  3. Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个job的形式存在
  4. Job的运行流程中,当需要容器镜像的时候,则从Docker Registry中下载镜像,并通过镜像管理驱动Graph Driver将下载镜像以Graph的形式存储
  5. 当需要为Docker创建网络环境时,通过网路管理器驱动NetWork driver创建并配置Docker容器网络环境
  6. 当需要限制Docker容器运行资源或执行用户命令的时候,则通过Execdriver来完成
  7. Libcontainer是一项独立的容器管理包,NetWork driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作

我们可以使用下面的命令来查看docker的所有网络情况:

docker network ls

在这里插入图片描述

bridge host 和 none是Docker 默认创建的

使用下面命令可以创建一个docker network:

docker network create test_network

在这里插入图片描述

使用下面命令可以删除一个docker网络:

docker network rm test_network

使用下面命令可以查看某个网络的详细信息:

docker network inspect bridge

在这里插入图片描述

Docker网络主要是实现两个功能:

  • 容器间的互联和同学以及端口映射
  • 容器IP变动时可以通过服务名直接网络通信而不受到影响

2. Docker 网络模式

签名说到Docker会默认给我们创建bridge、host和none三个网络模式。Docker常见的网络模式如下所示:

网络模式简介使用方式
bridge为每一个容器分配、设置IP,并将容器链接到一个docker0,虚拟网桥,docker默认为该模式–network bridge指定,默认是docker 0
host容器将不会虚拟出自己的网卡,配置自己的IP地址,而是使用宿主机的IP和端口使用–network host指定
none容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等使用–network none指定
container新建立的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等使用–network container:Name或者容器ID指定
  • docker netwrok底层ip和容器映射关系变化

我们启动两个ubuntu容器并进入ubuntu的容器内:

docker run -it --name u1 ubuntu bash
docker run -it --name u2 ubuntu bash

在这里插入图片描述
我们首先看一下u1的情况:

docker inspect u1

在这里插入图片描述
我们再看看u2:

在这里插入图片描述
可以发现u1和u2的网络ip都不一样。现在将u2删除,然后再启动一个u3,再次查看网络情况:

在这里插入图片描述
我们可以发现u3复用来u2的ip地址,这里就出现一个关键问题,如果我们在bridege情况下将容器ip写死的话,如果某个容器宕机了,它的ip地址可能被其它容器复用,这样就导致了访问u2的ip地址,可能访问到的是u3的内容,所以在访问容器服务时,不能通过固定的ip地址访问。所以我们要规划好我们的docker network

3. Docker 网络模式之bridge

Docker服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为docker 0,它在内核层连通了其他的物理或虚拟网卡,这就是将容器和本地主机都放在同一个物理网络,Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

在组网方面,网桥网络是一种链路层设备,用于转发网段之间的流量。网桥可以是在主机内核中运行的硬件设备或软件设备。在Docker方面,网桥网络使用软件网桥,允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络的容器的隔离。Docker Bridge驱动程序自动在主机中安装规则,使不同网桥网络上的容器无法直接通信。网桥网络适用于运行在同一个Docker守护进程主机上的容器。对于运行在不同Docker守护进程主机上的容器之间的通信,可以在操作系统级别管理路由,也可以使用覆盖网络。启动Docker时,将自动创建默认网桥网络(也称为网桥),除非另有指定,否则新启动的容器将连接到该网络。还可以创建用户定义的自定义网桥网络。用户定义的网桥网络优于默认的网桥网络。

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥,Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一个宿主机内的容器都接入同一个网桥,这样容器之间就能通过容器的Container-IP进行通信了。在执行docker run命令时,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机上使用ifconfig,就可以看到docker0和自己create的network eth0、eth1、eth2,代表网卡1、网卡2…,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址。

网桥docker0创建一对对虚拟设备接口叫做veth,另一个叫eth0,成对匹配:

  • 整个宿主机的网桥模式都是docker0,类似交换机有一个接口,每个接口叫做veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫做veth pair)
  • 每个容器实例内部也有一张网卡,每个接口就走eth0
  • docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配

所以,将宿主机上的所有容器都链接到这个内部网络上,两个容器在同一个网络下,就从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

在这里插入图片描述

4. Docker 网络模式之host

host模式是直接使用宿主机的ip地址与外界进行通信,不需要额外进行NAT转换。

NAT(Network Address Translation)是一种网络技术,用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址。NAT技术主要解决了IPv4地址短缺的问题,通过将一个外部IP地址和端口映射到更大的内部IP地址集来实现IP地址的转换。NAT的实现方式包括静态转换、动态转换和端口多路复用(PAT)。

在host模式下,容器将不会获取一个独立的Network Namespace,而是和宿主机共用一个Network Namespace,容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

在这里插入图片描述
我们举一个简单的例子:

docker run -d -p 8081:8080 --network host --name tomcat81 64fbf6b1021d

在这里插入图片描述

我们可以发现在host模式下,端口是空的,这是因为此时容器和主机是共用ip和端口的,所以host模式下端口会失效,端口会以主机端口号为主,重复时则递增

docker inspect tomcat81

在这里插入图片描述

由于和宿主机共用,所以很多配置都是空的,我们进入容器内部看网络配置,可以发现内容就是宿主机的网络配置情况

现在的问题时,因为-p端口失效,如何访问启动好的tomcat呢?(会使用tomcat默认的端口)

在这里插入图片描述

5. Docker 网络模式之none

在这种模式下,docker容器会禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)。在none模式下,并不为docker容器进行任何网络配置,也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo。需要我们自己为Docker容器添加网卡、配置IP等。

6. Docker 网络模式之container

新建的容器和已经存在的容器共享一个网络ip配置,而是不和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的文件系统、进程列表都是隔离的。

在这里插入图片描述
这里我们使用Alpine操作系统(Alpine时一个面向安全的Linux发行版)来演示:

docker run -it --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh

在这里插入图片描述
我们首先查看alpine1的网络情况:

在这里插入图片描述

再查看alpine2的网络情况:

在这里插入图片描述
可以看到alpine2的网卡情况和alpine1完全一致,所以alpine2确实复用了alpine1的网络(alpine1如果关闭了alpine2就会失去访问网络的功能)。

7. Docker 网络模式之自定义网络模式

前面说到Docker默认使用bridge模式,所有的容器都可以互通,如果我们现在的需求时某些业务相关的容器可以互通,而其它容器不能和这些容器通信,这时就需要使用到自定义的网络模式。

下面结合案例理解一下如何使用这种网络模式:

新建立两个tomcat容器:

docker run -d -p 8081:8080  --name tomcat81 64fbf6b1021d
docker run -d -p 8082:8080  --name tomcat82 64fbf6b1021d

在这里插入图片描述

此时默认使用bridge模式

现在我们分别进入两个容器内部:
在这里插入图片描述
然后我们看看根据ip地址是不是两个tomcat容器可以ping通。

tomcat81的ip地址:172.17.0.2
tomcat82的ip地址:172.17.0.3

在这里插入图片描述

可以发现时可以互相ping通的,但是如果现在安装服务名(tomcat81和tomcat82)就ping不通了

现在我们来使用我们的自定义网络:

首先新建立一个网络:

docker network create jackiechai_network

在这里插入图片描述
将tomcat容器加入到这个网络中:

docker run -d -p 8081:8080 --network jackiechai_network  --name tomcat81 64fbf6b1021d
docker run -d -p 8082:8080 --network jackiechai_network  --name tomcat82 64fbf6b1021d

在这里插入图片描述

现在再两个容器内部就可以安装ip或者具体的服务名来ping通了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理之指令寻址

一、顺序寻址 1、定长指令字结构 2、变长指令字结构 二、跳跃寻址 三、数据寻址 1、直接寻址 2、间接寻址 3、寄存器寻址 寄存器间接寻址 4、隐含寻址 5、立即寻址 6、偏移寻址 1、基址寻址 2、变址寻址 3、相对寻址

力扣199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: [] /*** Def…

语法分析!!!

一、实验题目 根据给定文法编写调试预测分析程序&#xff0c;对任意输入串用预测分析法进行语法分析。 二、实验目的 加深对预测分析法的理解。 三、实验内容 四、实验代码 #include <iostream> #include <stdio.h> #include <string> #include <…

隐式链接DLL

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 【例9.5】创建的基于MFC对话框的应用程序MFCImLink2&#xff0c;隐式链接例9.2创建的MFCLibrary2.dll&#xff0c;使用其中的导出函数求正方形的面积。 (1) 使用MFC应用程…

【零基础一看就会】Python爬虫从入门到应用(下)

目录 一、urllib的学习 1.1 urllib介绍 1.2 urllib的基本方法介绍 urllib.Request &#xff08;1&#xff09;构造简单请求 &#xff08;2&#xff09;传入headers参数 &#xff08;3&#xff09;传入data参数 实现发送post请求&#xff08;示例&#xff09; response.…

野火FPGA跟练(四)——串口RS232、亚稳态

目录 简介接口与引脚通信协议亚稳态RS232接收模块模块框图时序波形RTL 代码易错点Testbench 代码仿真 RS232发送模块模块框图时序波形RTL 代码Testbench 代码仿真 简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&#xff0c;异步串行通信接口。发送数据时…

微服务开发与实战Day04

一、网关路由 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 在SpringCloud中网关的实现包括两种&#xff1a; 1. 快速入门 Spring Cloud Gateway 步骤&#xff1a; ①新建hm-gateway模块 ②引入依赖pom.xml(hm-gateway) <?xml version…

解锁俄罗斯市场:如何选择优质的俄罗斯云服务器

在当前云计算市场上&#xff0c;很多大型的云厂商并没有俄罗斯服务器的云节点&#xff0c;这给许多企业在拓展海外业务时带来了一定的困扰。然而&#xff0c;俄罗斯作为一个经济发展迅速的国家&#xff0c;其市场潜力不可忽视。因此&#xff0c;选择一台优质的俄罗斯云服务器成…

【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表 管理数据库 创建数据库 在MySQL中&#xff0c;创建数据库的SQL命令相对简单&#xff0c;基本语法如下&#xff1a; CREATE DATABASE 数据库名;如果你想避免在尝试创建已经存在的数据库时出现错误&#xff0c;可以添加 IF NOT EXISTS 子句&#xff0c;这样如…

数据结构(C):二叉树前中后序和层序详解及代码实现及深度刨析

目录 &#x1f31e;0.前言 &#x1f688;1.二叉树链式结构的代码是实现 &#x1f688;2.二叉树的遍历及代码实现和深度刨析代码 &#x1f69d;2.1前序遍历 ✈️2.1.1前序遍历的理解 ✈️2.1.2前序代码的实现 ✈️2.1.3前序代码的深度解剖 &#x1f69d;2.2中序遍历 ✈…

计算机网络:数据链路层 - 扩展的以太网

计算机网络&#xff1a;数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网&#xff0c;他最初使用粗铜轴电缆作为传输媒体&#xff0c;后来演进到使用价格相对便宜的细铜轴电缆。 后来&#xff0c;以太网发展出来了一种使用大规模…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义&#xff0c;Agent执行器&#xff0c;本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列&#xff1a;从现象看机制&#xff08;上篇&#xff09; AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…

Springboot使用webupload大文件分片上传(包含前后端源码)

Springboot使用webupload大文件分片上传&#xff08;包含源码&#xff09; 1. 实现效果1.1 分片上传效果图1.2 分片上传技术介绍 2. 分片上传前端实现2.1 什么是WebUploader&#xff1f;功能特点接口说明事件APIHook 机制 2.2 前端代码实现2.2.1&#xff08;不推荐&#xff09;…

计算机组成原理之计算机系统层次结构

目录 计算机系统层次结构 复习提示 1.计算机系统的组成 2.计算机硬件 2.1冯诺依曼机基本思想 2.1.1冯诺依曼计算机的特点 2.2计算机的功能部件 2.2.1MAR 和 MDR 位数的概念和计算 3.计算机软件 3.1系统软件和应用软件 3.2三个级别的语言 3.2.1三种机器语言的特点 3…

★pwn 24.04环境搭建保姆级教程★

★pwn 24.04环境搭建保姆级教程★ &#x1f338;前言&#x1f33a;Ubuntu 24.04虚拟机&#x1f337;VM&#x1f337;Ubuntu 24.04镜像 &#x1f33a;工具&#x1f337;可能出现的git clone错误&#x1f337;复制粘贴问题&#x1f337;攻击&#x1f337;编题 &#x1f33a;美化&…

【AI大模型】Transformers大模型库(五):AutoModel、Model Head及查看模型结构

目录​​​​​​​ 一、引言 二、自动模型类&#xff08;AutoModel&#xff09; 2.1 概述 2.2 Model Head&#xff08;模型头&#xff09; 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#xff0c;为huggingface上数以万计的预…

使用 Keras 的 Stable Diffusion 实现高性能文生图

前言 在本文中&#xff0c;我们将使用基于 KerasCV 实现的 [Stable Diffusion] 模型进行图像生成&#xff0c;这是由 stable.ai 开发的文本生成图像的多模态模型。 Stable Diffusion 是一种功能强大的开源的文本到图像生成模型。虽然市场上存在多种开源实现可以让用户根据文本…

【会议征稿,IEEE出版】第三届能源与电力系统国际学术会议 (ICEEPS 2024,7月14-16)

如今&#xff0c;全球能源行业正面临着前所未有的挑战。一方面&#xff0c;加快向清洁、可再生能源转型是遏制能源环境污染问题的最佳途径之一&#xff1b;另一方面&#xff0c;电力系统中新能源发电、人工智能技术、电力电子装备等被广泛应用和期待&#xff0c;以提高能源可持…

transformer - 注意力机制

Transformer 的注意力机制 Transformer 是一种用于自然语言处理任务的模型架构&#xff0c;依赖于注意力机制来实现高效的序列建模。注意力机制允许模型在处理一个位置的表示时&#xff0c;考虑输入序列中所有其他位置的信息&#xff0c;而不仅仅是前面的几个位置。这种机制能…

ATTCK红队评估(五)

环境搭建 靶场拓扑图&#xff1a; 靶机下载地址: 漏洞详情 外网信息收集 确定目标靶机地址&#xff1a; 发现主机192.168.135.150主机是本次攻击的目标地址。探测靶机开放的端口信息&#xff1a; 目标靶机开放了两个端口&#xff1a;80、3306&#xff0c;那没什么意外的话就是…