LXC、LXD、Docker的区别与联系(by quqi99)
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
( http://blog.csdn.net/quqi99 )
容器
- namespace技术用来进行做进程间的隔离,linux namespace包括:mount namespace, uts namespace, ipc namespace, pid namespace, network namespace, user namespace六种,用于将mount点、UTS(hostname, domain name)、IPC资源、进程、网络、用户等六种资源做到进程级别的隔离。容器作为一个普通的进程,使用namespace技术作隔离。
- pivot_root根文件系统切换。mount –bind /etc /tmp/test/etc方式允许从任何其他位置访问任何文件或目录,但是其他用户仍然能看到这些mount点,而mount namespace可以做到mount点在各个进程之间隔离。尽管如此,目前没有对文件/目录做进程间隔离的namespace,所以有必要制作根文件系统再采用pivot_root命令在容器内替换为这个根文件系统(注:chroot只是在指定的根文件系统下运行命令)。
- cgroups技术用来做资源限制,这些资源包括CPU、内存、存储、网络等。
- AUFS文件系统采用CoW写时复制技术将多个文件系统联合到一个挂载点,这样可以为容器实现一个只读的base镜像加一个可写的镜像,从而缩小镜像的体积。
- 可以基于上述技术实现容器
LXC
LXC基本上也是使用上述的思想实现的一个用于管理容器的命令行工具(参考:https://stgraber.org/2013/12/20/lxc-1-0-blog-post-series/):
- 它允许嵌套
- 安全方面:采用seccomp来隔离潜在危险的系统调用;采用AppArmor来对mount, socket, ptrace和文件访问提供额外的限制,特别是限制跨容器通信;采用Capabilities来阻止容器加载内核模块,修改主机系统时间等等;采用CGroups限制资源使用,防止针对主机的DoS攻击等。见:https://stgraber.org/2014/01/01/lxc-1-0-security-features/
- 存储后端也可以是btrfs, lvm, overlayfs, zfs等,见:https://stgraber.org/2013/12/27/lxc-1-0-container-storage/
- 提供了基于C语言的API
LXD
上面的LXC有一些问题(参见LXD 2.0系统文章:http://os.51cto.com/art/201607/515087.htm):
- LXC只是单机的命令行工具,没有daemon进程,所以它无法提供REST API,也无法有效支持跨主机之间的容器迁移。
- LXC的命令也太底层,普通用户无法理解
- LXD作为一个daemon进程弥补了上述问题,让LXC更易用。
Docker
LXD侧重于在容器里运行系统容器(即在容器里运行完整的操作系统),所以它将LXC里的一些侧重于安全的技术也都包装后重新暴露出来了。但是Docker侧重于在容器里运行普通应用,更加重视管理应用这些PaaS的功能。
LXC、LXD、Docker的区别与联系(by quqi99)的更多相关文章
- Python lib库docker-py和docker的区别
1)两者的安装方式 pip install docker A Python library for the Docker Engine API pip install docker-py A Pyth ...
- LXC vs Docker
https://www.sumologic.com/blog/code/lxc-lxd-explaining-linux-containers/ see also: https://linuxcont ...
- docker和kubernetes docker的区别
之前公司的测试环境,刚开始自己搭建虚拟机,然后安装redis,nginx,mq,mysql,tomcat,jdk,marven,还有jekins.前面些还算好点,jekins还是比较麻烦的.然后搭完以 ...
- docker ,docker与虚拟机的区别
什么是Docker: 1.Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 L ...
- docker入门、LXC、windows container 和 Hyper知识基础、实用情况
虚拟机与容器 很明显可以看出两者在操作系统级别上的隔离和进程上的隔离的区别,VM因为隔离级别更高明显更重. linux容器主要技术特点: 文件系统隔离:每个容器都有自己的root文件系统 进程隔离:每 ...
- docker-每天5分钟玩转Docker容器技术
安装 https://www.cnblogs.com/qinxu/p/10032176.html 安装教程,目前只能安装到18版本的,安装完后执行下面命令更新到版本19 yum install doc ...
- 不止Docker:8款容器管理开源方案
Docker诞生于2013年,并普及了容器的概念,以至于大多数人仍然将容器的概念等同于"Docker容器". 作为第一个吃螃蟹的人,Docker设置了新加入者必须遵守的标准.例如, ...
- Docker如何为企业产生价值?
一个 IT 系统大致可以分为: 应用程序 运行时平台(bin/framework/lib) 操作系统 硬件(基础设施) 开发人员的主要工作是应用程序的编码.构建.测试和发布,涉及应用程序和运行时平台这 ...
- Docker是什么
Docker是什么 相信我们很多人都使用多VM(Virtual Machine),也就是虚拟机,简单的来说Docker就是类是于VM的容器,但Docker要轻量得多,VM(Virtual Machin ...
随机推荐
- 20145313张雪纯 《Java程序设计》第4周学习总结
20145313张雪纯 <Java程序设计>第4周学习总结 教材学习内容总结 6.1何谓继承 程序代码重复时,可以把相同的程序代码提升为父类.继承除了可避免类之间重复的行为定义以外,还有i ...
- 20145335郝昊《java程序设计》第4周学习总结
20145335郝昊 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 何谓继承: 概念: 面向对象中,为避免多个类间重复定义共同行为.(简单说就是将相同的程序代码提升为父类. ...
- hdu 2896:病毒侵袭
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- Numpy学习2
载入数据和保存数据 In [34]: arr = np.loadtxt("/home/hadoop/wujiadong/np.txt") In [35]: np.save(&quo ...
- ng2 quickstart-primeng
1.导入quickstart-angular项目 2.安装primeng npm install primeng 3.安装@angular/animations npm install @angula ...
- springMVC入门案例
1.配置文件的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xs ...
- 那些年java MD5加密字符编码的坑
相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码.浏览器的字符编码等和对方不一致,所以就需要转码统一字符. 以下是笔者转码过 ...
- RabbitMQ入门(6)——远程过程调用(RPC)
在RabbitMQ入门(2)--工作队列中,我们学习了如何使用工作队列处理在多个工作者之间分配耗时任务.如果我们需要运行远程主机上的某个方法并等待结果怎么办呢?这种模式就是常说的远程过程调用(Remo ...
- C#:手把手教你用C#打包应用程序(安装程序卸载程序)
摘要:本文介绍在C#中手把手教你用C#打包应用程序(安装程序卸载程序) 1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点 ...
- .net的根目录区别
很久没搞.net了,时间一场,全忘记了,倒,,, “~/” 是应用程序根目录“/” 也是表示根目录 “./” 是当前目录“../”表示当前目录的上一级目录