0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

镜像理包含应用程序以及其相关依赖的一个基础文件系统

lhl545545 来源:Linux爱好者 作者:Linux爱好者 2020-06-11 09:43 次阅读

Docker直译过来是码头工人,然而Docker给人的第一感觉是容器,容器技术英译为Linux Container, Container的直译有集装箱,容器两个意思,如果要形象的理解Linux Container的话还是叫集装箱技术比较好(可以结合着上图及LOGO理解这句话),由于这涉及到学术交流,及中国本土文化,念集装箱技术会比较奇怪,所以我们都称之为容器技术

为什么是“集装箱技术”

我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,「在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响」

于是乎,IT领域借鉴了这一理念,大家就在想,有没有可能大家「只需要关注程序本身?」

换句话来说,就是我部署一个服务运行好后,我再想移植到另外一个地方,

「不用再安装一套操作系统和依赖环境。」

这就像集装箱运载一样,我把一辆兰博基尼跑车(好比开发好的应用APP),打包放到一容器集装箱里,它通过货轮可以轻而易举的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。而且运输期间,我的兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另外一个码头卸货后,依然可以完美风骚的赛跑(启动正常)。

进入正题

定义: Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化

进一步认识Docker之前,我准备了两个关键词

虚拟化技术

容器技术

虚拟化技术

定义: Virtual Machine(又名VM) 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序[1]都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率

通俗点来讲就是虚拟化是为一些组件(例如虚拟应用、服务器、存储和网络)创建基于软件的(或虚拟)表现形式的过程。

基于hypervisor(虚拟机管理系统)的虚拟化方式可以最大程度上提供虚拟化管理的灵活性。各种不同操作系统的虚拟机都能通过 hypervisor 来衍生、运行、销毁。

然而,随着时间推移,人们发现hypervisor这种方式麻烦越来越多。为什么?因为对于hypervisor环境来说,每个虚拟机都需要运行一个完整的操作系统以及其中安装好的大量应用程序, 如下图

但实际生产应用时,「我们更关注的是自己部署的应用程序本身」

容器技术

定义: 英文为Container 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求

容器技术严格来说并不是虚拟化,没有客户机操作系统,是共享内核的。容器可以视为软件供应链的集装箱,能够把应用需要的运行环境、缓存环境、数据库环境等等封装起来,以最简洁的方式支持应用运行

Docker三大核心概念

镜像

容器

仓库

为了更好的理解,先讲大家讲个小故事

小A同学想要造一栋别墅,他重金请来了高级设计师,高级建造师,等各种高级工人,热火朝天历时二个月房子建成了,半年后,小A同学由于工作调动需要换到另一个城市,他只好在另一个城市花了重金又打造了一栋别墅

小A有一个朋友小B,跟小A是同样的场景,唯一不同的是,小B认识一个魔法师,这个魔法师施展了法术(构建镜像),将小B的别墅直接复制了一份(镜像),装到了小B的双肩包(仓库)里,小B去到另一个城市找了一片空地(容器)直接将装在书包里的房子拿了出来,拿出来的房子就能变成跟小B在原城市一模一样的房子

听完了故事,咱们再来理解docker的两句口号就更好理解了

「Build, Ship and Run (搭建,发送,运行)」

「Build once,Run anywhere (搭建一次,运行到任何地方)」

镜像如果进行形象的表述,我们可以将 Docker 镜像理解为包含应用程序以及其相关依赖的一个基础文件系统(存储着我们的程序和数据文件等等信息,镜像层可以理解为基本的镜像,可以通过组合多个镜像层生成一个新的镜像;也可以将一个镜像可以作为一个镜像层,成为组合别的镜像的一份子),在 Docker 容器启动的过程中,它以只读的方式被用于创建容器的运行环境,

容器容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层

前面说镜像的时候我们有提到它是一个静态文件系统,那么既然容器跟它一样,所以,镜像跟容器都是一个静态概念,但是,容器是可以run起来的,当容器run起来时,就会成为一个被称作运行态容器的东西,

运行态容器(run container)是由静态容器(可读写的静态文件系统)、一个隔离的进程空间、以及运行于其中的程序进程所组成。我们通常用docker run运行起来的其实就是运行态容器,而使用docker stop停止后的容器,就是静态容器

仓库仓库(Repository)是最易理解的部分,大家都用过Node的包管理Npm,这个概念是一致的,仓库分为两种,本地及远程,当我们build好一个镜像后,这个镜像会先存放到本地仓库,当我们需要利用网络进行分发时,我们可以push到远程仓库,后续通过网络下载使用

官方的npm源下载有时候特别慢,这个是由于XX的原因,然后我们就需要使用国内的镜像源,那么docker 的操作也是一样的

容器技术的特性

一种技术的采用,一定有它适合的场景和优势。容器技术的流行原因,总结下来可能主要归功于以下的这些特性

轻量级(只打包必要的lib/bin)

秒布署(毫秒与秒之间)

易移植(「Build once,Run anywhere」)

弹性伸缩(高可用,节约成本)

总结

