LXC

LXC是什么

LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。

在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括行程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要引导任何虚拟机。

LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件Docker被用来管理LXC的环境。

LXC解决什么问题
通过上面的介绍,我们知道容器(6个名称空间)和cgroups组合即可实现完整并且保证隔离的容器环境。但是控制名称空间和cgroups都是系统调用,又有多少人能掌握呢? 于是LXC出现了,LXC就是让用户可以轻松地创建和管理系统或应用程序容器。
LXC如何工作

LXC容器通常被认为是在chroot和传统虚拟化之间的。LXC的目标是创建一个尽可能接近标准的linux安装环境,但不需要单独的内核。换而言之LXC就像是传统虚拟化一样提供一个VM只是和寄宿系统公用同一个内核(与docker不一样)

LXC工作模式是这样的,使用lxc-create创建一个容器(名称空间),然后通过模板(早期shell脚本,目前yaml脚本),执行安装过程。这个模板,会自动实现安装过程,这个安装就是指向了你想创建的容器(名称空间)的系统发行版的仓库,利用仓库中的程序包下载至本地来完成安装过程。于是这个容器(名称空间)就像虚拟机一样使用。

Dcoker

Docker是什么


Docker是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

Docker解决什么问题

通过上面的描述我们知道了LXC被用来管理容器,但是使用LXC来管理容器将会面临下列问题:

  1. 要想使用LXC管理容器,要学习很对LXC工具。LXC命令列表
  2. 必要时要定制模板
  3. 每一个名称空间都是安装生成的,在该名称空间中运行的进程会生成一些文件(数据库之类的),当该宿主故障时,如何迁移到其他宿主机上
  4. 批量创建较困难

    总结起来就是通过LXC管理容器比起传统虚拟化的虚拟机的使用复杂度没有多大降低,更何况隔离性也没有虚拟机那么好。当然了好处在于每个容器中的进行都可以直接使用宿主机的性能,中间没有额外开销(节约资源)。LXC在分发和大规模使用上没有很好的方法。于是后来就出现了Docker,早期的Docker可以看作为是LXC的增强版(主要解决分发和大规模使用)。

Docker本身不是容器,Docker只是容器的易用工具。容器是Linux内核的技术,Docker只是简化容器这种技术的使用。

Docker如何工作


如上所述LXC面临大规模使用和在其他的主机上复刻容器(分发)很难,于是Docker就在这方面着手解决。所以早期的Docker就是LXC的二次封装。功能上是通过LXC作为容器管理引擎,但是创建容器时,不在是用模板现场安装生成,而是事先通过一种叫做镜像的技术。把一个操作系统的用户空间用到了所有组件编排好,编排好以后整体打包成一个文件。这个文件就叫做镜像文件(Image)。使用Docker创建容器时,Docker不会激活LXC的模板创建安装。而是连接到镜像仓库,下载一个创建容器所需要的镜像。 Docker极大的简化了容器的使用,比如想要运行一个nginx 直接docker run nginx 就行了。

每个容器本身可以运行一个多一组进程,Docker为了使容器的使用更加易于管理,采用在一个Docker容器中之运行一个进程。这样会带来一下好处和坏处。

好处:

  1. 每个容器只运行一个进程,多个进程走容器间通信(更加隔离性,更容器分发)

坏处:

  1. 所需要的存储空间增加了
  2. 调试容器中的进程比较困难

开发人员开发的好的程序只需要打包到一个Docker镜像中,便可以到处运行在拥有在Docker的机器上。一些特殊进程类似数据库这种,需要采用共享存储才可以更好的解决分发问题。通过将应用打包为镜像这种机制,可以很好的解决分发的问题。 在大规模使用场景上也是很简单的,在每个机器上只需要有一份镜像文件便可以启动N个示例。(具体参考Docker镜像,分层部署-联合挂载这一特性)

有了Docker的镜像机制后就可以很好的解决分发和大规模使用了。 当然想好用好容器还是要有容器编排工具的。

Docker产生背景以及历史

众所周知,Linux在早已存在LXC(Linux Container)的概念。LXC即系统默认利用namespace和cgroup实现的轻量级虚拟化机。LXC利用namespace实现类似于虚拟机的分隔,利用cgroup实现资源分配。现在流行的容器引擎有docker和rocket,其中出名的则为docker。docker公司发展是有dotCloud公司内部项目演化而来。

可以理解,docker就是一款容器引擎,利用其相关的工具实现容器、镜像的管理和应用。

由上图可见,容器生态十分丰富,从最底层的物理硬件,到虚拟化的云平台,到操作系统,到容器引擎,到编排服务工具以及开发流等。完整的容器生态将给整个云生态带来各个层面的改变,更加快捷、高效、省心的运维等。

虚拟机和容器的区别
容器是一种轻量级的虚拟化技术,那么与传统虚拟机的区别呢?

