前言:

可能很多正在学习的小白都经常听到容器这个词,并且在网上看也都是看的让人一脸懵的专业词语,根本看不懂。那容器到底是什么呢?又有什么特点呢 ?今天我就在这里用最容易理解的方式带大家了解什么是容器,容器又有哪些特点。

容器是什么? 

用我的个人理解可以认为容器就像是一个“竹篮子”,为什么这么说,假如我今天想吃麻婆豆腐,我就要去菜市场买食材,我需要买豆腐,豆瓣酱,肉沫,葱花等等,我才能去做麻婆豆腐,并且你想吃辣一点的呢,那就多买点辣椒加下去,而容器就是这样,把我们想要的东西打包在一起,然后就可以回家做饭了,一个菜篮子我就装了一个菜,都是分配好的了,再比如,我比如我去公司单位吃饭,一进门发现需要自带碗筷,那就尴尬呀,那我点外卖,筷子勺子,甚至还给你另外装了辣椒,超级方便。而我们换个到linux里面去,容器就解决了这个问题,让开发者可以打包他们想要的应用进去,以及依赖包,然后发布到linux或者Windows机器上,是不依赖任何语言的。

胖容器是什么_文件系统

容器的三个特点 

  • 环境依赖问题
  • 应用资源使用问题
  • 快速扩展和弹性伸缩

特点一 

1.环境依赖:像我们刚刚说了麻婆豆腐,只要我们把该配的材料配好,你就算把食材送到非洲,那也是麻婆豆腐,味道不变,只要我们把我们想要的依赖打包进去,发布到到linux或者Windows机器上,是不依赖任何语言的。

特点二

2.应用资源使用问题 :应用资源的使用问题分了三块蛋糕,“namespace”“cgroup”“chroot”

namespace:他翻译过来叫做命名空间,我们只需要看空间这两个字就好,刚刚我们介绍了容器就像一个竹篮子,我一个竹篮子装一个菜,是独立的,而换位思考,我                       们的容器也是独立,那如果说是独立的,那我们就需要有pid,root,mnt,net,uts等等,这就好比我们安卓手机的第二空间一样,可以打电话,跟正常的桌面完全是一样的,再换座思考是不是就是镜像吗

pid namespace:用于隔离进程 ID。
net namespace:隔离网络接口,在虚拟的 net namespace 内用户可以拥有自己独立的 IP、路由、端口等。
mnt namespace:文件系统挂载点隔离。
ipc namespace:信号量,消息队列和共享内存的隔离。
uts namespace:主机名和域名的隔离。

2.1 cgroup:前面讲到了是应用上的资源,而cgroup就是硬件上的资源,在正常的linux或者Windows上常常是我哪个进程要用到的硬件资源最大系统就自动给他多大的资源,别的进程就会非常小,往往会发现内存,cpu,磁盘分配的都是乱七八糟的,一旦哪些进程吃了太多资源,可能其他的进程就挂掉了,这是在企业中是无法接受的。但其实我们如果不安装容器其实也是有cgroup的,只要我们设置好cgroup把资源进行分配好就能大大降低进程挂掉的问题。

2.2 chroot:现在我们已经讲解了配置上的资源问题和硬件上的资源问题,现在还差什么?给个小提示,linux一切皆文件,就是文件系统,chroot是一种用于隔离文件系统的技术,可以用于在容器中创建一个独立的文件系统层次结构。简单来说,chroot将进程在指定目录下打包成一个独立的文件系统,这个目录成为进程的根目录,在这个根目录中的所有文件和子目录对进程来说是相对路径,它们始终指向该文件系统中的相同位置。

特点三

3.快速扩展和弹性伸缩:容器是具备快速拓展和弹性伸缩的能力的,什么意思呢,只要我们后期学会容器之后,我们可以在几分钟之内创建出n个容器,不再是传统的下载,解压,安装,再做配置文件这些乏味的操作并且还很慢,这就大大提高了工作效率,并且也能直接通过一个命令就删除掉容器。

在这里举个例子:马上要到618电商狂欢节了,公司为了准备这次节日,为了避免网页的访问量,以及数据库的并发量不会崩掉,让我去建立多个mysql从节点,再部署多个nginx,我只需要几分钟的时间就能搞定。等618结束后再删除掉即可。