Docker 网络模式 -day05

docker 启动时候还会有,名为docker0的虚拟网桥,注意网址为 127.0.0.1

[root@iZuf6hxabqikytnrumsi4gZ ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:7fff:fe81:d287  prefixlen 64  scopeid 0x20<link>
        ether 02:42:7f:81:d2:87  txqueuelen 0  (Ethernet)
        RX packets 135  bytes 9419 (9.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 213  bytes 15282 (14.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 查看docker的 网络命令

docker network COMMAND

如下: 

docker network ls    查看网络
docker network create 网络名    创建网络
docker network connect 网络名    为容器连接到网络
docker network disconnect 网络名    断开容器的网络
docker network inspect 网络名    查看网络源数据
docker network rm 网络名字    删除网络
docker network prune    删除所有无用的网络
 

一、Docker网络模式

Docker有四种网络模式:

  •         bridge模式:默认设置,容器和宿主机都配置在一个网络空间中。
  •         none模式:不配置任何网络参数,需要手动配置。
  •         host模式:容器和宿主机共享一个网络命名空间,不配置独立的网络空间。        
  •         container模式:将容器设置为网络命名空间,使容器和宿主机有相同的IP地址和端口号。

二、 bridge:网桥模式 

查看容器ip,可以看到容器内的 IPAddress 与上面 docker0在同一个网段。

[root@iZuf6hxabqikytnrumsi4gZ ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS                                                  NAMES
462ff8d8719e   b66e5037b732   "bash"                   3 minutes ago   Up 31 seconds   80/tcp                                                 centosjava8
a34aff536643   redis:6.2.6    "docker-entrypoint.s…"   13 days ago     Up 3 hours      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis6.2.6
2a384f369e0b   mysql:5.7      "docker-entrypoint.s…"   2 weeks ago     Up 3 hours      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql5.7

2-查看最后二十行关于网络的配置
[root@iZuf6hxabqikytnrumsi4gZ ~]# docker inspect centosjava8|tail -n 20
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a09227a0c60fe5b8afd1082d3ba2d5d7425d0f7aeafd861caf1d8103886f34c7",
                    "EndpointID": "9a3b00d21d96ec4e1bf34549b77429ecd835e0f69db4d92bc27e03354f75239b",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }
        }
    }
]

 网桥模式通信示意图:

1、整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼比联通(这样一对接口叫veth pair) :
2、 每个容器实例内部也有一块网卡,每个接口叫eth0;
3、docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对。

所以:网桥模式下:docker0 相当于交换机一样功能,让各个容器通信

 三、主机模式

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

 启动一个本地的镜像:以host 方式

docker run -it  --network=host --name centosjava8 b66e5037b732 bash

 容器共享宿主机ip,端口也是默认的。

