docker的初步接触

LXC的介绍

概述

LXC(linux容器技术)为linux container 的简写,是一种内核虚拟化技术。
LXC可以提供轻量级的虚拟化,以隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的namespace。容器有效的将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用
需求。与传统的虚拟化相比,它的优势在于:
1:与宿主机使用同一个内核,性能损耗小;
2:不需要指令级模拟
3:不需要即时编译
4:容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制
5:避免了准虚拟化和系统调用替换中的复杂性
6:轻量级隔离,在隔离的同时还提供共享主机,以实现容器与宿主机的资源共享

总结:LXC 是一种轻量级的虚拟化手段,是一种操作系统层面上的资源虚拟化

LXC的实现

LXC在资源管理方面依赖于Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理框架
可以为特定的进程组限定可以使用的资源
LXC在隔离控制方面依赖于Linux内核的namespace特性。

docker 的初步认知

概述

docker是一个基于LXC的开源的应用容器引擎,让开发者可以打包他们的应用及依赖包到一个可移植的容器当中,然后部署到
任何linux机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口(类似与iphone上的app)。它们不依赖
于任何语言框架和包装系统。
docker中一些值得关注的特性
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

cgroup简述

cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文
件的接口,在 /cgroup目录下新建一个文件夹即可新建一个group,在此文件夹
中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。
cgroups可以限制哪些资源:
cpu: 在cgroup中,并不能像硬件虚拟化方案一样能够定义CPU能力,但是能够定义
CPU轮转的优先级,因此具有较高CPU优先级的进程会更可能得到CPU运算。
cpusets:cpusets 定义了有几个CPU可以被这个group使用,或者哪几个CPU可以供这
个group使用。在某些场景下,单CPU绑定可以防止多核间缓存切换,从而提高效
率。
memory: 内存相关的限制。
blkio: block IO相关的统计和限制,byte/operation统计和限制(IOPS等),读写速度限
制等,但是这里主要统计的都是同步IO.
netcls, cpuacct , devices , freezer 等其他可管理项。

docker镜像

Docker镜像是一个只读的模板。举个例子,一个镜像可以包含一个运行在Apache
上的Web应用和其使用的redhat操作系统。
镜像是用来创建容器的。Docker提供了简单的用来建立新的镜像或者升级现有的
镜像,你也可以下载别人已经创建好的镜像。Docker镜像是Docker的构造部分。

docker仓库

Docker仓库用来保存镜像。可以理解为代码控制中的代码仓库。同样的,Docker仓库
也有公有和私有的概念。公有的Docker仓库名字是Docker Hub。Docker Hub提供了庞大
的镜像集合供使用。这些镜像可以是你自己创建的,或者你也可以在别人的镜像基础
上创建。Docker仓库是Docker的分发部分。

docker容器

Docker容器和文件夹很类似。一个Docker容器包含了所有的某个应用运行所需要的环
境。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、
移动和删除。每一个Docker容器都是独立和安全的应用平台。Docker容器是Docker的运
行部分。

感谢阅读,欢迎指正。

-------------本文结束感谢您的阅读-------------