容器快速入门完全指南


戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=png

作者 |  JUSTIN

来源 | RancherLabs


介 绍


容器,以及Docker和Kubernetes之类的容器技术已经日益成为许多开发人员工具包中常见的工具。容器化的核心目标是提供一种更好的方式,以可预测和便于管理的方式在不同的环境中创建、打包以及部署软件。


在本文中,我们将一窥什么是容器,它与其他虚拟化技术有何不同以及它在部署和运维的过程中有哪些优势。如果您只是想迅速了解有关容器的核心概念,您可以直接滑到倒数第二部分【容器专用术语】查看。

什么是容器?


容器是一种操作系统虚拟化技术,用于打包应用程序及其依赖项,并在隔离环境中运行它们。在不同类型的基础架构中,容器以一种标准的方式,提供了轻量级打包和部署应用程序的方法。


容器的这些特性使其对开发和运维人员极具吸引力。因为容器可以在任意支持容器的主机上运行一致,所以开发人员可以直接在本地测试相同的软件,稍后就可以方便地部署到完整的生产环境中。同时,Container Format可以确保应用程序的依赖项被放到镜像中,简化了手动操作的部分和发布流程。因为运行容器的主机和平台是通用的,所以可以标准化管理基于容器系统的基础架构。


容器从容器镜像中创建,其中包含了系统、应用程序和容器环境。容器镜像和创建特定容器模板一样,同一镜像可用于生成任意数量的运行中的容器。这与类和实例在面向对象编程中的工作方式类似:一个单独的类可以用于创建任何数量的实例,一个单独的容器镜像也可以用于创建任何数量的容器。这类比喻也适用于继承方面,因为容器镜像可以作为其他自定义容器镜像的父级。用户可以从外部资源下载预先构建的容器,也可以根据需要构建自定义镜像。

什么是Docker?


虽然Linux容器是一种能够以不同方式实现和管理的通用技术,但Docker是目前为止运行构建和容器最常见的方式。它包含了一系列的工具,可以允许用户创建容器镜像,从外部镜像仓库推送或者拉取镜像,还能在不同的环境中运行和管理容器。可以这么说,容器在Linux上迅速流行主要归功于Docker在2013年发布之后所做的努力。


docker命令行工具扮演了多种角色。它可以充当容器工作负载的流程管理器来运行和管理容器。此外,它还可以通过阅读和执行Dockerfile或者拍摄运行中的容器快照来创建新的容器镜像。这一命令还可以和Docker Hub(一种容器镜像仓库)交互,来拉取新的容器镜像或者推送本地镜像以保存或者发布它们。


虽然在Linux上Docker只提供了众多实现方式中的一种,但它让容器世界更容易进入,并且具备最常用的解决方案。尽管已经为容器开发了开放标准以确保互通性,但大多数与容器相关的平台和工具都将Docker作为测试和发布软件时的主要参照。对于既定环境,Docker可能并不总是最高性能的解决方案,但它可能是最受欢迎的测试选项之一。实际上,对于容器而言,虽然在Linux上有许多其他的替代方案,但大家通常都会首先学习Docker,这并非毫无理由,因为Docker无处不在并且在容器生态系统中对术语、标准以及工具都拥有影响力。


640?wx_fmt=jpeg

容器如何工作?


了解容器的工作原理对于讨论其与虚拟机的区别大有裨益。


虚拟机vs容器


虚拟机,或称VMs,是一种硬件虚拟技术,它可以让您完全虚拟化硬件或计算机资源。一个单独的访客操作系统管理虚拟机与运行在主机系统的OS完全分开。在主机系统上,一个名为hypervisor的软件负责启动、停止和管理虚拟机。由于虚拟机作为完全不同的计算机运行,在正常运行条件下不会影响主机系统或其他虚拟机,因此虚拟机具备极大的隔离性和安全性。然而,它们也存在不足。例如,虚拟化整个计算机需要VM使用大量的资源。此外,由于虚拟机在单独的访客操作系统上运行,因此虚拟机的配置和启动时间可能相当慢。同时,因为虚拟机作为一个独立的机器运行,所以管理员通常需要采用类似基础架构的管理工具和流程来更新和运行各个环境。


总而言之,虚拟机允许您将计算机的资源细分为较小的单个计算机,但最终结果与管理一组物理计算机没有显著差异。计算机规模扩大,每个主机的责任可能变得更加集中,但您使用的工具,策略和流程以及系统的功能可能不会有明显的变化。


