Docker小白到实战之Docker网络简单了解一下

前言

现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配、容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下来就大概说说。

正文

1. Docker网络模式简介

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器默认会连接到这个虚拟网桥上。这样所有容器通过这个虚拟网桥就打通了,所以这里的docker0工作方式和物理交换机很像。

在主机上可以执行命令ip link show docker0查看:

4a92285ef393fd0e2a122aa7d98cd670.png

Docker在启动容器时可以指定网络模式,如果不指定,默认就是采用Bridge模式;Docker的网络模式有如下几种:

  • Bridge(桥接)模式:默认的网络模式,比较适用于在同一Docker Daemon主机上运行的容器,用户也可以自定义bridge网络,优于默认的bridge网络;如果需要不同Docker主机进行通信,可以通过操作系统网络配置,也可以使用Overlay模式。

  • Host模式:和宿主机共用一个Network Namespace。即容器不会虚拟出自己的网卡和配置自己的IP等,而是使用宿主机的IP和端口;

  • Overlay模式:覆盖网络可以将多个 Docker Daemon主机连接在一起,并使 swarm 服务能够相互通信;也可以让Docker Daemon主机上的两个独立容器进行通信。

  • Macvlan模式:Macvlan 网络允许为容器分配 MAC 地址,使其在网络上显示为物理设备。Docker Deamon通过容器的 MAC 地址将流量路由到容器。

  • None模式:Docker容器拥有自己的Network Namespace,但是并不为容器进行任何网络配置。即容器没有网卡、IP、路由等信息。需要单独为Docker容器添加网卡、配置IP

Docker在启动容器的时候可以通过--net指定网络模式,不指定,默认就是bridge模式,如下:

# --net指定网络模式,这里指定为host模式
docker run -d --name testnet --net host nginx
# 通过docker inspect 容器 看网络细节,如下图
docker inspect testnet
b4af58523ded4bdab1f9ae90459065c4.png

2. Bridge默认模式了解一下

这里就以默认的Bridge(桥接)展开来说说,其他模式后续根据应用场景再具体细说。

这里主要看看主机和容器之间的网络、容器和容器之间的网络。

在Bridge模式下,当启动容器时,Docker会分配一个IP给容器,并设置docker0的IP地址为容器的默认网关;这个时候会在主机上创建一对虚拟网卡veth pair设备接口,Docker将veth pair设备的一端配置在新启动的容器中,并命名为eth0@ifxxx(容器的网卡),另一端在主机中以veth***@ifxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。

容器没有启动时主机的网络配置如下:

ef3d5825d2f9404968a7161b2266560b.png

当启动容器时,Docker主机就会创建一对虚拟网卡vethpair设备接口,如下:

5cd568557b7d01112afdb177889470ed.png

可以进入到容器看看IP分配情况,如果ip addr命令在容器内找不到,那是因为基础镜像只包含核心命令,如果要执行其他命令,需要额外安装。可以在容器内执行如下命令进行安装。

apt update && apt install -y iproute2

安装好之后,就可以查看容器内的IP情况了,如下:

442ef6d554ff43cf0be7e0a365308390.png

这里有没有发现容器内的IP是和主机多出来的虚拟网卡是成对出现,这样主机网络和容器之间肯定能通;

f030e8eaa5e252d3305c2fba665dfdd9.png

当然容器内部也可以ping通主机。

那容器之间能不能访问呢?

容器内ping命令也找不到,需要进行安装,执行如下命令:

apt update && install iputils-ping

这里新启动一个容器mynginx2,IP内部分配如下:

0412636d391b7f1fdd033bc2c1594e1a.png

mynginx容器内能ping通mynginx2,那是因为两个容器之间共用了docker0,通过docker0进行转发

44fd5a3da5a27f2f13be323c532fbbf7.png

大概一个网络流程如下:

9ef2208c4ff1957d29450cdada2a8a6a.png

这里的Docker0就好比是交换机,形成了网络桥梁。

3. 如何能通过容器名进行访问

默认情况,容器间的访问只能通过IP,不能通过容器名访问;

e1060f3c32000acb661c66964a37c153.png

这种情况对于线上项目很不灵活,比如数据库备份需要临时迁移,IP可能会不一样,所以项目中的地址要重新配置,如果能通过容器名访问,那么就不用操心更换啦,只要容器名一样即可,就好比域名和IP的关系一样,IP再怎么变,域名不变就行。

3.1 通过--link方式;

新启动一个容器mynginx3,如下:

# 通过--link关联 mynginx容器
docker run -d --name mynginx3 --link mynginx nginx

容器启动之后,可以进入到容器测试:

# 进入容器
docker exec -it mynginx3 /bin/bash 
# 安装ping工具
apt update && apt install iputils-ping
379a122387791b2214605410da513946.png

