1. 怎么用通俗易懂的话来解释Docker(容器)技术
官网的介绍是这样的:
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....
其实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。
为啥要用容器?
那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。
那么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。
在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。当年在 Bai 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在 Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。
若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。
此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。
2. 什么是 docker 容器技术
Docker是什么?
简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:
Docker Engine: 一个便携式、轻量级的运行环境和包管理器。(注* 单OS vs 单线程,是不是跟NodeJS特别像?)
Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)
从2013年3月20日,第一个版本的Docker正式发布到 2014年6月Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。
其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。
好的部分
Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性, 以下部分摘自:KVM and Docker LXC Benchmarking with OpenStack
快
运行时的性能可以获取极大提升(经典的案例是提升97%)
管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
敏捷
像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
灵活
将应用和系统“容器化”,不添加额外的操作系统,
轻量
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
便宜
开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
生态系统
正在越来越受欢迎,只需要看一看Google的趋势就知道了,docker or LXC.
还有不计其数的社区和第三方应用。
云支持
不计其数的云服务提供创建和管理Linux容器框架。
3. 容器云技术有什么特点
1.容器云技术在计算形态上面是一种轻量级的虚拟化技术,是进程级的虚拟化形态封装,容器的启动和部署的迅速,可以在应用层面按照资源进行快速的部署和调度的,这样生命周期的变化速度也就很快了。
2.它是可以移植的一种技术,能够降低成本。当前容器云技术的现代形式,主要是体现在应用程序容器化和系统容器化方面。这两种形式的容器都是可以让IT团队从底层的架构中抽象出程度代码的,这样就可以实现跨各种部署环境的可移植性了。
3.容器一般是位于物理服务器以及主机操作系统之上的。它可以通过单个的操作系统安装去运行多个工作环境,因此容器是非常轻的,它们只有几兆的字节,只需要几秒钟就可以启动了。另外,内存,存储和CPU效率的提高,是容器云技术的关键优势。它可以在同一基础架构上面支持更多的容器,这样就可以减少管理方面的开支了。
国内做的比较好的我推荐时速云,他们服务过500+的中大型客户,不仅涵盖容器云 PaaS、DevOps、微服务、ServiceMesh、API 网关等核心云原生产品,还可以为企业提供数据开发、数据治理、数据资产、数据服务等数据能力。感兴趣的可以去了解一下!
4. 如何理解芒福德的 技术即是容器
芒福德在 20世纪 60年代提出 “技术即容器”的观点, 在他看来, 与工具和武器不同, “容器技术”是经常被忽视的一种技术形式。 “对于妇女而言, 柔软的内在器官是她生命的中心, 不管是幼儿还是成人, 她的手和脚的运动能力都要比屈伸和拥抱的能力差。在母系氏族社 会, 新石器时代已经是一个拥有‘容器’工具的显赫时代: 除了沟渠、村庄这些巨大的 ‘容器’ 以外, 这个时代还有石器、陶器、花瓶、广口 瓶、缸、蓄水池、箱柜、谷仓、壳仓、房子等等 这样一些 ‘容器’。但是这一时代所具有的独特性和显着性却被现代那些过分强调机械意义上的科技进步的学者们忽视了。”在他那里, 工具、 武器和机器都是男性文化的符号, “容器”则显示出女性文化符号的特征, 有机体和生物学意义 上的繁殖则是女性文化的代表。
这一理论拓展了一种对技术、文化和城市的生态学视角, 它能让我们联想到, 文字也是一种 “容器”技术, 它不仅能够贮存信息还因为早期保留和记录谷物的功能, 也能够贮存物质。其次 它体现了整体系统论的思想, 在某种意义上, 具 有 “技术合并论”的意味。更重要的是它不是仅 从内部的结构来给机器下定义, 而是从它所产生 的外部影响出发来思考这一问题,开启了媒介环 境的论题。
单 波 王 冰《西方媒介生态理论的发展及其理论价值与问题》
5. Docker这样的容器技术与虚拟化技术的区别是什么
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
在docker的网站上提到了docker的典型场景:
Automating the packaging and deployment of applications
Creation of lightweight, private PAAS environments
Automated testing and continuous integration/deployment
Deploying and scaling web apps, databases and backend services
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为 on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
因为其标准化构建方法(buildfile)和良好的REST API,自动测试和持续集成/部署能够很好的集成进来
因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源
虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。
虚拟化,原本是指资源的抽象化,也就是单一物理资源的多个逻辑表示,或者多个物理资源的单一逻辑表示。具体到服务器虚拟化,就是多个物理资源的单一逻辑表示。
虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显着提高计算机的工作效率。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。
6. Docker容器是什么它比虚拟机强在何处
Docker容器是一个开源的应用容器引擎,可以让开发者用统一的形式打包其自身的应用,然后包装到一个可以移植的容器中,随后发布到任何可以安装Docker引擎的服务器上(比如主流的Linux机器或者是Windows机器),当然也可以实现虚拟化。Docker容器几乎没有性能开销,可以很容易的在机器和数据中心运行,其最大的特色就是不依赖任何系统,框架甚至是语言。
由于容器是进程级的,相比于虚拟机有着很多的优势
一:启动速度快:由于容器里面的应用软件,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以启动容器时,不是启动一整个操作系统,速度就快了很多。
二:资源占用少:相比于虚拟机而言,容器只占用需要的资源,不会去占有无效的资源,而虚拟机则是一个完整的操作系统,不可避免的占用了所有资源。
三:体积小,轻量级:容器只需要包含用到的组件,对比于虚拟机,容器文件要比虚拟机小很多。
四:方便移动:容器技术最重要的就是为不同的主机上运行服务一个轻便,一致的格式。容器的格式更加标准化且方便客户对工作负载的迁移,有效避免单一的平台提供商。
7. 容器与虚拟机的区别
1.容器技术简介
对于容器,它首先是一个相对独立的运行环境,在这一点有点类似于虚拟机,但是不像虚拟机那样彻底。在容器内,应该最小化其对外界的影响,比如不能在容器内把宿主机上的资源全部消耗,这就是资源控制。
2.容器与虚拟机的区别
容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。
1
1
容器与虚拟机拥有着类似的使命:对应用程序及其关联性进行隔离,从而构建起一套能够随处运行的自容纳单元。此外,容器与虚拟机还摆脱了对物理硬件的需求,允许我们更为高效地使用计算资源,从而提升能源效率与成本效益。
虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的操作系统,再搭建一层Runtime,然后供应用程序运行。
对于容器环境来说,不需要安装主机操作系统,直接将容器层(比如LXC或libcontainer)安装在主机操作系统(通常是Linux变种)之上。在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。但是,每个容器化应用都会共享相同的操作系统(单个主机操作系统)。容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。
相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样就会给迁移选择带来限制。
因为容器不像虚拟机那样同样对内核或者虚拟硬件进行打包,所以每套容器都拥有自己的隔离化用户空间,从而使得多套容器能够运行在同一主机系统之上。我们可以看到全部操作系统层级的架构都可实现跨容器共享,惟一需要独立构建的就是二进制文件与库。正因为如此,容器才拥有极为出色的轻量化特性。
对Docker稍有接触的人应该都见过下图,无需更多解释,Docker减少Guest OS这一层级,所以更轻量和更高性能。
docker虚拟机区别
3.深层区别:
docker虚拟机区别
更新:Docker现在已经支持windows平台,所以上面的Windows支持一栏可以忽略。
8. 什么是docker容器技术
docker容器技术指Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs)
9. Linux里面rancber和docker区别是什么
Linux是一套免费使用和自由传播的类UNIX操作系统,一般用于后端服务中,而Docker是一个开源的应用容器引擎,两者是用来进行配合使用,并不是一类,所以两者无法进行对比。
Docker六大特点
1、更高效的利用系统资源
docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。
2、更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。
3、一致的运行环境
开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中发现。而docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。
4、持续支付和部署
对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。(定制应用镜像来实现集成、持续支付、部署。开发人员可以通过dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署)。而且使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5、更轻松的迁移
由于docker确保了执行环境的一致性,使得应用的迁移更加的容易。docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6、更轻松的维护和拓展
docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。