写给码农和运维的容器(docker)基本指南

随着云和虚拟技术发展,容器成了当下最耀眼的虚拟化明珠。然而什么是容器呢?本文虫虫就来给大家科普一下容器。

概述

实际上Linux容器技术由来已久,Linux老早就支持了容器特性,也有了系统级容器技术LXC和LXD。传统的Linux容器实际上只是Linux系统上的普通进程。这些进程组被使用资源约束(cgroups),安全约束(Unix权限,capabilities,SELinux,AppArmor,seccomp等)和命名空间(PID,网络,mount,等等)隔离出来。

如果启动Linux系统,在其内存空间可以查看这些隔离:

Cgroup:/proc/PID/cgroup

capabilities: /proc/PID/status

SELinux标志: /proc/self/attr/current

命名空间: /proc/PID/ns

因此,如果要将容器定义为具有资源限制,Linux安全性约束和命名空间的进程,根据定义,Linux上的每个进程都在一个容器中。这就是为什么经常说"Linux是容器,容器是Linux"。

容器运行时是修改这些资源约束,安全性和命名空间并启动容器的工具。docker就是最常见的容器运行时。

容器镜像

Docker引入了容器镜像的概念,这是一个标准的TAR包,其中包括:

Rootfs(容器根文件系统):系统上看起来像操作系统的标准根(/)的目录。例如,带有/usr,/var,/home等的目录。

JSON文件(容器配置):用来指定如何运行rootfs。例如,容器启动时在rootfs中运行的命令或入口点;为容器设置的环境变量;容器的工作目录;和一些其他设置。

镜像分层

Docker打包了rootfs和JSON文件来创建基本镜像。这样就可以在rootfs上安装其他内容,创建新的JSON文件,并使用更新的JSON文件来解决原始镜像与新镜像之间的差异。这样就创建一个分层的镜像。

写给码农和运维的容器(docker)基本指南

OCI镜像规范

容器镜像的定义最终由Open Container Initiative(OCI)标准组织标准化为OCI镜像规范。

写给码农和运维的容器(docker)基本指南

构建工具

用于创建容器镜像的工具称为容器镜像构建器。有时容器引擎执行此任务,但可以使用几个可以构建容器镜像的独立工具。比如docker --build,buidah等。

容器注册表

Docker接受了这些容器镜像(tarball)并将它们移动到一个Web服务,从中可以提取它们,开发一个协议来提取它们,并将Web服务称为容器注册表(Registry),比如Docker Hub。

写给码农和运维的容器(docker)基本指南

容器存储

容器存储通常是copy-on-write(COW)分层文件系统。从容器注册表中下载容器镜像时,首先需解压rootfs并将其放在磁盘上。如果有多个构成镜像的图层,则会下载所有图层并将其存储在COW文件系统的不同图层上。COW文件系统允许每个层单独存储,这最大化了分层镜像的共享。容器引擎通常支持多种类型的容器存储,包括overlay,devicemapper,btrfs,aufs和zfs。

在容器引擎将容器镜像下载到容器存储之后,它需要创建容器运行时配置。运行时配置组合来自调用者/用户的输入以及容器镜像规范的内容。例如,调用者可能希望指定对正在运行的容器的安全性的修改,添加其他环境变量或将卷装入容器。

OCI标准组织还将容器运行时配置和发布的rootfs的布局标准化为OCI运行时规范。

容器引擎

容器引擎(Container engines)是可以从容器注册表中提取容器镜像并将它们重新组装到容器存储上的程序。容器引擎也启动容器运行时。

写给码农和运维的容器(docker)基本指南

容器引擎启动一个读取容器运行时规范的容器运行时;修改Linux cgroups,Linux安全性约束和命名空间;并启动容器命令以创建容器的PID 1进程。此时,容器引擎可以将stdin/stdout中继回调用者并控制容器(例如:停止,启动,附加)。

目前正在引入许多新的容器运行时以使用Linux的不同部分来隔离容器。人们现在可以使用KVM分离(比如迷你虚拟机)运行容器,或者他们可以使用其他管理程序策略(例如拦截来自容器中进程的所有系统调用)。由于有了一个标准的运行时规范,这些工具都可以由相同的容器引擎启动。甚至Windows也可以使用OCI运行时规范来启动Windows容器。

容器编排

写给码农和运维的容器(docker)基本指南

更高层次的是容器编排器(比如K8s和Docker Swarm)。容器编排器是用于协调多个不同节点上的容器执行的工具。容器编排器与容器引擎通信以管理容器。编排器告诉容器引擎启动容器并将它们的网络连接在一起。 编排器可以监控容器并在负载增加时启动其他容器。

展开阅读全文

页面更新:2024-04-20

标签:云和   容器   注册表   文件系统   安全性   进程   定义   引擎   文件   目录   标准   指南   工具   系统   资源   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top