1-查看容器
[root@iZuf6hxabqikytnrumsi4gZ ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
74e40d517ff9   b66e5037b732   "/bin/sh -c /bin/bash"   3 minutes ago   Up 3 minutes                                                          kind_kepler
a34aff536643   redis:6.2.6    "docker-entrypoint.s…"   2 weeks ago     Up 7 hours     0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis6.2.6
2a384f369e0b   mysql:5.7      "docker-entrypoint.s…"   2 weeks ago     Up 7 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql5.7

2-查看容器信息 看到host方式启动。与宿主机共用一份,ip网关都是空的
[root@iZuf6hxabqikytnrumsi4gZ ~]# docker inspect 74e40d517ff9|tail -n 20
            "Networks": {
                "host": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "f41a3dd68f79020a979539af616a2fadbb7cb95f18597a1611d4ef19198d9039",
                    "EndpointID": "331746e74ee6e7a53ffd2d32aa3d00ab15e53ff2037ec3b0584a2c1007e98247",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]
[root@iZuf6hxabqikytnrumsi4gZ ~]# 

 四、none网络模式

在none模式下,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo需要我们自己为Docker容器添加网卡、配置IP等。

五、 container网络模式 

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

示例如下:

借用容器 centosjava8 的配置,共用一个网桥,如果关闭centosjava8 容器那么生成的centosjava81也就没有ip

docker run -it --network container:centosjava8  --name centosjava81 b66e5037b732 bash

 如图:

六、自定义网络 

 docker多个容器之间的集群规划要使用服务名,因为ip是会变动,使用自定义网络模式能够使用服务名进行通信


1-创建自定义网络
[root@iZuf6hxabqikytnrumsi4gZ ~]# docker network create mynetwork
f43d61b56f9e124f6ea6cd80d627d15990c7a9316974be773c33d7d232731212

2-查看自己创建的网络 mynetwork
[root@iZuf6hxabqikytnrumsi4gZ ~]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
e8026a20994a   bridge      bridge    local
f41a3dd68f79   host        host      local
f43d61b56f9e   mynetwork   bridge    local
9eae36819684   none        null      local
[root@iZuf6hxabqikytnrumsi4gZ ~]# 

 后台启动2个容器:

docker run -it  --network mynetwork --name t1 centosjava8:1.0


docker run -it  --network mynetwork --name t2 centosjava8:1.0

 过程如下

1-查看镜像
[root@syf ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
centosjava8   1.0       b66e5037b732   8 days ago      1.27GB
redis         6.2.6     7614ae9453d1   24 months ago   113MB
mysql         5.7       c20987f18b13   24 months ago   448MB



[root@syf ~]# docker run -it  --network mynetwork --name t1 centosjava8:1.0

[root@syf ~]# docker run -it  --network mynetwork --name t2 centosjava8:1.0


2-查看容器
[root@syf ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED              STATUS              PORTS                                                  NAMES
9bc9c68b9582   centosjava8:1.0   "/bin/sh -c /bin/bash"   27 seconds ago       Up 26 seconds       80/tcp                                                 t2
e50315d22041   centosjava8:1.0   "/bin/sh -c /bin/bash"   About a minute ago   Up About a minute   80/tcp                                                 t1
a34aff536643   redis:6.2.6       "docker-entrypoint.s…"   2 weeks ago          Up 6 minutes        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis6.2.6
2a384f369e0b   mysql:5.7  

3-查看 t1、t2 2个容器都是在一个网段上
[root@syf ~]# docker inspect t1|tail -n 20
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "de322bc41064e1f7314af8f991d7b984a975c890ebbcf505598f2a24bea7e52e",
                    "EndpointID": "5ab83e65694b064a8a7237a5e53fe28c6170502de8a10af0af2e8a06583057f0",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }
        }
    }
]
[root@syf ~]# docker inspect t2|tail -n 20
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "de322bc41064e1f7314af8f991d7b984a975c890ebbcf505598f2a24bea7e52e",
                    "EndpointID": "0c281bffcded7267cd9ce428ecdc9be6fb6f375b35d02f1e62080a5ac28f3ee1",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.5",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:05",
                    "DriverOpts": null
                }
            }
        }
    }
]

测试

1-进入t1容器 ping t2
[root@syf ~]# docker exec -it t1 bash

2- 用服务名也可以ping通
[root@9bc9c68b9582 local]# ping t2 -c 3
PING 172.17.0.5 (172.17.0.5) 56(84) bytes of data.
64 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from 172.17.0.5: icmp_seq=3 ttl=64 time=0.067 ms

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT如何计算token数?

GPT 不是适用于某一门语言的大型语言模型&#xff0c;它适用于几乎所有流行的自然语言。所以 GPT 的 token 需要 兼容 几乎人类的所有自然语言&#xff0c;那意味着 GPT 有一个非常全的 token 词汇表&#xff0c;它能表达出所有人类的自然语言。如何实现这个目的呢&#xff1f;…

RK3568平台开发系列讲解(Linux系统篇)GPIO接口介绍

🚀返回专栏总目录 文章目录 一、GPIO 子系统接口二、GPIO描述符相关结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在目前的 Linux 内核主线中,GPIO(通用输入/输出)子系统存在两个版本,这里将两个版本区分为新版本和旧版本。新版本 GPIO 子系统接口是基于…

【项目管理】redmine

Redmine是用Ruby开发的基于web的项目管理软件&#xff0c;是用ROR框架开发的一套跨平台项目管理系统&#xff0c;据说是源于Basecamp的ror版而来&#xff0c;支持多种数据库&#xff0c;有不少自己独特的功能&#xff0c;例如提供wiki、新闻台等&#xff0c;还可以集成其他版本…

nodejs微信小程序+python+PHP购物商城网站-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

防反接电路与MOS管防反接深入解析

一、经典防反接电路 1、二极管防反接 这种电路使用一个二极管将电源的正极与负极相连&#xff0c;当电源的极性正确时&#xff0c;二极管处于正向导通状态&#xff0c;电流可以正常流过&#xff1b;而当电源的极性反接时&#xff0c;二极管处于反向截止状态&#xff0c;电流无…

函数(C++)

1.7 函数1.7.1 函数缺省参数1.7.2 哑元1.7.3 引用参数1.7.4 返回引用1.7.5 函数重载 1.7 函数 1.7.1 函数缺省参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的。有默认值的参数即为默认参数。 在函数调用时&#xff0c;有默认参数可以缺省。 语法&#xff1…

关于Python里xlwings库对Excel表格的操作(十五)

