如何做商业网站推广,龙岩 网站建设,免费app电视剧软件,最准确的汽车报价网戳蓝字“CSDN云计算”关注我们哦#xff01;编译作者#xff1a;风车云马#xff08;微信号#xff1a;zhangyisq#xff09;文︱Serdar Yegulalp本篇文章转自InfoWorld网站在畅聊Docker之前#xff0c;我们先讲讲什么是容器#xff1f; … 戳蓝字“CSDN云计算”关注我们哦 编译作者风车云马微信号zhangyisq文︱Serdar Yegulalp本篇文章转自InfoWorld网站在畅聊Docker之前我们先讲讲什么是容器 现代软件开发的目标之一是应用程序既能运行在同一主机或集群上又能彼此隔离这样它们就不会过度干扰彼此的操作或维护但由于要运行包、库和其他软件组件这样就会变得会比较困难。 解决这个问题的方案之一是用虚拟机它将相同硬件上的应用程序完全隔离并将软件组件之间的冲突和硬件资源之间的竞争降到最低但是虚拟机体积比较庞大每个虚拟机都需要自己的操作系统所以通常是GB大小而且很难维护和升级。 与虚拟机相反容器将应用程序的执行环境彼此隔离但共享底层OS内核。它们通常以兆字节为单位使用的资源比虚拟机少得多而且几乎是立即启动的。可以做到在相同的硬件上更密集地打包而不需要花费太多的精力和开销。 容器提供了一种高效和高粒度的机制将软件组件组合到现代企业所需的各种应用程序和服务堆栈中并保持这些软件组件的更新和维护。 图片来源网络 Docker技术到底是啥Docker是一个开源项目可以轻松创建容器和基于容器的应用程序最初是为Linux构建的现在也可以在Windows和MacOS上运行。 一直以来Docker都可以帮助开发人员快速构建轻量级和可移植的软件容器从而简化应用程序开发、测试和部署等诸多环节。具体来说它是一个用于构建应用程序的软件平台可以提供一种小型和轻量级的执行环境用来共享操作系统内核但在其他方面是独立运行的。 虽然容器概念已经出现不短的时间但2013年推出的开源项目Docker在很大程度上帮助推广了这项技术并推动了软件开发中容器化和微服务的趋势这种趋势后来被称为云原生开发。 要理解Docker的工作原理让我们看一下用于创建Docker容器化应用程序的一些组件。 图片来源网络Dockerfile文件每个Docker容器都从一个Dockerfile开始。Dockerfile是用易于理解的语法编写的文本文件其中包含构建Docker镜像的指令指定了容器的操作系统、编程语言、环境变量、文件位置、网络端口和其他组件当然还指定了容器在运行后要做什么。 Docker镜像编写好Dockerfile之后就可以调用Docker构建工具build来创建一个Dockerfile镜像。 Dockerfile是一组说明如何生成镜像的指令而Docker镜像是一个可移植文件包含容器将运行哪些软件组件以及如何运行的规范因为Dockerfile可能包含关于从在线资源库获取某些软件包的说明所以需要注意指定正确的版本否则Dockerfile可能会根据调用的时间不同生成不一致的镜像。但是一旦创建了一个镜像它就是静态的。 Docker启动Docker的实用程序run是启动容器的命令每个容器都是一个镜像的实例。容器设计为瞬态和临时的但是它们可以停止和重新启动。此外可以同时运行同一镜像的多个容器实例(每个容器具有唯一的名称)。 Docker Hub库虽然构建容器很容易但也不要以为需要从头构建每个镜像。Docker Hub是一个用于共享和管理容器的SaaS存储库可以从中找到来自开源项目和软件供应商的官方Docker镜像甚至普通公众的非官方镜像。甚至可以下载包含有用代码的容器镜像或者上传自己的镜像共享它们也可以将它们设置为私有如果愿意还可以创建一个本地Docker注册表。 Docker 引擎Docker引擎是Docker的核心Docker创建和运行容器采用的是底层CS客户端-服务器技术。一般来说当某人泛泛地说Docker而不是指公司或整个项目时他们指的是Docker引擎。Docker引擎有两个不同的版本Docker Engine Enterprise和Docker Engine Community。 Docker在2017年发布了企业版Enterprise Edition兼容最初的版本仍然是免费开源的。除此之外Enterprise Edition增加了高级管理功能包括集群控制和镜像管理以及漏洞监控每个节点每年的成本为1500美元。 Docker组件、Docker集群和KubernetesDocker还使容器之间的协调变得更容易通过将容器打包来构建应用程序堆栈。Docker组件简化了开发和测试多容器应用程序的过程。它是一个命令行工具类似于Docker客户端它接收一个特殊格式的描述符文件用于从多个容器组装应用程序并在单个主机上协同运行它们。 这些更高级的版本由其他产品提供比如Docker Swarm和Kubernetes。但是Docker提供了基础。Swarm是从Docker项目中发展起来的Kubernetes实际上已经成为Docker编配平台的首选。Docker优势可圈可点Docker容器提供了一种构建企业应用程序和业务流程应用程序的方法这些应用程序比传统应用程序更容易安装、维护和移动。 Docker容器支持隔离Docker容器使应用程序不仅彼此隔离而且与底层系统隔离。这不仅使软件栈更干净而且更容易使容器化应用程序使用系统资源例如CPU、GPU、内存、I/O、网络等它还可以确保数据和代码保持独立。 Docker容器支持可移植性Docker容器在支持容器运行环境的任何机器上运行。应用程序不必绑定到主机操作系统因此可以保持应用程序环境和底层操作环境的整洁和最小化。 例如采用容器的MySQL将在大多数支持容器的Linux系统上运行应用程序的所有依赖项通常都在同一个容器中提供。基于容器的应用程序可以轻易从on-prem系统迁移到云环境中或从开发人员的笔记本电脑移到服务器上只要目标系统支持Docker以及可能与之一起使用的任何第三方工具比如Kubernetes。 通常Docker容器镜像必须为特定的平台构建。例如Windows容器不能在Linux上运行反之亦然以前绕过此限制的一种方法是启动运行所需操作系统实例的虚拟机并在虚拟机中运行容器。 然而Docker团队后来设计了一个更优雅的解决方案称为manifest它允许多个操作系统的镜像并行打包。尽管manifest虽然还处于试验阶段但这暗示了容器可能成为跨平台应用程序解决方案和跨环境应用程序解决方案。 Docker容器支持可组合性大多数业务应用程序由几个独立的组件组成web服务器、数据库和cache缓存。Docker容器可以将这些部件组合成一个容易更换的功能单元。每个部分由不同的容器提供可以独立于其他容器进行维护、更新、交换和修改。 这本质上是应用程序设计的微服务模型。通过将应用程序功能划分为独立的、自包含的服务微服务模型为过程缓慢的传统开发和单一僵化的应用程序提供了一种解决方案轻量级和便携式容器使构建和维护基于微服务的应用程序变得更加容易。 Docker容器简化了编排和扩展由于容器是轻量级的并且开销很小所以可以在给定的系统上启动更多的容器而且容器也可以用于跨系统集群扩展应用程序并将服务向上或向下扩展以满足高峰需求或节约资源。 用于部署、管理和扩展容器的大多数企业级工具版本都是通过第三方项目提供的。其中最主要的是谷歌的Kubernetes这是一个支持容器部署和扩展的自动化系统还支持容器连接、负载平衡和管理。Kubernetes还提供了创建和重用多容器应用程序或“Helm charts”图表的方法这样就可以根据需要构建和管理复杂的应用程序堆栈。 Docker还内置了Swarm编排模式目前该模式应用比较少Kubernetes已成为某种默认选择。事实上Kubernetes与Docker Enterprise Edition捆绑在一起。Docker是如何征服容器世界的几十年来Unix操作系统(如BSD和Solaris)一直存在这样一种思想即给定的进程可以在一定程度上独立于其操作环境运行。最初的Linux容器技术LXC是一种os级别的虚拟化方法用于在一台主机上运行多个隔离的Linux系统。LXC是通过两个Linux特性实现的命名空间namespaces和cgroups控制组controlgroups命名空间封装了一组系统资源使其看起来像是专门用于该进程的cgroups控制组用于管理一组进程的系统资源(如CPU和内存)的隔离和使用。 容器将应用程序与操作系统解耦这意味着用户可以拥有一个干净且最小的Linux操作系统并在一个或多个隔离的容器中运行其他所有东西。由于操作系统是从容器中抽象出来的所以您可以将容器移动到支持容器运行环境的任何Linux服务器上。 Docker在LXC基础上进行了几项重大更改使容器更加便捷和灵活。使用Docker容器比使用虚拟机更快、更容易地部署、复制、移动和备份工作负载。Docker为任何能够运行容器的基础架构带来了云一样的灵活性。Docker的容器镜像工具也是LXC的一个改进它允许开发人员构建镜像库从多个镜像组合应用程序并在本地或远程基础架构上启动这些容器和应用程序。 Docker表现并不万能 容器可以解决很多问题但也不是万能药有一些缺点是由设计本身造成的。 Docker容器不是虚拟机。人们对容器最常见的错误是将它们等同于虚拟机。然而由于容器和虚拟机使用不同的隔离机制它们有明显不同的优点和缺点。 虚拟机为进程提供了高度的隔离因为它们在自己的操作系统实例中运行。该操作系统也不必与主机上运行的操作系统相同。Windows虚拟机可以在Linux管理程序上运行反之亦然。 相反容器使用主机操作系统资源的受控部分许多应用程序以高度管理的方式共享相同的OS内核。因此容器化应用程序不像虚拟机那样完全隔离但是它们为绝大多数工作负载提供了足够的隔离。 Docker容器无法提供裸机速度。容器几乎没有虚拟机的开销但是它们的性能影响仍然是存在的。如果您的工作负载需要裸机速度那么容器可能足够接近—比vm更接近—但是您仍然会看到一些开销。 Docker容器是无状态和不可变的。容器从描述其内容的镜像启动和运行。默认情况下该镜像是不可变的——一旦创建它就不会更改。 因此容器没有持久性。如果启动一个容器实例然后将其终止并重新启动它那么新的容器实例将不会具有与旧容器实例关联的任何有状态信息。 这是容器区别于虚拟机的另一个方式。默认情况下虚拟机具有跨会话的持久性因为它有自己的文件系统。对于容器来说改变这种情况的唯一方法是创建一个新的、修改过的容器镜像。 从积极的方面看容器的无状态性使容器的内容更加一致它还迫使开发人员将应用程序数据与应用程序代码分开。如果希望容器具有任何持久性状态则需要将该状态放置到其他位置。可以是数据库也可以是在引导时连接到容器的独立数据卷。 Docker容器不是微服务。在前面提到过容器如何帮助创建微服务应用程序。这并不意味着将给定的应用程序粘贴到容器中就会自动创建一个微服务。无论微服务是否部署在容器中都必须根据微服务设计模式构建微服务应用程序。 当虚拟机出现时它们使应用程序与所运行的系统解耦成为可能。Docker容器进一步实现了这一想法它不仅比虚拟机更轻量级、更便携、运行速度更快而且还提供了虚拟机无法提供的扩展、组合和管理特性。如何少走弯路利用不同区块链的数据结构实现项目上链 数据架构是区块链的重要组成部分了解数据架构可以让我们对于自身业务是否适合上链做出明智的判断。 9月19日【dfuse小聚区块链数据应用讨论会】将在上海举行dfuse CTO联合创始人、EOS加拿大联合创始人 Alex Bourget慢雾科技合伙人兼安全产品负责人启富KeywolfMYKET联合创始人/EOS Cannon联合创始人Ricky胖哥与你一起深度探索区块链应用搭建以及区块链数据结构的奥秘让你明白到底你的业务该如何上链 长按下方二维码报名???福利扫描添加小编微信备注“姓名公司职位”加入【云计算学习交流群】和志同道合的朋友们共同打卡学习推荐阅读5大必知的图算法附Python代码实现适合小团队作战奖金招聘绿色通道这一届算法大赛关注下顶配 12699 元、没有 5G“浴霸三摄”的 iPhone 到底长什么样备受期待的原子交换将如何对中心化交易所构成威胁谷歌NIPS论文Transformer模型解读只要Attention就够了马云淡出「理想国」