容器相关的理论知识——我的理解

1 容器和虚拟化的区别

讲容器的时候,虚拟化是无法绕开的。

二者主要区别的参照物是操作系统。

操作系统分为用户态和内核态。

内核是一个操作系统的核心,它可以直接对硬件进行操作,因此我们把内核功能运行的逻辑空间成为内核态。其他给用户使用的应用运行在用户态。

我们在市面上可以看到很多不同的Linux发行版,发行版就是内核+应用。不同的发行版本之间的区别就是应用不同,也就是运行在用户态的应用彼此之间是不同的,而内核全部都是来自于linux内核,只是内核版本不同而已。

容器和虚拟化之间的区别就是:所有的容器和宿主机共用同一个内核,容器只使用自己所需要的用户态,虚拟机则需要运行对应版本操作系统所有的内核和用户态。因此我们经常说容器是一个轻量级的虚拟化,它轻量就表现在不需要单独的内核,已经没必要的用户态。

看图:

容器、操作系统和应用的关系

求容器的CPU核数 容器内核_求容器的CPU核数

虚拟机、操作系统和应用的关系

求容器的CPU核数 容器内核_虚拟化_02

2 容器的工作原理

用户要使用计算机运行应用,无论是哪种形态,都需要三种资源:计算、存储和网络,容器也一样。

容器的计算资源(说白了就是CPU和内存)需要使用CRI去调用,CRI可以理解为一个插件,容器引擎通过CRI去调用合适的CPU资源和内存资源。

网络资源通过CNI去调用,存储资源则通过CSI去条用。

3 容器是如何判断其运行的服务终端了

我们讲容器的生命周期和其运行的服务是同步的,服务停止了,容器也就停止了。那容器是如何判断服务停止的呢?

容器在运行服务时,是将该服务运行在前台的,相当于给这个服务配了一个单独的终端,只要终端停了,说明服务也就停止了,那么容器也就终止了。