<div class="blogpost-body" id="cnblogs_post_body">
<h1 class="article-title">快速掌握Docker必备基础知识</h1>
<div class="article-content">
<p><code>Docker</code>是时下热门的容器技术,相信作为一名开发人员,你一定听说过或者使用过,很多人会把<code>Docker</code>理解为一个轻量级虚拟机,但其实<code>Docker</code>与虚拟机(<code>VM</code>)是两种不同的计算机虚拟化技术,也有很多人会觉得,有了虚拟机,那为什么还要使用<code>Docker</code>呢?</p>
<p>带着心里的一点点疑问,让我们一起来学习<code>Docker</code>吧。</p>
<h2 class="heading">没有虚拟化技术的原始年代</h2>
<p>我们仔细想想,在没有计算虚拟化技术的“远古”年代,如果我们要部署一个应用程序(<code>Application</code>),一般的步骤是怎么样的?</p>
<p>第一步肯定是先要准备一台物理服务器,然后在物理服务器上安装一个操作系统(<code>Operating System</code>),有了操作系统之后,便在操作系统上安装运行我们的应用程序,这个过程可以用下面的图来表示:</p>
<p> </p>
<img alt="" class="lazyload inited loaded" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-44753589b4c18b94df3528ec869ecf94">
</div>
<div class="article-content">
物理服务器部署应用示意图
<p> </p>
<p>那么,这种方式有什么问题呢?其实,在物理机上部署应用有以下几个缺点:</p>
<ul><li> <p>部署非常慢:因为我们得先准备硬件服务器,接着还要安装操作系统,然后再部署应用程序,而且应用程序还有很多的依赖软件,所以这个过程是比较慢的。</p> </li><li> <p>成本非常高:主要是物理器成本太高,即使是部署一个简单的应用,也需要一台服务器。</p> </li><li> <p>资源浪费:如果应用太简单,也容易浪费硬件资源,比如<code>CPU</code>和内存</p> </li><li> <p>迁移和扩展太慢:如果需要迁移应用,或者扩展应用,都要再准备其他的物理服务器,过程很麻烦,也很慢。</p> </li></ul>
<p>那么有什么办法可以解决这些问题呢?答案便是虚拟化技术。</p>
<h2 class="heading">使用虚拟机部署应用程序的年代</h2>
<h4 class="heading">什么是虚拟化技术</h4>
<p>谈到计算机的虚拟化技术,我们直接想到的便是虚拟机,虚拟机允许我们在一台物理计算机模拟出多台机器,简单地理解,虚拟化技术就是在一台物理计算机上,通过中间虚拟软件层<code>Hypervisor</code>隔离<code>CPU</code>、内存等硬件资源,虚拟出多台虚拟服务器,这样做的话,一台物理服务器便可以安装多个应用程序,达到资源利用的最大化,而且多个应用之间相互隔离,如下图所示:</p>
<p> </p>
<img alt="" class="lazyload inited loaded" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-6d659172f0d696ac15315be181e5f3e3">
</div>
<div class="article-content">
虚拟机上部署应用示意图
<p> </p>
<h4 class="heading">虚拟机的优点</h4>
<ul><li> <p>可以把资源分配到不同的虚拟机,达到硬件资源的最大化利用</p> </li><li> <p>与直接在物理机上部署应用,虚拟机更容易扩展应用。</p> </li><li> <p>云服务:通过虚拟机虚拟出不同的物理资源,可以快速搭建云服务。</p> </li></ul>
<h4 class="heading">虚拟机的不足之处</h4>
<p>虚拟机的不足之处在于对物理服务器资源的消耗,当我们在物理服务器创建一台虚拟机时,便需要虚拟出一套硬件并在上面运行完整的操作系统,每台虚拟机都占用许多的服务器资源。</p>
<h2 class="heading">Docker是什么?</h2>
<p>相对于虚拟机的笨重,<code>Docker</code>则更显得轻量化,因此不会占用太多的系统资源。</p>
<p><code>Docker</code>是使用时下很火的<code>Golang</code>语言进行开发的,其技术核心是<code>Linux</code>内核的<code>Cgroup</code>,<code>Namespace</code>和<code>AUFS</code>类的<code>Union FS</code>等技术,这些技术都是<code>Linux</code>内核中早已存在很多年的技术,所以严格来说<code>Docker</code>并不是一个完全创新的技术,<code>Docker</code>通过这些底层的<code>Linux</code>技术,对<code>Linux</code>进程进行封装隔离,而被隔离的进程也被称为容器,完全独立于宿主机的进程。</p>
<p>所以<code>Docker</code>是容器技术的一种实现,也是操作系统层面的一种虚拟化,与虚拟机通过一套硬件再安装操作系统完全不同。</p>
<p> </p>
<img alt="" class="lazyload inited loaded" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-ab9d56d072a8dda07ae29a855b503bfc">
</div>
<div class="article-content |
|