由上图可见,左图虚拟机的Guest OS层和Hypervisor层在docker中被Docker Engine层所替代。虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。
虚拟机实现资源隔离的方法是利用独立的OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的。例如,为了虚拟CPU,Hypervisor会为每个虚拟的CPU创建一个数据结构,模拟CPU的全部寄存器的值,在适当的时候跟踪并修改这些值。需要指出的是在大多数情况下,虚拟机软件代码是直接跑在硬件上的,而不需要Hypervisor介入。只有在一些权限高的请求下,Guest OS需要运行内核态修改CPU的寄存器数据,Hypervisor会介入,修改并维护虚拟的CPU状态。

LXC是什么、什么是docker、docker产生的背景相关推荐

  1. 什么是Docker?Docker安装及镜像、容器的基本命令实验+理论!!!

    文章目录 一.Docker简介 1.什么Docker? 2.Docker使用的机制? 3.Docker的三要素? 3.1 镜像 3.2 容器 3.3 仓库 3.3.1 public(公有仓库) 3.3 ...

  2. Docker | Docker技术基础梳理(五) - Docker网络管理

    Docker | Docker技术基础梳理(五) - Docker网络管理 链接: 原文链接 原文链接: https://gitbook.cn/books/5b8f3c471966b44b00d265 ...

  3. [转帖]Docker里运行Docker docker in docker(dind)

    Docker里运行Docker docker in docker(dind) http://www.wantchalk.com/c/devops/docker/2017/05/24/docker-in ...

  4. docker mysql 操作_[Docker] Docker 快速搭建本地MySQL开发环境

    [Docker] Docker 快速搭建本地MySQL开发环境 关于 Docker 的安装使用本文不再赘述,有兴趣的可以通过官网或是浏览我的专栏文章了解.今天着重给大家介绍下如何利用Docker快速搭 ...

  5. Docker : Docker 安装ES

    1.美图 2.概述 3.公共 创建网段 Docker : Docker创建自定义网桥 4.安装es 4.1.拉取镜像 (base) lcc@lcc ~$ docker pull docker.elas ...

  6. Docker : Docker安装Kibana报错 Unable to revive connection: http://localhost:9200 No living connections

    1.美图 2.背景 docker安装es Docker : Docker安装Kibana # 创建网络 base) lcc@lcc es$ docker network create --subnet ...

  7. Docker - Docker Container及Container命令详解

    Docker - Docker Container及Container命令详解 什么是Docker容器(Docker Container) 上一篇博客介绍了Docker镜像(Docker Image) ...

  8. Docker - Docker Volume及Volume命令详解

    Docker - Docker Volume及Volume命令详解 什么是数据卷(Volume) Docker镜像被存储在一系列的只读层中.当我们创建一个容器时,Docker会读取镜像(只读),并在其 ...

  9. 第133天学习打卡(Docker 初识Docker Docker的基本组成 安装docker 阿里云镜像加速 Docker常用命令)

    Docker学习 Docker概述 官方地址:Empowering App Development for Developers | Docker Docker的思想来自于集装箱! 隔离:Docker ...

  10. Docker——Docker 镜像原理

    Docker镜像原理 Docker镜像 镜像是什么? Docker镜像加载原理 分层理解 Commit镜像 Docker镜像(Images)总结 Docker镜像 镜像是什么? 镜像是一种轻量级.可执 ...

最新文章

  1. 数据库的概念以及MYSQL的安装和卸载
  2. 【Pytorch】expand()用法==》扩展某个维度
  3. Java 常用类库 之 比较接口 Comparator
  4. lenna的真实面目
  5. 图:出场顺序号码随机抽取及公开展示,并行随机抽取多个题目号码及公开展示-软件原型设计
  6. linux 运行ctl文件_[命令] Linux 命令 systemctl(程序单元启动和管理)
  7. 二阶系统响应指标图_一阶和二阶系统的动态特性参数
  8. Word公式编辑大括号内公式对齐方法
  9. 手机版服务器最新的,我的世界手机版服务器ip地址大全(持续更新)
  10. vue 电视看板_基于Vue的拖放看板
  11. 2022茶艺师(初级)考试试题模拟考试平台操作
  12. Openjudge:数字统计
  13. BOSS创投社群:暴利项目创业,他人笑我太疯癫,我笑他人看不穿!
  14. 安卓手机如何让你的微信减肥不卡顿
  15. 如何给电脑安装双系统
  16. 在Google地图上找到经度和纬度的方法
  17. 论文阅读——Multi-Task Learning Framework for Extracting Emoton Cause Span and Entailment in Conversations
  18. 38条搞笑WOW下线理由。。。 达人火速添加啊
  19. UE使用(UltraEdit)
  20. JSP详细篇——Java Web的数据库操作

热门文章

  1. sig2 matlab,MATLAB用lssvm分类时参数gam和sig2交叉优化问题
  2. 18650锂电池和常规锂电池有什么区别
  3. xunsearch快速教程,支持下载本地
  4. EDA-什么是综合?什么是适配?
  5. Git将一个分支完全覆盖另一个分支的操作方法
  6. 如何使用开源合成器Natron入门
  7. android下存储设备的使用
  8. Win10下安装elasticsearch6.5.0
  9. 好雨知时节 不甚欢喜
  10. 使用Sentinel Dashboard监控项目流量