【Docker】网络配置network详解

一,network的概述

解决痛点(能干什么?):
(1)容器间的互联和通信以及端口映射
(2)容器IP变动时候,可以通过服务名直接网络通信而不受到影响

二,network的基本用法

# 连接容器到网络
docker network connect 网络名 # 创建网络(使用统一网络的容器,肯定可以ping通)
docker network create  网络名 # 断开网络
docker network disconnect  网络名# 查看网络具体信息
docker network inspect  # 查看所有网络列表
docker network ls   # 删除无用网络
docker network prune  # 删除指定的网络
docker network rm 

三,network的五种网络模式

网络模式命令指定方式描述理解
bridge–network bridge为每一个容器分配、设置 ip ,并将容器连接到 docker0 虚拟网桥上,虚拟网桥,默认为该网络模式一人一个
host–network host容器不会创建自己的网卡,配置 ip 等,而是使用宿主机的 ip 和端口多人一个
container–network 容器名称或id新创建的容器不会创建自己的网卡和配置自己的ip,而是和一个指定的容器共享ip、端口范围等自己没有,用别人的
none–network none容器有独立的Network namespace,但并没有对其进行任何网络设置,如网桥,ip等有,但是空的

(1)桥接模式—— bridge

为每一个容器分配、设置IP等,并将容器连接到docker0的虚拟网桥。若没有特别申明,则为默认自带一个IP以及网络设置。
在这里插入图片描述

  • Docker使用Linux桥接的方式,在宿主机虚拟一个Docker容器网桥(docker0)。
    Docker每启动一个容器时会根据Docker网桥的网段分配给容器一个ip地址。
    同时Docker网桥是每个容器的默认网关。
    同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

  • docker run创建容器的时,未指定network的容器默认的网络模式就是bridge,使用的就是docker0。
    在宿主机ifconfig,就可以看到docker0和自己创建的network:

    • eth0,eth1……代表网卡一,网卡二……
    • lo代表127.0.0.1(localhost)
    • inet addr表示网卡的ip地址
  • 网桥docker0会创建一对对等虚拟设备接口:一个叫veth,另一个叫eth0,成对匹配。
    整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,
    在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
    每个容器实例内部也有一块网卡,每个接口叫eth0;
    docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对。