与虚拟化整个计算机相比,容器则采用不同的方式——直接虚拟化操作系统。它作为由主机操作系统内核管理的专用进程运行,但具有受限且严格操作的系统进程、资源和环境视图。容器存在于共享系统上,并且像它们在完全控制的计算机上运行一样。


640?wx_fmt=png


与其将容器视为像虚拟机一样的完整计算机,倒不如说更常见的管理容器与应用程序更为相似。例如,虽然您可以将SSH服务器绑定到容器中,但这不是推荐的模式。相反,调试通常通过日志记录界面执行,通过滚动新镜像来应用更新,并且不再强调服务管理以支持管理整个容器。


这些特性意味着容器占据着位于虚拟机的强隔离性和传统流程的本地管理之间的空间。容器提供区域化和以流程为中心的虚拟化,可在限制,灵活性和速度之间实现良好平衡。


Linux cgroups和命名空间


Linux控制组或cgroups是一种内核功能,允许将进程及其资源作为一个单元进行分组、隔离和管理。cgroups和流程一起绑定,并且决定资源的访问权限以及提供管理和监控它们行为的机制。它们遵循分层系统,允许子进程继承其父进程的条件并可能采用进一步的限制。cgroups将进程作为一个组,并将所需的功能与其绑定在一起,并限制它们可以访问的资源。


另一个容器所依赖的内核功能是Linux命名空间。命名空间限制了什么进程可以看到余下的系统。运行在命名空间内部的进程无法获取任何命名空间外运行的进程。由于命名空间定义了与系统其余部分分离的独特上下文,因此命名空间的进程树需要反映该上下文。在命名空间内部,主进程变为PID1(process ID1),传统上为OS的init系统保留PID。在命名空间内构建严格操作的虚拟进程树让在容器内运行的进程表现得像在正常的、不受限制的环境中操作一样。

容器化的优势


上文中我们已经讨论了一些能够使得容器成为可能的技术,那么现在我们来看一看它们最重要的特性有什么。


轻量级虚拟化


与使用虚拟机的硬件虚拟化相比,容器显得更为轻便。首先,容器使用主机系统的内核并在该操作系统中作为分区进程运行,而不是虚拟化所有硬件资源并在该环境中运行完全独立的操作系统。


其次,从主机的角度出发,容器像其他进程一样运行,这意味着它们可以迅速启动和停止并且可以使用受限制的资源。此外,容器不仅可以查看和访问主机的进程空间和资源子集,而且还能够在大多数情况下,可以表现得像一个完全独立的操作系统。


容器镜像本身也可以非常小。最小的镜像能够使依赖于拉取最新镜像的工作流不会出现显著延迟。这是许多容错,自我修复的分布式系统的要求。


环境隔离


通过使用cgroups以及命名空间等Linux内核功能,容器可以与主机环境彼此隔离。这提供了一定程度的功能限制,以防止容器环境互相干扰。


虽然不够强大,不足以被视为完全安全沙箱,但这种隔离确实具有优势。由于主机和每个容器将软件保存在单独的文件系统中,因此更容易避免依赖性和库冲突。网络环境可以分离,因此容器内的应用程序可以绑定到其本机端口,而无需担心主机系统中或其他容器中的软件会产生冲突。然后,管理员可以根据需要选择如何将容器的网络映射到主机网络中。


标准化打包格式和运行时目标


容器最引人注目的其中一个优势是它可以统一和简化打包和部署软件的流程。容器镜像可以让您绑定应用程序和所有的运行时需求到可跨多个基础架构部署的单个单元中。


在容器内部,开发人员可以安装和使用其应用程序所需的任一库,而无需担心干扰主机系统库。当镜像创建时,依赖项是版本锁定的。容器运行时可以充当一个标准、稳定的部署平台,因此开发人员无需了解容器在哪个特定的机器上运行。只要容器运行时可操作且有足够的系统资源可用,容器就会像在开发环境中那样运行。


同样的,从运维的角度来看,容器化使部署环境的需求标准化了。管理员可以专注于维护充当容器平台的通用主机,并分配这些计算机可以访问的资源池,而不是基于应用程序的语言、运行时和依赖项来配置和维护特定的环境。绑定容器中的所有特定应用程序特性会在应用程序的关注点与平台的关注点之间创建自然边界。


可扩展性


容器的既定范式可以让您以一种相对简单的机制来扩展您的应用程序。轻量级镜像、快速的启动时间、创建测试以及部署“黄金镜像”以及标准化的运行时环境这些特性使得构建高度扩展的系统成为可能。


一个可扩展性的系统是高度依赖于应用程序架构和容器镜像本身是如何构建的。与容器范例配合良好的设计将会充分发挥容器格式的优势,以实现速度、可用性和可管理性的良好平衡。面向服务的架构,特别是微服务,在容器化环境中非常流行,因为将应用程序分解为具有集中目的的离散组件使得开发,扩展和更新更加简单。


