Docker是一个用于基于容器构建应用程序的软件平台,该容器是小型轻量级的执行环境,可共享使用操作系统内核,但彼此隔离运行。 尽管容器作为概念已经存在了一段时间,但Docker是2013年启动的一个开源项目,它帮助推广了该技术,并推动了容器开发和微服务在软件开发中的趋势,这种趋势已被称为“ 云原生”发展 。

[您准备好入侵容器了吗? 了解如何使用Kubernetes入门 。 •到底什么是Kubernetes ? | 通过InfoWorld的云计算新闻通讯了解云计算的最新发展。 ]

什么是容器?

现代软件开发的目标之一是将同一主机或群集上的应用程序彼此隔离,以使它们不会过度干扰彼此的操作或维护。 由于要运行它们所需的软件包,库和其他软件组件,因此这可能很困难。 解决此问题的一种方法是虚拟机,它可以将完全相同的硬件上的应用程序保持分离,并将软件组件之间的冲突和对硬件资源的竞争降到最低。 但是虚拟机体积庞大-每个虚拟机都需要自己的操作系统,因此通常大小为千兆字节-并且难以维护和升级。

相比之下, 容器将应用程序的执行环境彼此隔离,但是共享底层OS内核。 它们通常以兆字节为单位进行度量,使用的资源比VM少得多,并且几乎立即启动。 它们可以更密集在相同的硬件和纺上下集体少得多的努力和开销。 容器提供了一种高效且高度粒度的机制,用于将软件组件组合到现代企业所需的各种应用程序和服务堆栈中,并保持这些软件组件的更新和维护。

码头工人

虚拟化和容器基础架构如何堆叠。

什么是Docker?

Docker是一个开源项目,可以轻松创建容器和基于容器的应用程序。 Docker最初是为Linux构建的,现在也可以在Windows和MacOS上运行。 为了了解Docker的工作原理,让我们看一下用于创建Docker容器化应用程序的一些组件。

Docker文件

每个Docker容器均以Dockerfile开头 。 Dockerfile是用易于理解的语法编写的文本文件,其中包括构建Docker 映像的说明 (稍后会详细介绍)。 Dockerfile指定了将作为容器基础的操作系统,以及其所需的语言,环境变量,文件位置,网络端口和其他组件,当然,还有运行该容器后容器实际上将要做什么。

ITNext的Paige Niedringhaus对Dockerfile 的语法进行了很好的分类 。

Docker镜像

编写Dockerfile后,您将调用Docker build实用程序以基于该Dockerfile创建映像 。 Dockerfile是一组指令,它们告诉build如何制作映像,而Docker映像是可移植文件,其中包含有关容器将运行哪些软件组件以及如何运行的规范。 由于Dockerfile可能会包含有关从在线存储库中获取某些软件包的说明,因此您应注意明确指定正确的版本,否则Dockerfile会根据调用时间而产生不一致的映像。 但是,一旦创建了图像,它就是静态的。 Codefresh展示了如何更详细地构建图像 。

Docker运行

Docker的run实用程序是实际启动容器的命令。 每个容器都是图像的一个实例 。 容器被设计为临时的和临时的,但是可以将其停止和重新启动,从而使容器进入与停止时相同的状态。 此外,同一映像的多个容器实例可以同时运行(只要每个容器具有唯一的名称)。 代码审查对run命令的不同选项进行了run ,以使您了解它的工作方式。

Docker中心

尽管构建容器很容易,但是不要以为您需要从头开始构建每个图像。 Docker Hub是一个用于共享和管理容器的SaaS存储库,您可以在其中找到来自开源项目和软件供应商的官方Docker映像以及来自公众的非官方映像。 您可以下载包含有用代码的容器图像,也可以上传自己的容器图像,公开共享它们,或者将它们设为私有。 如果愿意,还可以创建本地Docker注册表 。 (Docker Hub过去在使用内置后门上传的图像时遇到了问题。)

Docker引擎

Docker Engine是Docker的核心,Docker是创建和运行容器的基础客户端服务器技术。 一般而言,当有人通用地讲Docker而不是在谈论公司或整个项目时,他们指的是Docker Engine。 提供了两种不同版本的Docker Engine : Docker Engine Enterprise和Docker Engine Community 。

Docker社区版

Docker于2017年发布了企业版 ,但其最初的产品更名为Docker Community Edition,仍是开源且免费的,并且在此过程中没有丢失任何功能。 取而代之的是,企业版(每个节点每年花费1,500美元)增加了高级管理功能,包括用于群集和映像管理的控件以及漏洞监视。 BoxBoat博客简要介绍了两个版本之间的差异 。

Docker如何征服容器世界

给定进程可以与其其余操作环境进行某种程度的隔离来运行的想法已经在Unix操作系统(例如BSD和Solaris)中建立了数十年。 原始的Linux容器技术LXC是一种OS级虚拟化方法,用于在单个主机上运行多个隔离的Linux系统。 LXC的两个Linux功能使之成为可能: 命名空间 ,它包装了一组系统资源并将其呈现给进程,以使其看起来像专用于该进程; 和cgroups ,它们控制一组进程的系统资源(例如CPU和内存)的隔离和使用。

