暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通俗易懂谈Docker | Docker概念篇

Cloud云说 2020-10-29
407

知乎来啦


ICT学堂知乎账号上线啦!

复制
华为ICT学堂前往知乎搜索关注

和学堂君一起来知乎交流吧~


提起容器,集装箱是个绕不过去的形容。集装箱的出现让所有的货物都有了规范,让运输商再也不用担心上层商品会压到下层商品。因为在集装箱中无论什么货物,都会被放到各自的集装箱中,而集装箱在整个过程中都是密封的,只有到达最终目的地才会被打开,集装箱可以被高效地装卸、重叠和长途运输。


再来看软件中的容器,它和集装箱在概念上是很相似的。计算机容器开发的一大目的就是隔离。应用程序在运行时相互独立互不干扰,这种隔离实现起来并不是很容易。容器技术只隔离应用程序运行时环境但容器之间可以共享同一个操作系统,这里的运行环境是指程序运行依赖的各种库以及相关配置。


为什么容器会在计算机领域备受欢迎呢?首先因为它的灵活,跟集装箱一样再复杂的货物也可以集装箱化。其次就是它的轻量化,容器可以利用并共享主机的内核,可以即时进行部署更新和升级,以及极强的扩展性和堆叠性。扩展性体现在可以增加并自动分发容器副本,堆叠性可以进行垂直和即时堆叠服务。

docker和集装箱的的特性对比


Docker的标志,整齐规范化的集装箱


那么,Docker是如何成为容器技术的主流的,并应用在哪些方面了呢?Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个容器当中,然后发布流行的linux服务器,也可以实现虚拟化。然而容器是完全使用的沙箱机制,相互之间不会有任何的接口,并且开销极低。Docker的应用性能用在了以下几个方面:


1、简化配置

这也是Docker的初始目的,虚拟机VM的最大好处就是基于你的应用配置能够无缝运行在任何平台上。Docker可以提供类似VM的能力,但是不会有VM那么大的副作用,能将环境和配置放入代码部署,同样的docker配置可以在任何环境当中使用,实际上是将应用环境和底层环境解除了耦合。


2、代码管道化管理

前一个场景对于管理代码的流水线起到了很大的作用,能够对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。因为在这个流程中会有各种不同的环境,每个都可能有微小的区别。Docker提供了一个跨越这些异构环境以一致性的微环境,从开发到部署流畅发布。


3、开发人员的生产化

在开发时,我们会更希望我们的开发环境趋向于生产环境,我们会让每个服务运行在自己的VM中,这样能够模拟生产环境。比如说我们并不想每次连接都需要网络连接,每次重新编译是都需要远程连接上去特别麻烦,然而在Docker,开发环境的机器通常内存比较小,之前使用虚拟机时,我们需要为开发环境机器加内存,而现在docker可以轻易让几十个服务运行起来。


4、应用隔离

当需要在一台机器上运行多个应用时,就需要将原来的一块铁板monolithic的应用切分成为很多的微应用。实现应用之间的解耦,将多个应用部署在Docker中就可以实现这个目的。


5、服务合并

使用Docker时也能够合并多个应用以降低费用。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker能以更加紧密资源提供更有效的服务合并。


6、多租户

Docker能够作为云计算的多租户容器,使用docker能容易为每个租户创建运行多个实例的环境,这不仅简单而且成本更低,得益于其灵活的快速环境。


7、快速部署

Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁其资源,无需担心重新启动带来的开销。典型的数据中心利用率是30%,通过更加积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们会更容易提高数据中心的利用率。


8、分层存储

因为镜像包含操作系统完整的root文件系统,其体积往往是庞大的,因此Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构。


严格来说,镜像并非是像一个ISO那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。


分层存储的特征还使得镜像的复用、定制变得更为容易。

我们再来了解一下Docker中的三个最重要的概念:

Image镜像

这一个镜像就是一个只读模板,比如:一个镜像可以包含一个完整的CentOS系统,里面仅安装apache或用户的其他应用,镜像可以用来创造Docker容器,另外Docekr提供了一个很简单的机制来创建镜像或者更新现有镜像。用户甚至可以从其他人那里下载一个已经做好的镜像。然而这一个镜像就像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码、运行时间、库、环境变量以及配置文件。


有多种可以生产镜像的方法:可以从无到有开始创建镜像;也可以下载并使用别人已经创建好的现成的镜像;还可以在别人创建好的现有的镜像上创建新的镜像。


Container容器

Docker通过容器来运行应用,容器是从镜像创建的运行实例,它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。可以将容器看成要给简易版linux环境和运行其中的应用程序。


容器的实质是进程,但是与直接在宿主机中执行的进程并不同,容器进程运行于属于自己独立的命名空间。因此容器拥有了属于自己的文件系统、网络配置、进程空间、甚至自己的用户ID空间。容器内的进程运行在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。


Repository仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是如果要在其他服务当中使用这个镜像。我们就会需要一个集中的存储、分发镜像的服务——docker registry就是这样的一种服务。仓库是集中存储镜像文件的地方,registry是注册服务器,用来管理仓库的服务器,一个服务器上可以存在多个仓库,而每个仓库有多个镜像,每个镜像上也会有不同的标签。仓库分为两种,共有仓库和私有仓库,最大的公开的仓库是Docker Hub,存放了数量庞大的镜像。


本期我们先介绍Docker概念到此,接下来的文章将阐述这三层概念上的基础概念,以及Docker各个进程之间是如何运行的。


参考文档:《8 Ways to Use Docker in the Real World – Flux7 Blog(https://www.flux7.com/blog/8-ways-to-use-docker-in-the-real-world-flux7-blog/?utm_source=wechat_session&utm_medium=social&utm_oi=1153789951845015552)


文章转载自Cloud云说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论