内部原理其实是在mynginx3内部做了个映射配置,容器mynginx3的hosts内容如下:

3226cea36bd7a3ad17e42dfbda58606e.png

这样只能在容器mynginx3内部通过mynginx容器名ping通,不能在mynginx内部通过容器名mynginx3访问,如果要达到同样的效果,就得在启动mynginx时通过--link和mynginx3关联起来。

34bd0fae4104b57e4bfe25f772dad0c7.png

如果每个容器都这样的显示指定的话,感觉就有点麻烦啦,通常的做法都是通过自定义网络方式来达到这个目的。

3.2 通过自定义网络方式;

首先新创建一个网络,如下:

9fbfb56e51d2d35bcbc61ba1c6cd53ba.png

命令解析:

# --driver 指定网络模式,这里为bridge桥接模式
# --subnet 指定子网IP  192.168.0.0/16
# --gateway 指定网关 192.168.0.1
# my-net 创建的网络名
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 my-net
# 显示网络
docker network ls

让启动的容器使用自定义的网络,即在启动容器时使用--net指定即可:

ce477bc4febb906854deaf2f4af4ac61.png

启动容器时不需要--link,只需要接入到自定义网络就可以通过容器名ping通了,如下:

b15bdd6165fe063f12315793bf129712.png

自定义网络之所以能通过容器名ping通,那是容器内运行了一个本地DNS解析器,该解析器将请求转发到Docker内部DNS服务器当中,DNS服务器中记录了容器启动时通过--name或--net-alias参数指定的名称与容器之间的关系

另外还有一个点,现在分配给容器的IP是按照预先设置的子网范围进行分配的,而不是默认的docker0子网范围,执行如下命令看详细:

# 看容器详细信息
docker inspect testmynetnginx1
5fb52fa42b723a8ee4bc9bc6d4f40e80.png

总结

关于Docker网络简单先说这么多,后续根据实际应用场景再好好细说,这里主要的目的是了解一下默认的网络模式和自定义网络方式的使用和解决的问题。

Docker之前文章目录:

  1. Docker小白到实战之开篇概述

  2. Docker小白到实战之常用命令演示,通俗易懂

  3. Docker小白到实战之容器数据卷,整理的明明白白

  4. Docker小白到实战之Dockerfile解析及实战演示,果然顺手

到目前为止,一般的Docker使用没问题了,但当容器比较多时,一个一个的拉取镜像和启动容器就显得有点不方便了,所以下次我们来学学Docker Compose,关注“Code综艺圈”,和我一起学习吧;最后祝小伙伴们中秋快乐~~~

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

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

相关文章

^_^家园游记^_^

j 你梦想中的家是怎么家的呢? 是鲁宾逊漂流记中那样:一个荒岛,一片青山绿水的悠闲自在? 还是让人流连忘返的色彩斑斓,鳞次栉比,浓浓的欧式典雅? 或是奔放自由的乡村田园,精…

sigar如何获取linux的buffer内存,Linux 下使用Sigar 获取内存信息