容器使应用程序与操作系统脱钩,这意味着用户可以拥有一个干净且最小的Linux操作系统,并在一个或多个隔离的容器中运行其他所有内容。 而且由于操作系统是从容器中抽象出来的,因此您可以在支持容器运行时环境的任何Linux服务器上移动容器。

Docker对LXC进行了几项重大更改,使容器更加便携和灵活使用。 使用Docker容器,您可以比使用虚拟机更快,更轻松地部署,复制,移动和备份工作负载。 Docker为所有能够运行容器的基础架构带来了类似于云的灵活性。 Docker的容器映像工具也是LXC的一项进步,它允许开发人员构建映像库,从多个映像组成应用程序,并在本地或远程基础架构上启动这些容器和应用程序。

Docker Compose,Docker Swarm和Kubernetes

Docker还使协调容器之间的行为变得更加容易,从而通过将容器连接在一起来构建应用程序堆栈。 Docker Compose由Docker创建,以简化开发和测试多容器应用程序的过程。 这是一个命令行工具,让人想起Docker客户端,它采用了一种特殊格式的描述符文件,可以将应用程序从多个容器中组装出来,并在单个主机上协同运行它们。 (查看InfoWorld的Docker Compose教程以了解更多信息。)

这些行为的更高级版本(称为容器编排 )由Docker Swarm和Kubernetes等其他产品提供。 但是Docker提供了基础知识。 尽管Swarm脱离了Docker项目,但Kubernetes已成为事实上的 Docker编排平台。

Docker的优势

Docker容器提供了一种构建企业和行业应用程序的方法,与传统的容器相比,它们更易于组装,维护和移动。  

Docker容器可实现隔离和限制

Docker容器使应用程序不仅彼此隔离,而且与底层系统隔离。 这不仅可以使软件堆栈更整洁,而且可以更轻松地指示给定的容器化应用程序如何使用系统资源(CPU,GPU,内存,I / O,网络等)。 它还可以更轻松地确保数据和代码保持分离。 (请参见下面的“ Docker容器是无状态且不可变的”。)

Docker容器可实现可移植性

Docker容器可在任何支持该容器运行时环境的机器上运行。 应用程序不必与主机操作系统捆绑在一起,因此应用程序环境和基础操作环境都可以保持干净和最小化。

例如,适用于Linux的MySQL容器将在支持容器的大多数Linux系统上运行。 该应用程序的所有依赖项通常都在同一容器中提供。

只要目标系统支持Docker以及可能与之配合使用的任何第三方工具,基于容器的应用程序就可以轻松地从本地系统迁移到云环境,或者从开发人员的笔记本电脑迁移到服务器。 Kubernetes(请参阅下面的“ Docker容器简化编排和扩展”)。

通常,必须为特定平台构建Docker容器映像。 例如,Windows容器将无法在Linux上运行,反之亦然。 以前,解决此限制的一种方法是启动运行所需操作系统实例的虚拟机,然后在虚拟机中运行容器。

但是,Docker团队此后设计了一种更优雅的解决方案,称为manifests ,该解决方案允许将多个操作系统的映像并排打包在同一映像中。 清单仍被认为是实验性的,但它们暗示了容器如何成为跨平台应用程序解决方案以及跨环境应用程序。  

Docker容器可实现组合

大多数业务应用程序由组织成堆栈的几个独立组件组成-Web服务器,数据库,内存中缓存。 容器使将这些部件组成具有易于更换部件的功能单元成为可能。 每个组件由不同的容器提供,并且可以独立于其他组件进行维护,更新,换出和修改。

这实质上是应用程序设计的微服务模型 。 通过将应用程序功能划分为单独的自包含服务,微服务模型提供了解决方案,可减缓传统开发流程和不灵活的整体式应用程序。 轻巧便携的容器使构建和维护基于微服务的应用程序变得更加容易。

Docker容器简化了编排和扩展

因为容器是轻量级的并且几乎没有开销,所以有可能在给定的系统上启动更多的容器。 但是,容器还可以用于在系统集群之间扩展应用程序,以及增加或减少服务以满足需求的高峰或节省资源。

通过第三方项目提供了用于部署,管理和扩展容器的工具的企业级版本。 其中最主要的是Google的Kubernetes ,该系统可自动执行容器的部署和扩展方式,以及容器之间的连接,负载平衡和管理方式。 Kubernetes还提供了创建和重复使用多容器应用程序定义或“ Helm图表”的方法,以便可以按需构建和管理复杂的应用程序堆栈。

Docker还包括其自己的内置编排系统Swarm模式 ,该系统仍用于要求不高的情况。 也就是说,Kubernetes已成为默认选择。 实际上,Kubernetes与Docker企业版捆绑在一起。

Docker警告

容器解决了很多问题,但并不是万能药。 它们的某些缺点是设计使然,而其他缺点是设计的副产品。