640?wx_fmt=jpeg



容器专用术语


在我们结束之前,让我们回顾一下我们在本文中介绍的一些关键术语,以及您在继续学习时可能遇到的一些新术语。


  • 容器:在Linux系统中,容器是一个操作系统虚拟化技术,来打包应用程序及它们的依赖项并在独立的环境中运行它们。


  • 容器镜像:容器镜像是静态文件,其定义文件系统以及特定容器配置的行为。它还可以作为创建容器的模板。


  • 容器编排:容器编排用于描述跨多个主机管理容器队列所需的进程和工具。它通常使用容器平台控制扩展、容错、资源分配和调度。


  • 容器运行时:容器运行时是在一台主机上运行和管理容器的组件。其最基本的要求通常是能够从给定的镜像中配置容器,但许多运行时还绑定了其他功能,如进程管理、监控和镜像管理。Docker内在docker命令中包含了一个容器运行时,但还有许多其他可用于不同用例的替代方案。


  • Docker:Docker是第一个成功推广Linux容器概念的技术。其中,Docker的工具生态系统包括docker,一个带有大量容器的容器运行时以及镜像管理特性,docker-compose,一个定义和运行多容器应用程序的系统,以及Docker Hub,容器镜像仓库。


  • Dockerfile:Dockerfile是一个用于描述如何构建一个容器镜像的文本文件。它定义了基本的镜像,在系统内运行的命令以及在容器内运行时启动和管理进程的方式。虽然Dockerfile并非唯一的选项,但它是最常用的定义容器镜像的格式,即使不使用Docker镜像的构建功能。


  • Kata Containers:Kata Container是一种使用模型,工作流和工具来管理轻量级虚拟机的方法,它复制了容器的使用体验。Kata Container寻求获得容器的好处,同时提供更强大的隔离和安全性。


  • Kubernetes:Kubernetes是一个功能强大的容器编排平台,它可以管理容器主机的集群以及运行在上面的工作负载。Kubernetes提供工具和抽象化,以在高可用生产环境中部署、扩展、监控和管理容器。


  • Linux cgroups:Linux cgroups,或称控制组,是绑定了进程的内核功能,并且可以决定它们对资源的访问权限。Linux中的容器是使用cgroups实现的,可以方便管理资源和单独的进程。


  • Linux命名空间:Linux命名空间用于将进程或cgroup的可见性限制为余下系统的一种内核功能。在Linux的容器使用命名空间来帮助隔离工作负载和来自运行在系统上的其他进程的资源。


  • LXC:LXC是Linux容器化的一种形式,它早于Docker和其他许多技术,同时也依赖于许多相同的内核技术。相比于Docker,LXC通常虚拟化整个操作系统而非仅仅运行应用程序的进程,这与虚拟机更为相似。


  • 虚拟机:虚拟机,或VMs,是一种硬件虚拟技术,它模拟为一整台计算机。在虚拟机内安装一个完整的操作系统可用于管理内部组件和访问虚拟机的计算资源。


  • 虚拟化:虚拟化是一个创建、运行以及管理虚拟环境或者计算机资源的过程。虚拟化是一种抽象物理资源的方式,并且常用于以不同目的分割资源池。


总  结


容器并非魔弹,但它们的确具备一些优于在裸机上运行软件或使用其他虚拟化技术的优势。通过提供轻量级、功能性隔离和开发丰富的工具生态系统来帮助管理复杂性,为容器在开发期间和整个运维生命周期中提供了极大的灵活性和可控性。


640?wx_fmt=png

福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 你硬盘里的那些电影都是如何被保存的?

  • 又是GAN!这个AI让周杰伦、罗永浩“变脸”古典画像

  • 抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

  • 17 岁成为 iOS 越狱之父,25 岁造出无人车,黑客传奇!

  • 阿里平头哥“生娃”!最强 RISC-V 处理器玄铁 910 诞生!

  • 孙宇晨深夜发文致歉: “我年轻, 涉世未深”……

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java错误提示框口怎么使用_如何在Swing中显示错误消息对话框?

以下示例展示了如何在基于swing的应用程序中显示错误消息警告。使用以下API -JOptionPane - 创建标准对话框。JOptionPane.showMessageDialog() - 显示消息警告。JOptionPane.ERROR_MESSAGE - 将警报消息标记为错误。示例package com.yiibai.swingdemo;import java.awt.BorderL…

PostgreSQL Oracle 兼容性之 - rownum