通过本文我们对Docker有了一个基本的认识, 知道了Docker Logo并不是一条咸鱼,容器技术与虚拟技术之间的差异,Docker的三大核心概念及其特性

但Docker中涉及的内容远不止于此,帅编也会在下个章节为大家讲解“实际工作场景中的Docker应用”
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206735
  • 服务器
    +关注

    关注

    12

    文章

    8116

    浏览量

    82509
  • 容器技术
    +关注

    关注

    1

    文章

    21

    浏览量

    5553
收藏 人收藏

    评论

    相关推荐

    教你在Ubuntu系统上定制文件系统

    开发板都需要去apt-get安装,这样会大幅增加工作量,很不便于批量化生产。 能不能把软件起打包到镜像呢?这样每次烧写完就不用再去apt-get在线安装了。答案当然是肯定的,这就涉及到文件系统的定制了
    发表于 12-26 16:33

    系统镜像烧录

    系统镜像烧录 启动产品需要两步骤:烧录系统,启动系统 ArmSoM 系列产品的系统
    发表于 12-08 11:11

    服务器数据恢复—ocfs2文件系统被误格式化为Ext4文件系统的数据恢复案例

    由于工作人员的误操作,将Ext4文件系统误装入到存储中Ocfs2文件系统数据卷上,导致原Ocfs2文件系统被格式化为Ext4文件系统。 由于Ext4
    的头像 发表于 12-04 10:49 234次阅读
    服务器数据恢复—ocfs2<b class='flag-5'>文件系统</b>被误格式化为Ext4<b class='flag-5'>文件系统</b>的数据恢复案例

    如何使用dockerfile创建镜像

    Docker是一个开源的平台,用于快速构建、打包、部署应用程序的容器化工具。而Dockerfile是一个文本文件包含了一组可自动化构建Docker镜像的指令。本文将详细介绍
    的头像 发表于 11-23 09:52 415次阅读

    构建docker镜像应该遵循哪些原则

    必要的组件和文件包含镜像中,以减小镜像的大小。可以使用适量、标准的基础镜像,并只安装必要的软件依赖
    的头像 发表于 11-23 09:41 464次阅读

    Ubuntu16.04系统镜像进行热点测试

    ROOT 文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是ROOT 文件系统。 Docker
    发表于 11-22 13:39

    Linux的文件系统特点

    Linux的文件系统特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。 文件系统中也要有索引区,用来方便查找一个文件分成的多
    的头像 发表于 11-09 14:48 486次阅读
    Linux的<b class='flag-5'>文件系统</b>特点

    分布式文件系统的设计原理是什么?

    什么是分布式文件系统?分布式文件系统(DFS)是一种计算机文件系统,使用户能够从多个分布式位置存储和访问数据。它是在分布式环境中的不同计算机之间共享信息的一种方式。通过使用分布式文件系统
    的头像 发表于 10-17 17:35 410次阅读

    移植Linux内核ramfs和ramdisk文件系统

    ramfs 就是将文件系统和内核一起编译,编译出来的镜像就包括 内核本身和文件系统 。 内核打开 ramfs : 在 Initramfs source file(s) 选项中,填入文件系统
    的头像 发表于 10-04 14:41 585次阅读
    移植Linux内核ramfs和ramdisk<b class='flag-5'>文件系统</b>

    谈谈什么是文件系统 文件系统的功能与特点

    文件系统的应用非常广泛,同时种类也是特别的多,并且不同平台也会使用不同性能和特点的文件系统,比如查找效率、数据安全等级等等,如下面windows使用的NTFS:
    发表于 08-30 09:50 1457次阅读
    谈谈什么是<b class='flag-5'>文件系统</b> <b class='flag-5'>文件系统</b>的功能与特点

    适用于Linux的最佳通用文件系统 Linux文件系统的安装

    为您的计算机选择正确的文件系统可能是一个困难的过程。您可能会想知道:为什么文件系统很重要?有没有适用于安装 Linux 的特定文件系统? 事实证明,有两种文件系统在安装 Linux 时
    发表于 08-03 10:22 191次阅读
    适用于Linux的最佳通用<b class='flag-5'>文件系统</b> Linux<b class='flag-5'>文件系统</b>的安装

    FATFS文件系统原版文件下载

    FATFS文件系统原版文件下载
    发表于 06-25 09:02 0次下载

    Linux proc文件系统详解

    上一篇:《文件系统有很多,但这几个最为重要》介绍了procfs(进程文件系统的缩写),包含一个伪文件系统(启动时动态生成的文件系统),用于通
    发表于 06-15 11:42 778次阅读

    使Struts2应用程序更安全:不要包含配置浏览器

    Struts2 插件包含扩展、替换或添加到现有 Struts 框架功能的类和配置。除了 JAR 文件之外,还可以通过将其 JAR 文件添加到应用程序的类路径来安装插件,以满足插件本身可
    的头像 发表于 05-25 15:08 237次阅读

    减少docker镜像大小的方法

    Docker 是一种容器引擎,可以在容器内运行一段代码。Docker 镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。
    的头像 发表于 05-15 11:13 579次阅读
    减少docker<b class='flag-5'>镜像</b>大小的方法