上一篇文章介绍了linux下的sigar 库,并使用sigar 库来获取cpu 使用率,本文在这里介绍一下如何使用sigar 库获取内存信息.和cpu 一样,sigar中有和内存相关的结构体sigar_mem_t,我们来看一下结构体原型:typedef struct {sigar_uint64_tram,total,used,free,actual_used,actual_fr…

如何将手机投屏到电脑_手机如何投屏到电脑上?详细教程看这里,手机投屏

手机再大的屏幕,也没有手机投屏到电脑、电视的体验爽。那么哪款投屏软件好用?又如何使用呢?下面小编给大家介绍下金舟苹果手机投屏软件,一起来看看如何将手机投屏到电脑上,详细步骤如下。第一步、首先,在电…

inputstream是否一定要close_汽车加装行李架后,总被交警拦下,类似改装,是否一定要备案...

其实改装不是儿戏,有些部位是一定不能触碰的,汽车“轻改”后担心上路被交警处罚,哪些是不能触碰的“红杠杠”,汽车加装行李架后,总被交警拦下,类似改装,是否一定需要备案,是我们今天…

不好意思,爱因斯坦这次,又对了!

▲ 点击查看在科学界中,有一个非常著名的概念,叫做后设认知。官方解释是:人们是如何对自己的思维模式进行反思。打个简单的比方:你学习或者自己孩子学习的时候,会不会经常出现一道数学题反复做错的情况,明明…

开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式

原文:【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍 2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算 3.开源.NET基础数学计算组件Ma…

元胞自动机模型_【ABM仿真模拟】第三章 元胞自动机 B

是新朋友吗?记得先点蓝字关注我哦~第三章 元胞自动机 B2020/01/233.3投票模型(Voting) 课程导读无论是国内国外,投票结果的预测都异常受到关注。在众多唐斯模型、中间选民模型 、以及Sznajd模型中,投票模型作为典型的元胞自动机&a…

喜报!985大学首次登上Nature封面,这所学校可太不容易了!

全世界只有3.14 % 的人关注了爆炸吧知识建校64年来,第一次登上期刊封面又一所985院校出息了!伦敦时间6月4号,《Nature》刊发了电子科技大学邓旭教授团队的最新研究成果,并被选为当期封面。《设计坚固的超疏水表面》《Nature》作为…

getbean方法找不到bean_iphone手机静音找不到怎么办 iphone静音找不到解决方法【图文】...

一个网友给小编留言,询问:“我的iphone调静音了现在找不到,有什么工具能找到”这一个问题,因此,在今天的iPhone使用教程,小编就给大家讲解一下具体的解决方法,那么,iphone手机静音找…

成长 | 《大厂晋升指南》学习总结(上)

【学习总结】| Edison Zhou温馨提示:文中的贴图均来自极客时间《大厂晋升指南》课程。0写在开头今年加入了一家产业互联网平台企业,公司刚好也开始借鉴阿里的职级体系。对于从来没有在互联网企业呆过的我,对于职级体系还比较陌生,…

String,StringBuffer与StringBuilder的区别

2019独角兽企业重金招聘Python工程师标准>>> String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在…

68张机械原理动图,够你看一晚上了!

全世界只有3.14 % 的人关注了爆炸吧知识机械动态图有的可以洞察工作原理,有的可以洞察结构,有的可以表达工作过程,不学机械的也能看得懂!今天的68幅动态图总有一些你没有见过,相当棒!一、制造篇一张图告诉你…

频谱分析幅值单位_案例分享丨某水泥厂入窑斗提减速机不对中故障分析及处理...

斗式提升机是利用均匀固接于无端奉引构件上的一系列料斗,竖向提升物料的连续输送机械。分为环链、板链和皮带三种。今天因大师将给大家分享一个水泥厂的入窑斗提减速机不对中故障的诊断案例。1 设备概况设备基本信息:设备位置:1#产线入窑斗提&#xff08…

中国高校鄙视链指南

全世界只有3.14 % 的人关注了爆炸吧知识某一天,中国各大高校齐聚一堂,开了一场“拒绝高校鄙视链座谈会”,誓要消除高校之间的不平等,不让莘莘学子因为母校问题而被人低看一眼,遗憾终生。首先主持人介绍清华北大发言&am…

.NET 6 ThreadPool 实现概述

前言在即将发布的 .NET 6 runtime 中,默认的线程池实现从 C 代码改为了 C#,更方便我们学习线程池的设计了。https://github.com/dotnet/runtime/tree/release/6.0/src/libraries/System.Threading.ThreadPool新的线程池实现位于 PortableThreadPool 中&a…

嵌入式linux配置qt,基于qt的嵌入式Linux开发环境搭建

摘要:本文主要介绍在PC机上搭建基于QT的嵌入式开发环境,其中很多源文件都是开发板自带,需要相应资料的可以评论留下邮箱地址。版本:交叉编译工具链:GCC 4.7.3 【gcc-linaro-arm-linux-gnueabihf-4.7-2012.12-20121214…

漫水填充及Photoshop中魔术棒选择工具的实现

今天写程序中有一个地方用到了漫水填充(FloodFill)。所谓漫水填充,简单来说,如下图中左图,白布上有一块红色的斑点,在这个红色的斑点上点一下,就自动选中了和该点相连的红色的区域,接…

代理管家app_亲亲小保社保管家app2021下载_亲亲小保社保管家app最新版下载

亲亲小保社保管家是一款便捷社保服务软件,为用户提供全面便捷的社保公积金服务,可以解决生活中的各种居住,社会保障等,感兴趣的朋友快来下载亲亲小保社保管家吧。亲亲小保社保管家app特色1.、社保服务、社保代理、社保托管、工资代…

上大学后男生的两种变化

1 一只处女座的喵。。。2 螃蟹怎么都没想到自己有一天会变成糖葫芦3 还以为厨师被劫持了4 未来感十足的红绿灯概念设计……5 外国留学生的眼中中文6 上大学后男生的两种变化,可太真实了7 你这样欺负人我要报警哦8 一年级的题你点的每个赞,我都认真当成了…

ADO.NET笔记——基本概念

ADO.NET中的主要对象: Connection:连接对象。用于建立从应用程序到数据库服务器指定数据库的连接通道Command:命令对象。用于执行增删查改等数据库语句命令DataReader:数据阅读器对象。用于从数据库逐行返回数据DataAdapter&#…