这篇小笔记主要记录如何【获取单元格数据的对齐方式或更改单元格数据的对齐方式】。 前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xf…

你想改win11系统中窗口、菜单等的字体? 微软不想让你改

如果你感觉win11系统中显示的字体不好看&#xff0c;想换。等一等&#xff0c;微软本不想让你改。 Windows 11 在默认情况下并没有提供直接修改系统默认字体的选项&#xff0c;而需要进行注册表或其他高级设置来更改系统字体。这可能是因为微软希望保持系统的一致性和稳定性&a…

Apache Flink(十七):Flink On Standalone任务提交-Standalone Application模式

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

【SQLite】SQLite数据库简单使用与Navicat安装-加密

Sqlite为免安装数据库&#xff0c;安装步骤总结&#xff1a; 官网下载Sqlit数据库&#xff0c;官网下载地址:https://www.sqlite.org/download.html 下载: sqlite-dll-win64-x64-3390400.zip或者32位sqlite-dll-win32 sqlite-tools-win-x64-3440200.zip或者32位sqlite-tools-wi…

idea 如何使用 JaCoCo 跑覆盖率

背景介绍 什么代码覆盖&#xff1f; 代码覆盖(Code coverage)是软件测试中的一种度量&#xff0c;描述程序中源代码被测试的比例和程度&#xff0c;所得比例称为代码覆盖率。简单来理解&#xff0c;就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试覆盖率…

微软 Visual Studio 迎来 AI 建议命名功能

目录 1微软 Visual Studio 迎来 AI 建议命名功能 2专访核桃编程CEO曾鹏轩&#xff1a;实操是掌握编程技能的唯一办法 1微软 Visual Studio 迎来 AI 建议命名功能 IT之家 12 月 19 日消息&#xff0c;使用付费 GitHub Copilot Chat 扩展的 Visual Studio Preview 用户&#xf…

Vue 2.5 入门学习记录

Vue 2.5 入门学习记录 1. 基础知识Vue 是什么Vue引入方式Vue特点Vue实例中的数据事件方法Vue中的属性绑定和双向绑定Vue中的v-if、v-show、v-fortoDoList制作局部组件&全局组件 2. vue-cli工程3. 工程案例实践使用vue-cli实现todoList及删除某个元素全局样式与局部样式 4. …

【K8s】#1使用kuboard-spray安装K8s集群

文章目录 搭建k8s集群1.推荐配置1.1.服务器配置1.2.软件版本 2.使用Kuboard-Spray安装k8s集群2.1.配置要求2.2.操作系统兼容性2.3.安装 Kuboard-Spray2.4.加载离线资源包2.5.规划并安装集群2.6.安装成功2.7.访问集群 3.涉及的命令3.1.linux 4.问题汇总Q1&#xff1a;启动离线集…

AI创作系统ChatGPT商业运营网站系统源码,支持AI绘画,GPT语音对话+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

2023 英特尔On技术创新大会直播 |AI小模型更有性价比

前言&#xff1a; 今年是引爆AI的一年&#xff0c;从幼儿园的小朋友到80岁的老奶奶都认识AI&#xff0c;享受AI带来的便捷&#xff0c;都在向市场要智能&#xff0c;但AI的快速发展离不开底层硬件设施的革新。 英特尔是全球知名的半导体公司&#xff0c;专注于计算机处理器和芯…

【C语言】指针详解(一)

目录 1.内存和地址 1.1内存 1.2如何理解编址 2.指针变量和地址 2.1取地址操作符&#xff08;&&#xff09; 2.2指针变量和解引用操作符&#xff08;*&#xff09; 2.2.1指针变量 2.2.2拆解指针类型 2.2.3解引用操作符 2.3指针变量大小 1.内存和地址 1.1内存 在讲内…

【Docker-4】Docker 命令

1、镜像管理命令 docker images #查看本机镜像 [rootdocker-0001 ~]# docker imagesdocker search 镜像名称 #从官方仓库查找镜像 [rootdocker-0001 ~]# docker search busybox #需要联网&#xff0c;本次不用操作docker pull 镜像名称:标签 #下载镜像 [rootdocke…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中&#xff0c;高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件&#xff0c;通过促进将数据无缝摄取到 Elasticsearch 中&#xff0c;在此过程中发挥着至关重要的作用。 然而&#xff0c;显着影响此过程整体有效性的关…

英国呼叫中心的功能

随着互联网的普及和信息技术的发展&#xff0c;越来越多的企业需要通过呼叫中心来管理客户关系和提供售后服务。英国作为主要的海外外贸市场之一&#xff0c;也是呼叫中心面向客户服务的重要国家。 英国呼叫中心的功能 英国呼叫中心的功能大致分为四类&#xff1a;接听电话、…