[root@localhost ~]# docker network inspect bridge
[{"Name": "bridge",                     # 网络名称"Id": "73992551d4270844e6aaab67e4d2030e24b5670c1502d34d29070d6a871c4a4e",    # 网络ID"Created": "2024-01-05T16:06:44.585112632+08:00",   # 网络创建时间"Scope": "local",             # 网络作用范围"Driver": "bridge",           # 网络驱动"EnableIPv6": false,          # 网络是否支持ipv6"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16",     # 网络网段"Gateway": "172.17.0.1"		   # 网络ip}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"411008ba764f9209982cae4ddda07e12f851d88b00432e5b6819895fabcabfb6": {"Name": "ubt03",    # 使用改网络的容器名称"EndpointID": "1bdc19dd16fe96a8fe570dd89516f58e58ee54decd7d71f8df51dd483053d1f7","MacAddress": "02:42:ac:11:00:03",    # 使用改网络的容器的MAC地址"IPv4Address": "172.17.0.3/16",       # 使用改网络的容器的IP地址"IPv6Address": ""},"75e8ed5431da1c1558a440eb26a62648e4ee2bdffa09b68adddcc486b69d8a35": {"Name": "ubt01",     # 使用改网络的容器名称"EndpointID": "c9756c4ebe3b887fa82baec3c9019ccc4ad23aff6307760b7bab5e52f7dfd9fa","MacAddress": "02:42:ac:11:00:02",   # 使用改网络的容器的MAC地址"IPv4Address": "172.17.0.2/16",      # 使用改网络的容器的IP地址"IPv6Address": ""},"7b738c8435c3973bf7d23d97bd5a91a9d67b53eb7bf545413935db33af95dc7c": {"Name": "ubt02",     # 使用改网络的容器名称"EndpointID": "966dfe49dd8c49c44e018bdc84d7a7366c1d1f0d53035a833c367dff62266084","MacAddress": "02:42:ac:11:00:04",   # 使用改网络的容器的MAC地址"IPv4Address": "172.17.0.4/16",      # 使用改网络的容器的IP地址"IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0",   # docker0 默认就是bridge网络模式"com.docker.network.driver.mtu": "1500"},"Labels": {}}
]

(2)主机模式—— host

容器不会虚拟出自己的网卡、IP等,而是使用宿主机的IP和端口。
host模式
注意:在创建的时候,将不在指定 -p 8083:8080,无意义,运行时候会警告,但是不报错。因为该容器和主机ip和端口同步。

[root@localhost ~]# docker network inspect host
[{"Name": "host",     # 网络名称 "Id": "3aa406c8eaa186507ced3f3ff72710d350b363b5993159449de623188dd7d5e7","Created": "2023-12-15T14:18:11.018657826+08:00",    # 网络创建时间"Scope": "local",				 # 网络作用范围"Driver": "host",                # 网络驱动"EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": []},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"18720ac44b136684644e17d8deea38b74db76d8ef0f1fc342340180148377310": {"Name": "redis-node-3",   # 使用该网络的容器名称"EndpointID": "3a18044ac33afd2da1b3cadd1dd28735c278119a1b1b5f1def96f206b84d8efb", "MacAddress": "","IPv4Address": "","IPv6Address": ""},"2b2987704c6da591e321fe75f9a1518f4e4488285f0c3a20d53d32a8cf9d24da": {"Name": "redis-node-2",    # 使用该网络的容器名称"EndpointID": "825830dd9adf559a9d99e0e8dad1fd3a4ef14b137e322f2c78d9b090ad0d9390","MacAddress": "","IPv4Address": "","IPv6Address": ""},"e2304c8acbd676f76fcde5faf0f26555bedf61148ab858c22bc32c2ab9ff4a9b": {"Name": "redis-node-1",    # 使用该网络的容器名称"EndpointID": "a255555c3c7f7dffcf2c7e26a3dd752a43b826a8ccebb9f41f65bf400cb5e56d","MacAddress": "","IPv4Address": "","IPv6Address": ""}},"Options": {},"Labels": {}}
]

(3)容器模式—— container

新创建的容器不会创建自己的网卡,没有自己的IP,也不会进行相应的配置。而是和一个指定的容器共享IP端口范围等。
container模式
说明:当192.168.20.2容器停掉后,192.168.20.3的网络也会同时停掉!

--network container:共享的容器名/ID

注意: 在测试的时候,由于tomcat容器的端口,不可共用,所以在测试的时候,还是用Alpine(简单、小巧、安全)小插件来测试:

# 创建alpine1
$ docker run -it                              --name alpine1 alpine /bin/sh# 创建alpine2,通过--network container:alpine1,共用网络
$ docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh

(4)none模式—— none

容器有自己独立的Network namespace,但是没有进行任何的相关配置。即禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

  • 在none模式下,并不为Docker容器进行任何网络配置。
    也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo。
    需要我们自己为Docker容器添加网卡、配置IP等。
[root@localhost ~]# docker network inspect none
[{"Name": "none",   # 网络名称"Id": "9939d4b66231cc6e90ffca805518059ab077e5b04d4933a4b69f279e91f314dd",  # 网络id"Created": "2023-12-15T14:18:10.956266297+08:00",  # 网络创建时间"Scope": "local",    # 网络作用范围"Driver": "null",    # 网络驱动"EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": []},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

(5)自定义网络

为使得众多的容器,进行分门别类,方便管理的情况下,而且通过服务名来ping通,所以采用自定义网络进行管理!
解决痛点:可以通过服务名ping通。

#创建新的网络,默认为bridge模式
docker network create new_net# 新创建两个容器tomcat81和tomcat82,并调用新建的自定义网络
docker run -d -p 8081:8080 --network new_net --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network new_net --name tomcat82 billygoo/tomcat8-jdk8

tomcat81和tomcat82 是在同一个网段,通过ip来ping肯定能够通,并且通过服务器也可以ping通。

总结,自定义网络本身就维护好了主机名和ip的对应关系( ip和域名都能通)

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

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

相关文章

功率信号的频谱

目录 1. 前言2. 功率信号的频谱3. 参考资料 1. 前言 知识点1:函数周期性判定定理   假设函数 f ( x ) f(x) f(x) 和函数 g ( x ) g(x) g(x) 均为周期性函数,其最小正周期分别为 T f T_f Tf​ 和 T g T_g Tg​,若 T f / T g T_f/T_g T…

搜索引擎评价指标及指标间的关系

目录 二分类模型的评价指标准确率(Accuracy,ACC)精确率(Precision,P)——预测为正的样本召回率(Recall,R)——正样本注意事项 P和R的关系——成反比F值F1值F值和F1值的关系 ROC(Receiver Operating Characteristic)——衡量分类器性能的工具AUC&#xff…

基于Java SSM框架实现校园兼职系统项目【项目源码+论文说明】

基于java的SSM框架实现校园兼职系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个学生的使用。互联网具有便利性,速度快,效率高,…

[office] excel计算客户名单的人数 COUNTA 函数:“销售额”不仅是金额的总和 #知识分享#职场发展#知识分享

excel计算客户名单的人数 COUNTA 函数:“销售额”不仅是金额的总和 前文中介绍的 SUM 函数,是在日常工作中使用频率最高的函数之一。但是,在实际操作时也会出现问题。比如在计算销售额总和时,SUM 函数得出的结果为金额总和。但是…

RISC-V指令格式

RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 RISC-V指令集命名规范 前面提到过RV32I,这是…

5. 基础网络服务与应用配置

5.1 实验一:FTP 基础配置实验 5.1.1 实验介绍 5.1.1.1 关于本实验 设备支持多种文件管理方式,用户根据任务和安全性要求选择合适的文件管理方式。 用户可以通过直接登录系统、FTP(File Transfer Protocol)、TFTP(T…

【深度学习】数据归一化/标准化 Normalization/Standardization

目录 一、实际问题 二、归一化 Normalization 三、归一化的类型 1. Min-max normalization (Rescaling) 2. Mean normalization 3.Z-score normalization (Standardization) 4.非线性归一化 4-1 对数归一化 4-2 反正切函数归一化 4-3 小数定标标准化(Demi…

Day17、18、19学习记录

#c语言知识 内存管理 1.作用域 (1)代码块作用域(代码块是{}之间的一段代码) (2)函数作用域 (3)文件作用域 2.局部变量(自动变量auto): 在函…

jmeter-03界面介绍

文章目录 主界面介绍测试计划介绍线程组介绍线程组——选择测试计划,右键-->添加-->线程-->线程组 主界面介绍 测试计划介绍 测试计划:本次测试所需要的所有内容,即父线程 线程组介绍 jmeter讲究一个概念:一个线程一…

Linux内存管理:(十一)页面分配之慢速路径

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 水位管理和分配优先级 页面分配…

小白水平理解面试经典题目_二维数组类LeetCode 2966 Divide Array【排序算法实现】

2966 将数组划分为具有最大差值的数组 小白渣翻译: 给定一个大小为 n 的整数数组 nums 和一个正整数 k 。 将数组分成一个或多个大小为 3 的数组,满足以下条件: nums 的每个元素都应该位于一个数组中。一个数组中任意两个元素之间的差异小…

力扣每日一题 ---- 1906. 查询差绝对值的最小值

本题中,我们的题目求的是差值的最小值,我们考虑一个因素,当前题目中给出的数组是没有排序过的,那么想要求的差值,是不是要两两配对进行判断差值最小值。这里我们就很费时间了, O(N^2)的时间复杂度&#xf…

【LeetCode】27.移除元素 (快慢指针法)

题目 图解 思路 运行代码 代码 采用 LeetCode 的格式模板 int removeElement(int* nums, int numsSize, int val) {int Left 0;int Right 0;while(Right < numsSize){if(nums[Right] ! val) {nums[Left] nums[Right];Left;}Right;}return Left;// 此时 Left 刚好是数组的…

FANUC机器人开机时无法进入系统,示教器黑屏故障处理总结

FANUC机器人开机时无法进入系统&#xff0c;示教器黑屏故障处理总结 故障描述&#xff1a; FANUC机器人开机时&#xff0c;示教器在初始化时显示&#xff1a;EMAC initial call failed&#xff08;示教器上电时会进入boot画面&#xff0c;左上角会出现一些白色的英文提示&#…

Linux系统漏洞一键检测与修复工具

支持检测及修复漏洞的列表 OpenSSL CVE-2021-3712 OpenSSH CVE-2021-41617 sudo CVE-2021-3156 glibc CVE-2018-11236 polkit CVE-2021-4034 wget CVE-2017-13090 kernel CVE-2016-5195 bash CVE-2016-7543 samba CVE-2021-…

算法基础,一维,二维前缀和差分详解

目录 1.前缀和 1.一维前缀和 例题&#xff1a;【模板】前缀和 2.二维前缀和 例题&#xff1a;【模板】二维前缀和 2.差分 1.一维差分 1.性质&#xff1a;d[i]的前缀和等于a[i] 2.性质&#xff1a;后缀区间修改 例题&#xff1a;【模板】差分 2.二维差分 例题&#x…

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…

YOLO-World: Real-Time Open-Vocabulary Object Detection

文章目录 1. Introduction2. Experiments2.1 Implementation Details2.2 Pre-training2.3 Ablation Experiments2.3.1 预训练数据2.3.2 对RepVL-PAN的消融研究2.3.3 文本编码器 2.4 Fine-tuning YOLO-World2.5 Open-Vocabulary Instance Segmentation2.6 Visualizations Refere…

Linux系统安全:安全技术 和 防火墙

一、安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,类 似于监控…

ABAP Range Table:RANGES的使用

目录 Range TableRANGERANGES RANGE的四个参数SIGNOPTIONLOWHIGH示例程序 Range Table 1、Range Table 概述 RANGE TABLE为 SAP R/3系统标准内表的一种&#xff0c;结构与 Selection Table 一致&#xff0c; 由 SIGN, OPTION, LOW 和 HIGH字段组成&#xff1b; 可以通过 TYPE…