摘要: 标签 PostgreSQL , rownum , Oracle 兼容性 , row_number 窗口 , limit , PPAS , EDB 背景 Oracle ROWNUM是一个虚拟列,每输出一行递增1。 点此查看原文:https://yq.aliyun.com/articles/405183?spma2c4e.11153959.teamhomeleft.24.8W…

PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND, spin lock, SLEEP进程)

摘要: 标签 PostgreSQL , 分区表 , bind , spin lock , 性能分析 , sleep 进程 , CPU空转 , cache 背景 实际上我写过很多文档,关于分区表的优化: 《PostgreSQL 商用版本EPAS(阿里云ppas) - 分区表性能优化 (堪比pg_pathman)》 《PostgreSQL …

flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析

场景模拟(请假流程): 员工申请请假 部门领导审批 人事审批 员工销假 本文用次例介绍在工作流中出现的几个对象及其之间的关系,以及在Activiti中各个对象是如何关联的。 在线演示实例:http://aws.kafeitu.me:8080/kft…

看懂云计算、虚拟化和容器,这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君来源 | 鲜枣课堂“云计算”这个词,相信大家都非常熟悉。作为信息科技发展的主流趋势,它频繁地出现在我们的眼前。伴随它一起出现的,还有这些概念名词——OpenStack、Hypervisor、KVM…

一张图读懂阿里巴巴一站式研发协同云——云效

摘要: 程序员、测试员、项目经理,你们有freestyle吗?阿里云云效,一站式企业协同研发云,“需求->开发->测试->发布->运维->运营”端到端的协同服务和研发工具支撑,助力企业快速创新迭代和研发…

flowable实战(十)flowable 启动流程到完成所有任务之间的数据库变化

来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图,很简单的流程,就是两个UserTask: 代码如下: DeploymentBuilder builderrepositoryService.createDeployment(); Deployment deploymentbui…

阿里敏捷教练如何优化优酷需求分析流程?

摘要: 如何帮助优酷迅速融合到阿里研发体系?如何优化优酷的需求分析流程?针对需求信息不明确,开发出来的功能不是产品想要的痛点如何解决? 点此查看原文:http://click.aliyun.com/m/41381/ 导读&#xff1a…

java float 高效加减_java Double 进行加减乘除

Double 工具类package org.fh.util;import java.io.Serializable;import java.math.BigDecimal;import java.math.RoundingMode;/*** double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型* 整型地方法适合于货币…

Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

摘要: 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身&#xff0c…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要: SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

一、ACT_RU_EXECUTION 表(很多初学者迷惑的一张表,以为是流程实例表,其实它叫执行实例表):这个表和act_run_task表,一起控制了用户任务的产生与完成等。 这个表是工作流程的核心表,这个表会体现主干与分支…

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

摘要: MaxCompute(原ODPS)的概念 海量数据处理平台,服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案以及针对大数据的分析建模服务.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节&a…

计算机视觉领域还能耍什么花样?

从移动支付的自动贩卖机到刷脸支付的智能货柜;从亲自到柜台验证到人脸核身远程开卡;从排队买票、排队进门的糟糕旅游体验到提前预约,刷脸入园的智慧旅游;……从计算机视觉应用的产业板块上分析,以视频应用为基础的视频…

MaxCompute MapReduce

摘要: 大数据计算服务(MaxCompute)的功能详解和使用心得 点此查看原文:http://click.aliyun.com/m/41384/ 前言 MapReduce已经有文档,用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。 功能介绍 MapReduce 说起…

Flowable springboot项目自定义中文字体

Flowable springboot项目自定义中文字体 摘要:在flowable框架中,当我们想要集成springboot框架的时候,可能要设置中文字体,flowable6.4之前的版本因为没有可以设置字体的属性,所以我们没法进行中文字体的设置&#xff…

漫画 | Kubernetes带你一帆风顺去远航

戳蓝字“CSDN云计算”关注我们哦!来源 | Google Cloud如果你是一个狂立学习flag却屡屡打脸的懒癌晚期,或者是一个对云计算方面云里雾里,不知所措的好学者,亦或是一位资深行业专家,都欢迎关注【CSDN云计算公众号】&…

Kubernetes与Docker基本概念与常用命令对照

摘要: Docker是众多用户上手入门的基础容器和编排工具,提供了良好的开发者体验。Kubernetes是强大的容器编排平台,功能丰富。它们有很多概念和操作都有类似之处。我们今天会和大家对比基本概念与常用命令,可以方便熟悉Docker的用户…

flowable 设置流程跟踪高亮线的颜色

背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良) 效果…