一、网络Docker理解
时间:2021-09-27
本文章向大家介绍一、网络Docker理解,主要包括一、网络Docker理解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
网络Docker理解
理解docker0
[root@docker ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:d0:e3:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.11/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fed0:e3d9/64 scope link
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:0c:c8:12:56 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
网卡讲解:
lo:本机回环地址
eth0:本机内网ip地址
docker0:docker地址
三个网络
#问题:docker是如何处理容器访问的
[root@docker ~]# docker run -d -P --name tomcat01 tomcat
#查看容器内部ip地址:ip addr 发现容器启动的时候会得到一个eth0@if10 IP地址,docker分配的!
[root@docker ~]# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
#思考、linux能不能ping通容器内部!
[root@docker ~]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.035 ms
#linux可以ping通docker内部容器
原理
1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0
桥接模式,使用的技术evth-pair技术
再次测试ip addr发现多了一个网卡
[root@docker ~]# ip addr
...................
10: veth6e4dc0c@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether 32:f6:1f:c1:c8:03 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::30f6:1fff:fec1:c803/64 scope link
valid_lft forever preferred_lft forever
在启动一个容器,发现又多了一对网卡
[root@docker ~]# docker run -d -P --name tomcat2 tomcat
#我们发现容器带来的网卡都是一对对的
[root@docker ~]# ip addr
...................
20: veth6e9f134@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether 5e:f6:00:74:d9:9b brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::5cf6:ff:fe74:d99b/64 scope link
valid_lft forever preferred_lft forever
#evth-pair技术就是一对虚拟设备接口,一端连着协议,一端彼此相连
#opstac,docker容器之间的连接,OVS的连接,都是使用evth-pair技术
3.我们来测试一个两个容器是否能够ping通
[root@docker ~]# docker exec -it tomcat02 ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.041 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.048 ms
#容器与容器之间是可以互相通信的
结论:Tomcat01与02是公用的路由器,docker0
所有的容器不指定网络的情况下,都是docker0路由器,docker会给我们的容器分配一个默认的可用IP
小结:docker使用的是linux的桥接,宿主机中是一个docker容器的网桥docker0
Docker中所有的网络都是虚拟的,因为虚拟转发的效率高!
只要容器删除,对应的一对网桥也没有了!
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
219769a74201 bridge bridge local
f6b9d84b1f81 host host local
47132fb890ac none null local
6a0ea9685aaa test-net bridge loca
原文地址:https://www.cnblogs.com/momo6656/p/15342960.html
- 基于Consul的分布式信号量实现
- 用Python将word文件转换成html
- 1行Python代码实现FTP服务器
- 100行Python代码实现自动抢火车票
- Python交互式数据分析报告框架:Dash
- PyQt5 GUI应用程序工具包入门(2)
- 用Python研究了三千套房子,告诉你究竟是什么抬高了房价?
- 设计模式之装饰模式
- Android网络编程(六)OkHttp3用法全解析
- Android网络编程(五)OkHttp用法全解析
- Android网络编程(一)HTTP协议原理
- Spring Cloud实战小贴士:Zuul统一异常处理(二)
- Android View体系(九)自定义View
- Android网络编程(二)HttpClient与HttpURLConnection
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
- Jmeter接口压测示例
- Kubernetes_v1.18.2环境搭建 博主亲自实践可用
- CVE-2020-9484:Tomcat Session 反序列化复现
- Jmeter系列之no-gui模式
- Pytest之基本介绍
- 企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
- 微信小程序的生命周期学习笔记-应用篇
- matplotlib基础绘图命令之plot
- Qt官方示例-样式表
- 入坑 LinkedList,i 了 i 了
- Elasticsearch 利用API进行搜索
- 通过 Serverless Regsitry 快速开发与部署一个 WordCount 实例
- 聊聊dubbo-go的gracefulShutdownFilter
- 强烈推荐:2020年15道优秀的TypeScript练习题 (上集)