一文快速理解容器、docker和Kubernetes

一、容器是什么?

容器本质上是Linux系统上一种特殊的进程。

容器经常会拿来和虚拟机做对比,下图是常见的一张容器和虚拟机的对比图。 

 

可以看到虚拟机在操作系统层面通过硬件虚拟化,模拟出操作系统需要的各种硬件,然后在虚拟的硬件上安装新的操作系统。

容器是基于Linux内核的一些隔离限制的特性去创造一个“边界”,营造一个沙箱环境。

其中:

隔离功能主要是由Linux的Namespace技术实现。Linux提供的Namespace有很多种,比如有:Pid Namespace(进程隔离)、Network Namespace(网络隔离)、Mount Namespace(挂载点隔离)、IPC Namespace(进程间通信隔离)、User Namespace(用户隔离)等等。容器通过设置各种Namespace的参数实现对资源的“隔离”。

限制功能主要由Cgroups技术来实现。

Cgroups主要作用是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络等等。

所以一个运行的容器实际上是通过Namespace对使用的资源做隔离的进程,然后再通过Cgroups对这个进程所能使用的资源量做限制。

常常有人把容器比喻成集装箱,那么Namespace就是这个集装箱的铁皮,然后Cgroups就是对这个铁皮大小的限制。

二、Docker是什么?

容器并不等于Docker,实际上还有其他使用Namespace和Cgroups实现的容器产品,比如CoreOS公司的Rocket/rkt。但是因为Docker太强大,所以目前的现状是大家默认容器就等于Docker了。

下面是一张Docker的命令导图:

从图中可以看出Docker有三个重要的概念:容器(Container)、镜像(Images)、仓库(Registry)。

镜像是静态的,可以通过给镜像添加各种参数,生成并启动一个容器。

仓库是存放镜像的地方。

镜像是Docker的核心。

PS:windows和mac上的安装的docker也是基于虚拟机实现的。

三、镜像是什么?

Docker的强大很重要的一个原因就是Docker的镜像功能。

镜像本质上就是一个压缩包,一个特殊的文件系统。包括操作系统文件和目录以及应用依赖的所有程序、资源、库、配置等。 一般linux发行版的Docker镜像,如:Ubuntu、CentOS、Debian等称作base镜像,base镜像仅包含linux的用户空间。

注意base镜像是不包括kernel的,所以也无法使用镜像对linux kernel进行升级,如果应用对内核有要求,就不建议用容器了,建议用虚拟机。

镜像有一个分层的概念,大致分为两层:容器层和镜像层(实际是三层,忽略init层)

 

镜像层的操作是增量式的,层层叠加,只能读不能写。

镜像的读取是从上往下读

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值