当前位置: 首页 > Linux

大白话帮你理解Docker

时间:2023-04-06 11:55:27 Linux

从Logo说起进入正题之前,先来欣赏一下DockerLogo。一些审美感很强的同学已经看出来了。这是一条咸鱼。你可以看到“原型”来体验官方团队对Logo的解读:“Logo是一只背着一堆集装箱的鲸鱼,它正在运送给你的路上。”Docker直译过来就是码头工人,但对Docker的第一印象就是容器。容器技术的英文翻译是LinuxContainer。Container的直译有两个意思:容器和容器。结合上图和LOGO来理解这句话),因为涉及到学术交流和中国本土文化,容器技术读起来会很陌生,所以我们都称之为容器技术。为什么是“容器技术”?我们都知道在码头里有一个集装箱是用来装货物的,它是一个按照规格标准化的钢箱。集装箱的特点是“格式统一,可以叠放,集装箱之间互不影响”。所以,IT界借用了这个概念,大家想知道是不是大家“只需要关注程序本身”就可以了?换句话说,我部署一个服务并运行之后,我想把它移植到另一个地方,“不需要再安装另一个操作系统和依赖环境”。这就像在集装箱中运输。我把一辆兰博基尼跑车(比如开发好的应用APP)装进一个集装箱,可以很方便的从上海码头(CentOS7.2环境)运到纽约码头(Ubuntu14.04环境)由货轮。而且在运输过程中,我的兰博基尼(APP)没有任何损坏(文件没有丢失),在另一个码头卸货后,它仍然可以完美和风骚地比赛(正常启动)。请结合下图理解并进入正题?定义:Docker是一个开源的应用容器引擎,开发者可以将自己的应用和依赖打包到一个可移植的容器中,发布到流行的Linux机器上,实现虚拟化?在进一步了解Docker之前,我准备了两个关键词:虚拟化技术容器技术虚拟化技术?定义:VirtualMachine(也称VM)虚拟化是指通过虚拟化技术将一台计算机虚拟成多台逻辑计算机。在一台计算机上同时运行多台逻辑计算机,每台逻辑计算机可以运行不同的操作系统,应用程序[1]可以在独立的空间运行,互不影响,从而显着提高计算机的工作效率?通俗地说,虚拟化是为某些组件(例如虚拟应用程序、服务器、存储和网络)创建基于软件(或虚拟)表示的过程。基于hypervisor(虚拟机管理系统)的虚拟化方法可以在一定程度上最大限度地提供虚拟化管理的灵活性。通过管理程序可以派生、运行和销毁各种操作系统的虚拟机。然而,随着时间的推移,人们发现hypervisor的方法越来越麻烦。为什么?因为对于hypervisor环境来说,每台虚拟机都需要运行一个完整的操作系统和安装在其中的大量应用,如下图所示,但在实际生产应用中,“我们更关注的是我们自己部署的应用》容器技术?定义:英文Container有效地将单个操作系统的资源划分为隔离组,从而更好地平衡隔离组之间相互冲突的资源使用需求?容器技术严格来说并不是虚拟化,没有客户操作系统,内核是共享的。容器可以看作是软件供应链的容器。它可以封装应用程序所需的运行环境、缓存环境、数据库环境等,以最简单的方式支持应用程序。Docker镜像容器仓库的三个核心概念。为了更好地理解,让我先讲一个小故事。同学A想建一栋别墅。他重金聘请高级设计师、高级建造师等高级工人。房子建得如火如荼,历时两个月。半年后,小A同学因工作调动需要搬到另一个城市,不得不花大价钱在另一个城市再建一栋别墅。小A有一个朋友小B,跟小A是一样的场景,只是小B认识而已。一个魔法师,这个魔法师施法(建镜像),直接复制了一份小B的别墅(镜像),放到小B的背包(仓库)里,小B去别的城市找。一块空地(容器)直接把书包里的房子拿出来,拿出来的房子可以变得和小B在原城里的房子一模一样。听完故事,我们再了解一下docker的两个slogan,更好的理解。“Build,ShipandRun(构建、发送、运行)”“Buildonce,Runanywhere(构建一次,随处运行)”形象形象的表达的话,我们可以将Docker镜像理解为包含应用程序及其相关的一个基本依赖的文件系统(存放我们的程序和数据文件等信息,镜像层可以理解为一个基础镜像,多个镜像层组合可以生成新的镜像;一个镜像也可以作为一个镜像层,成为其他镜像组合的一部分),在启动Docker容器的过程中,用于以只读方式创建容器的运行环境,如下图所示,容器container和image一样,也是好几层的叠加,唯一不同的是所有只读层的最上面一层是可读写层。你可以记住这个简单的公式:container=containerimage+readableandwritablelayer。既然是静态文件系统,既然容器和它一样,镜像和容器都是静态的概念,但是容器是可以运行的。当容器运行时,它会变成一个称为运行状态的系统。如下图所示,容器由静态容器(可读写的静态文件系统)、隔离的进程空间和运行在其中的程序进程组成。我们平时用dockerrun运行的其实是一个正在运行的容器,而dockerstop停止的容器就是静态容器仓库。仓库(Repository)是最容易理解的部分。Node的包管理npm大家都用过。这个概念是一致的。有两种类型的仓库,本地和远程。当我们构建镜像时,镜像会先存放在本地仓库中。当我们需要使用网络进行分发的时候,我们可以push到远程仓库,然后通过网络下载使用官方的npm源下载有时会很慢,这是XX的原因,这时我们需要使用国内的镜像source,那么docker的运行和容器技术的特点一样,一个技术一定是适合的场景和优势。容器技术流行的原因归纳起来主要有以下几个特点:轻量级(只打包必要的lib/bin)、二次部署(毫秒级到秒级之间)、易移植性(“一次构建,随处运行”)elasticityScaling(HighAvailability,CostSaving)总结通过这篇文章,我们对Docker有了一个基本的了解,知道DockerLogo不是咸鱼,容器技术和虚拟技术的区别,Docker的三大核心概念和它们的区别特性但Docker涉及的内容远不止于此。帅编也会在下一章对“Docker在实际工作场景中的应用”进行讲解。我在看,持续关注,我们下期再见。参考[1]应用:https://baike.baidu.com/item/...最近十个超级实用的ES6特性Vue版团队代码规范