“容器”无疑是近年来IT界的流行语,但在不同的语境下,对于不同的人来说,它有着不同的含义。在这篇文章中,我将从Linux容器、容器镜像、copy-on-write等方面来解释容器的具体含义。Linux容器传统意义上的Linux容器其实就是Linux系统上的普通进程。这些进程组使用资源约束(控制组,即[cgroups])、Linux安全约束(Unix权限、功能、SELinux、AppArmor、seccomp等)和名称空间(PID、网络、安装等)与其他进程组隔离。)来。如果你启动一个Linux系统并使用cat/proc/PID/cgroup查看任何进程,你将看到cgroup中的某个进程。如果你查看/proc/PID/status你会看到它做了什么。如果您查看/proc/self/attr/current,您将获得SELinux标签。如果您查看/proc/PID/ns,您会在那里看到一个命名空间进程列表。因此,如果您将容器定义为具有资源约束、Linux安全约束和名称空间的进程,那么根据该定义,Linux系统上的每个进程都在容器中运行。这就是为什么有人说“Linux就是容器,容器就是Linux”的原因。容器运行时是修改这些资源限制、安全约束和命名空间的程序,可以启动容器。容器镜像Docker引入了容器镜像的概念,它是一个标准的TAR文件,其中包含:Rootfs(容器根文件系统):操作系统上以根目录(/)为根目录的目录,例如:/usr、/var,/home等JSON文件(容器配置):JSON文件会指定如何运行rootfs,例如:容器启动时应该在rootfs中运行什么命令或入口点,应该为容器设置什么环境变量,容器的工作目录是什么等等。Docker基础镜像由一个根文件系统和一个JSON文件组成。您可以通过在基础镜像的根文件系统中安装所需的内容来更新JSON文件,并创建一个新的镜像层。这样,就可以创建一个新的图像。容器镜像的定义最终被开放容器倡议组织(OCI)标准化为OCI镜像规范。用于构建容器镜像的工具称为容器镜像构建器(如Dockerfile)。有时容器引擎也可以完成构建容器镜像的工作。当然也可以使用一些可以构建容器镜像的独立工具。Docker获取这些容器映像(压缩包)并将它们上传到Web服务,您可以从中提取它们。然后Docker会制定一个协议,让你可以顺利拉取这些镜像,这个web服务就叫做容器镜像仓库。容器引擎可以从容器注册表中拉取镜像并将它们重新组合到容器存储中。此外,容器引擎还可以启动容器运行时(如下图所示)。写时复制(COW)容器存储通常是写时复制(COW)分层文件系统。当您从注册表中提取映像时,首先,您从映像中提取rootfs并将其放在磁盘上。如果您的镜像包含多个图层,您需要将下载的每一层的图像文件存储在COW文件系统中的不同图层中。COW文件系统允许每一层单独存储,最大限度地共享分层图像。容器引擎通常支持不同类型的容器存储,如overlay、devicemapper、btrfs、aufs和zfs等。容器运行时容器引擎将容器镜像下载到容器存储后,需要创建容器运行时的配置文件.此配置文件结合了来自调用者/用户的输入以及来自容器映像规范的内容。例如,调用者可能希望对正在运行的容器指定安全更改、添加环境变量或将卷挂载到容器,所有这些都是调用者的输入。容器运行时配置和分解的rootfs也被OCI标准化为OCI运行时规范。最后,容器引擎启动读取运行时规范的容器运行时,修改Linuxcgroup、Linux安全约束和命名空间,并启动容器命令创建PID1(进程ID1)。此时,容器引擎可以将stdin/stdout传递回调用程序并控制容器(例如,停止、启动、附加等)。请注意,许多新的容器运行时正在使用Linux的不同部分来隔离容器。可以先使用KVM分离的方式运行容器(比如mini虚拟机),也可以使用其他的hypervisor策略(比如拦截容器进程中的所有系统调用)。现在我们有了标准的运行时规范,我们可以通过相同的容器引擎启动这些工具。甚至Windows也可以使用OCI运行时规范来启动Windows容器。容器编排引擎容器编排引擎比其他容器工具处于更高的层次。容器编排是一种协调容器在多个不同节点上执行的工具。容器编排引擎可以与容器引擎通信来管理容器,例如启动容器并将它们联网。它还具有监控容器并在负载增加时启动额外容器的能力。Kubernetes是目前使用最广泛的容器编排引擎。被大量中小型企业用户用于开发或生产环境,成为业界公认的容器编排管理标准框架。然而,原生Kubernetes由于其陡峭的学习曲线,对于大多数开发人员来说很难直接上手。Rancher作为一个开源的企业级Kubernetes容器管理平台,凭借其简洁直观的界面风格和操作体验,可以在很大程度上解决这个问题。并且Rancher实现了Kubernetes集群在混合云+本地数据中心的集中部署和管理,可以统一管理位于不同基础设施上的Kubernetes集群。此外,Rancher还将用户的安全放在首位。8月6日Kubernetes发布新补丁版本后,Rancher迅速响应,并在一天后发布了新版Rancher2.2.7,修复了最新的CVE,支持新版Kubernetes。访问RancherGithub主页以获取有关新版本的更多信息:https://github.com/rancher/ra...