Docker容器不是虚拟机

人们在使用容器时最常犯的概念错误是将它们等同于虚拟机。 但是,由于容器和虚拟机使用不同的隔离机制,因此它们具有明显不同的优缺点。

虚拟机在其自己的操作系统实例中运行,因此它们为进程提供了高度隔离。 该操作系统也不必与主机上运行的操作系统相同。 Windows虚拟机可以在Linux虚拟机管理程序上运行,反之亦然。

相反,容器使用主机操作系统资源的受控部分; 许多应用程序以高度管理的方式共享相同的OS内核。 结果,容器化的应用程序没有像虚拟机那样被完全隔离,但是它们为绝大多数工作负载提供了足够的隔离度。

Docker容器不提供裸机速度

From: https://www.infoworld.com/article/3204171/what-is-docker-the-spark-for-the-container-revolution.html

什么是Docker? 集装箱革命的火花相关推荐

  1. 转 下一代云计算模式:Docker正掀起个性化商业革命

    下一代云计算模式:Docker正掀起个性化商业革命 作者: 吴宁川  来源: ITValue  发布时间: 2015-09-20 10:41  阅读: 14052 次  推荐: 26   原文链接   ...

  2. 下一代云计算模式:Docker正掀起个性化商业革命

    http://www.cnblogs.com/cqumonk/p/4847097.html 下一代云计算模式:Docker正掀起个性化商业革命 文/ITValue 记者吴宁川 从 2008 年开始进入 ...

  3. 001/Docker入门(Mooc)

    docker官网:https://www.docker.com/ 1.什么是docker 2.Docker思想     ==> [1].集装箱:保证程序完整(不缺东西,如配置文件等). [2]. ...

  4. docker 入门 —— docker 镜像命令

    docker 镜像命令 文章目录 常用镜像操作命令 常用容器操作命令 1.`docker images` 列出本地主机上的镜像 1.1.参数: 2.`docker search 镜像名字` 搜索镜像 ...

  5. Docker安全性(一)——Docker容器真的安全吗?

    Docker安全性(一)--Docker容器真的安全吗? 本文翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/7/docker-s ...

  6. 基于Docker里的运行的tomcat容器进行部署Java Web项目详解

    引言:在centos-7环境装了docker后,通过docker创建一个tomcat容器,想部署Java web项目,结果就是找不到tomcat 容器的的webapps目录,导致部署不了项目,不过后来 ...

  7. 用docker容器来制作nginx镜像

    实验环境: cent os 7 服务器一台,访问客户机一台 实验步骤: 安装在线yum源 mkdir  /root/dockerRPM yum install --downloadonly  --do ...

  8. 一、认识Docker

    一.认识Docker 1.Docker图标 鲸鱼身处的大海 -- 宿主机系统! 鲸鱼 -- docker 集装箱 -- container :container 是来自于 image 模板! 2.什么 ...

  9. docker web程序本地化_docker化java web应用

    一.简介 Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上.Docker的发展速度和火爆程度着实令人惊叹,一 ...

最新文章

  1. 意想不到,这个神奇的 Bug 让我加班到深夜
  2. 从@property说起(四)深入成员变量
  3. linux 汇编 gdb报错:Invalid register `eip‘(64位系统没有eip只有rip寄存器)
  4. VGG16关于学习率如何影响精度效应
  5. Android 系统性能优化(47)---Traceview
  6. 手机展示海报PSD模板、适用众多设计!
  7. iphone长截图哪个软件好_iPhone上最好的长截图工具!
  8. 汇川H5U PLC通过EtherCAT总线控制SV660N和X3E伺服
  9. WinHttp用法(WinHttp.WinHttpRequest.5.1)
  10. 【JAVA】数据结构——堆的排序及相关面试题
  11. 【Java-GC】集合Collection的clear()和GC垃圾回收测验
  12. c语言中char有无符号,char代表有符号还是无符号?
  13. 【EXLIBRIS】随笔记 002
  14. JavaScript如何查找和访问HTML页面中的HTML元素
  15. 抛砖引玉,扒扒伪基站那些事(转)
  16. 五星好评html编写,五星好评.html
  17. 《大型网站技术架构》——第一章 大型网站架构演化
  18. 企业应该怎样做网络推广?
  19. 我的3D游戏开发书架 1
  20. 云栖科技评论第67期:完全自动驾驶实现遥遥无期?不必多虑!

热门文章

  1. 规划数据中心降低成本,需要了解的几个小技巧
  2. Python对json文件进行排序
  3. Excel行数多,如何快速定位到最后一行空白行?
  4. MATLAB 绘图合集: 双对数刻度图 loglog
  5. JZOJ5219. B
  6. 报错状态码 200 300 400 500
  7. STM32——CAN总线通信
  8. 华北理工大学考研计算机考什么,华北理工大学考研难吗 可以考什么专业
  9. java getdocument_Java Element.getDocument方法代码示例
  10. 支付通道轮询工具:智能支付路由