茼花粉 發表於 2021-11-16 03:02:00

全面的Docker快速入门教程

<h2>前言:</h2>
<p>  都2021年了,你还在为了安装一个开发或者部署环境、软件而花费半天的时间吗?你还在解决开发环境能够正常访问,而发布测试环境无法正常访问的问题吗?你还在为持续集成和持续交付(CI / CD)工作流程苦恼吗?那还在犹豫是什么,Docker能够完美的解决你遇到这所有的问题。</p>
<div class="lake-content">
<h2 id="UHgM2"><span class="ne-text">Docker是什么?</span></h2>
<p id="ud37a35b6" class="ne-p"><span class="ne-text">  Docker 是一个开源的应用容器引擎,基于 Golang 语言开发,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 服务器。容器是一个沙箱机制,相互之间不会有影响(类似于我们手机上运行的 app),并且容器开销是很低的。</span></p>
<p id="u3062515a" class="ne-p"><span class="ne-text">  Docker 是一个供开发人员和系统管理员构建、运行和与容器共享应用程序的平台。使用容器部署应用程序称为容器化。容器并不是新事物,但它们用于轻松部署应用程序却是新鲜的。</span></p>
<div class="ne-quote">
<blockquote>
<p id="uccc7ec04" class="ne-p"><span style="color: rgba(255, 0, 0, 1)"><strong><span class="ne-text">注意:Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。</span></strong></span></p>
</blockquote>
<div class="lake-content">
<h2 id="Ty8Tw"><span class="ne-text">Docker的优势有哪些?</span></h2>
<div class="lake-content">
<ul class="ne-ul">
<li id="u02b184dc"><strong><span class="ne-text">灵活性</span></strong><span class="ne-text">:即使是最复杂的应用程序也可以容器化。</span></li>
<li id="u63a3a1f9"><strong><span class="ne-text">轻量级</span></strong><span class="ne-text">:容器利用并共享主机内核,使它们在系统资源方面比虚拟机更有效率。</span></li>
</ul>
<ul class="ne-ul">
<li id="u7cf4489f"><strong><span class="ne-text">可移植</span></strong><span class="ne-text">:您可以在本地构建,部署到云上,并在任何地方运行。</span></li>
<li id="uadbcc38f"><strong><span class="ne-text">松耦合</span></strong><span class="ne-text">:容器是高度自给自足和封装的,允许您在不影响其他容器的情况下替换或升级其中一个。</span></li>
</ul>
<ul class="ne-ul">
<li id="uf572a12a"><strong><span class="ne-text">可扩展</span></strong><span class="ne-text">:您可以跨数据中心增加和自动分发容器副本。</span></li>
<li id="uda84a321"><strong><span class="ne-text">安全性</span></strong><span class="ne-text">:容器对进程应用主动约束和隔离,而不需要用户进行任何配置。</span></li>
</ul>
<div class="lake-content">
<h2 id="vbGiQ"><span class="ne-text">Docker的作用?</span></h2>
<div class="lake-content">
<p id="uacb216ba" class="ne-p"><span class="ne-text">  Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产中运行代码之间的延迟。</span><span class="ne-text">Docker(opens new window)</span><span class="ne-text">是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!<span style="color: rgba(255, 0, 0, 1)"><strong><span class="ne-text">无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,节约有限的生命。</span></strong></span></span></p>
</div>
<div class="lake-content">
<h2 id="c3uVU"><span class="ne-text">Docker主要用来解决什么问题?</span></h2>
<div class="lake-content">
<div class="ne-quote">
<blockquote>
<p id="u0925757f" class="ne-p"><span style="color: rgba(255, 0, 0, 1)"><strong><span class="ne-text">Docker的出现主要就是为了解决:在我的机器上运行时是正常的,但为什么到你的机器上就运行不正常了。</span></strong></span></p>
</blockquote>
</div>
<p id="u46960a68" class="ne-p"><span class="ne-text">  比如你写一个Web应用,并且本地调试没有任何问题。这时候你想发给你的朋友试试看或者发布部署到远程的云服务器上查看效果,那么首先你需要配置和你本地相同的软件环境,如数据库,Web服务器(IIS,Tomcat,Nginx),必要的插件,库等等。而这你还不能保证的你的软件一定能够运行起来,因为别人可能用完全不同的操作系统,即便是使用Linux每种发行版也会有微小的区别。</span></p>
<p class="ne-p"><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024153032-151412691.png" alt="" loading="lazy"></span></p>
<div class="lake-content">
<p id="uc98bce46" class="ne-p"><strong>为了模拟完全相同的本地开发环境。</strong></p>
<p id="u982310bc" class="ne-p"><span class="ne-text"> 我们首先想到的就是虚拟机,但是虚拟机需要模拟硬件,运行整个操作系统不但体积臃肿内存占用高,程序的性能也会受到影响。</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="lake-content">
<h3 id="ua2ac0467" class="ne-p"><span class="ne-text">如下图是比较常用的虚拟机:</span></h3>
<p><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024238086-804806559.png" alt="" loading="lazy"></span></p>
<h3>Docker的脱颖而出:</h3>
<div class="lake-content">
<p id="u86587ea3" class="ne-p"><span class="ne-text">  这时候Dokcer就派上了用场,Docker在概念上与虚拟机非常类似。但是Docker更轻量,它不会去模拟底层的硬件 ,只会为每一个应用提供完全隔离的运行环境。你可以在容器中配置不同的应用环境,并且不用的环境之间互相不影响,这个“环境”在Docker中也被称作为Container(容器)。</span></p>
<p class="ne-p"><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024437511-1484304207.png" alt="" loading="lazy">&nbsp;</span></p>
<div class="lake-content">
<h2 id="QGzTO"><span class="ne-text">Docker和虚拟机技术的区别?</span></h2>
<div class="lake-content">
<p id="u745e6af2" class="ne-p"><strong><span class="ne-text">  Docker</span></strong><span class="ne-text"> 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 <code class="ne-code"><span class="ne-text">Docker</span></code><span class="ne-text">技术比虚拟机技术更为轻便、快捷。</span></span></p>
<p id="u86e4435c" class="ne-p"><span class="ne-text">下面的图片比较了<span class="ne-text"> <strong><span class="ne-text">Docker</span></strong><span class="ne-text"> <span class="ne-text">和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。</span></span></span></span></p>
<p class="ne-p"><span class="ne-text"><span class="ne-text"><span class="ne-text"><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024530476-2076291168.png" alt="" loading="lazy"></span></span></span></span></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024537283-215069450.png" alt="" loading="lazy"></p>
<p><span class="ne-text">如果想详细了解,可以参考文章:<span class="ne-text">docker与虚拟机的区别</span><span class="ne-text">👉</span></span></p>
</div>
</div>
<div class="lake-content">
<h3 id="NvVnY"><span class="ne-text">Docker容器和虚拟机的区别总结:</span></h3>
<div class="lake-content">
<table class="ne-table">
<tbody>
<tr>
<td width="250">
<p id="uc0d6a715" class="ne-p"><strong><span class="ne-text">特性</span></strong></p>
</td>
<td width="250">
<p id="u9b35d9d4" class="ne-p"><strong><span class="ne-text">docker容器</span></strong></p>
</td>
<td width="250">
<p id="udcd0cb03" class="ne-p"><strong><span class="ne-text">虚拟机</span></strong></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u77ac1dd6" class="ne-p"><span class="ne-text">启动</span></p>
</td>
<td width="250">
<p id="ub2e73d27" class="ne-p"><span class="ne-text">秒级</span></p>
</td>
<td width="250">
<p id="ua5132c14" class="ne-p"><span class="ne-text">分钟级</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="uc6c32298" class="ne-p"><span class="ne-text">硬盘使用</span></p>
</td>
<td width="250">
<p id="u9a9ee8b9" class="ne-p"><span class="ne-text">一般为MB</span></p>
</td>
<td width="250">
<p id="ue61aa923" class="ne-p"><span class="ne-text">一般为GB</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="u62475660" class="ne-p"><span class="ne-text">性能</span></p>
</td>
<td width="250">
<p id="uf11a37cb" class="ne-p"><span class="ne-text">接近原生(宿主机)</span></p>
</td>
<td width="250">
<p id="uf5dafec1" class="ne-p"><span class="ne-text">弱于原生</span></p>
</td>
</tr>
<tr>
<td width="250">
<p id="uccd343a9" class="ne-p"><span class="ne-text">系统支持量</span></p>
</td>
<td width="250">
<p id="udfc179cd" class="ne-p"><span class="ne-text">单机支持上千个容器</span></p>
</td>
<td width="250">
<p id="uaefa5de5" class="ne-p"><span class="ne-text">一般几十个</span></p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>&nbsp;</p>
</div>
<div class="lake-content">
<h2 id="YvFVo"><span class="ne-text">Docker中的三个重要概念</span></h2>
<div class="ne-quote">
<blockquote>
<p id="u74102c0e" class="ne-p"><span class="ne-text">Docker中的三个重要概念分别是:Image(镜像),Container(容器),Repository(仓储)。</span></p>
</blockquote>
</div>
<h3 id="zydeg"><span class="ne-text">Image(镜像)一个特殊的文件系统</span></h3>
<div class="ne-quote">
<blockquote>
<p id="u75ed1b5b" class="ne-p"><span class="ne-text">你可以把它理解成一个虚拟机的快照(Snapshot),里面包含了你要部署的应用程序以及它所关联的所有库。</span></p>
</blockquote>
</div>
<p id="u83a07c1a" class="ne-p">  操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。</p>
<p class="ne-p"><span class="ne-text"><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024647049-1104755084.png" alt="" loading="lazy"></span></span></p>
<p>&nbsp;</p>
<div class="lake-content">
<h3 id="qnpfy"><span class="ne-text">Container(容器)镜像运行时的实体</span></h3>
<div class="ne-quote">
<blockquote>
<p id="u7634bf7c" class="ne-p"><span class="ne-text">这里的容器就像是一台台运行起来的虚拟机,里面运行了你的应用程序,每个容器是独立运行的他们相互之间不影响。通过一个镜像,我们可以创建许多个不同的Container容器。</span></p>
</blockquote>
</div>
<p id="u72923949" class="ne-p"><span class="ne-text">  镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和类的实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。</span><span class="ne-text">容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。</span><span class="ne-text"><span class="ne-text">容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。</span></span></p>
</div>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116024918590-307155263.png" alt="" loading="lazy"></p>
<div class="lake-content">
<h3 id="NTKDF"><span class="ne-text">Repository(仓储)集中存放镜像文件的地方</span></h3>
<p id="ua3c0791b" class="ne-p"><span class="ne-text">  镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务(就像Git仓库一样),Docker Registry就是这样的服务。<br><span class="ne-text">          一个Docker Registry中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过&lt;仓库名&gt;:&lt;标签&gt;的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。</span></span></p>
<h2 id="C5A2o"><span class="ne-text">Docker 架构及工作原理</span></h2>
<p id="ue1318fa9" class="ne-p"><span class="ne-text">  Docker使用客户端-服务器架构。Docker 客户端与 Docker 守护进程通信,后者负责构建、运行和分发Docker容器等繁重的工作。Docker 客户端和守护进程可以运行在同一个系统上,或者您可以将一个 Docker 客户端连接到一个远程 Docker 守护进程。Docker 客户端和守护进程通过 UNIX 套接字或网络接口使用 REST API 进行通信。</span></p>
<div class="ne-quote">
<p id="ub74dcac1" class="ne-p"><span class="ne-text">Docker 架构及工作原理详情介绍👉</span></p>







</div>







</div>
<p><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116025025161-1124450276.png" alt="" loading="lazy">&nbsp;</p>
<div class="lake-content">
<h2 id="HKHDg"><span class="ne-text">Dockerfile(自动化脚本)</span></h2>
<div class="ne-quote">
<blockquote>
<p id="u308d2d74" class="ne-p"><span class="ne-text">主要是用来创建我们之间讲到的镜像,这个过程就好比我们在虚拟机中安装操作系统和软件一样,只不过是通过Dockerfile这个自动化脚本完成的。</span></p>






</blockquote>






</div>
<p id="ufb8b350a" class="ne-p"><strong>Dockerfile详解教程文章:</strong><span class="ne-text">Dockerfile制作自己的镜像文件</span><span class="ne-text">👉</span></p>
<div class="lake-content">
<h2 id="Q0YQe"><span class="ne-text">Docker管理工具</span></h2>
<p><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116025121767-1341036243.png" alt="" loading="lazy">&nbsp;</span></p>
<div class="lake-content">
<h3 id="zPT88"><span class="ne-text">Portainer(推荐)</span></h3>






</div>






</div>






</div>
<p><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116025140093-1816487578.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="lake-content">
<p id="ude91e3de" class="ne-p"><strong><span class="ne-text">介绍:</span></strong><span class="ne-text">Portainer是一个开源的、轻量级的Docker环境管理UI(是Web应用的形式),可以用来管理Docker宿主机和docker swarm集群。</span></p>
<p id="u88f60c04" class="ne-p"><strong><span class="ne-text">Github 上项目地址:</span></strong><span class="ne-text">https://github.com/portainer/portainer</span></p>
<p id="u7d11c538" class="ne-p"><strong><span class="ne-text">官网地址:</span></strong><span class="ne-text">https://www.portainer.io</span></p>
<p id="u62015485" class="ne-p"><strong><span class="ne-text">支持的系统:</span></strong><span class="ne-text">Linux, Mac OS X, Windows。</span></p>
<p id="ue294b935" class="ne-p"><strong><span class="ne-text">功能特性:</span></strong></p>
<ul class="ne-ul">
<li id="u6973971b"><span class="ne-text">管理仓库、网络、数据卷、密钥、镜像、容器</span></li>
<li id="ucba5f6db"><span class="ne-text">管理你的配置,例如告警、监控</span></li>






</ul>
<ul class="ne-ul">
<li id="u7bb1bf02"><span class="ne-text">支持容器的健康检查</span></li>
<li id="uda13c509"><span class="ne-text">容器的启动、停止、恢复、删除</span></li>






</ul>
<ul class="ne-ul">
<li id="u8eb2759f"><span class="ne-text">检查容器、查看容器日志、可视化状态查看</span></li>
<li id="uda3ec964"><span class="ne-text">进入容器控制台</span></li>






</ul>
<ul class="ne-ul">
<li id="ue47c8f40"><span class="ne-text">可以添加扩展</span></li>
<li id="u99d6473e"><span class="ne-text">有一套 RBAC 基于角色的权限控制系统</span></li>






</ul>
<div class="lake-content">
<h3 id="Vu4YJ"><span class="ne-text">DockStation</span></h3>
<p class="ne-p"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116025213674-1202277601.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="lake-content">
<p id="u02e2ead1" class="ne-p"><strong><span class="ne-text">介绍:</span></strong><span class="ne-text">DockStation是一个免费的、以开发人员为中心的用于管理基于 Docker的桌面应用程序。您可以仅使用 GUI 来监控、配置和管理服务和容器,而不是大量的 CLI 命令</span><span class="ne-text">。</span></p>
<p id="ubc79fac1" class="ne-p"><strong><span class="ne-text">官网地址:</span></strong><span class="ne-text">https://dockstation.io/</span></p>
<p id="ude3c6b07" class="ne-p"><strong><span class="ne-text">Github地址:</span></strong><span class="ne-text">https://github.com/DockStation/dockstation</span></p>
<p id="u7f8fc2c4" class="ne-p"><strong><span class="ne-text">支持的系统:</span></strong><span class="ne-text">Linux, Mac, Windows</span></p>
<p id="u4217ddb8" class="ne-p"><strong><span class="ne-text">功能特性:</span></strong></p>
<ul class="ne-ul">
<li id="ud2592f56"><span class="ne-text">可以非常方便的操作 Docker 和 DockerCompose。</span></li>
<li id="ub8e2d161"><span class="ne-text">可以帮助我们管理容器、Service服务(本地远程都可以),并监控他们</span></li>






</ul>
<ul class="ne-ul">
<li id="u39578dc2"><span class="ne-text">可以轻松跟踪 CPU、内存、网络、磁盘I/O、开放端口</span></li>
<li id="ub72b17d3"><span class="ne-text">可以把常用的操作组织成一个项目,通过项目的方式来检查容器状态,以图形化的方式管理。</span></li>






</ul>
<h3 id="urH3E"><span class="ne-text">Docker Desktop</span></h3>
<p><span class="ne-text"><img src="https://img2020.cnblogs.com/blog/1336199/202111/1336199-20211116025228589-816931429.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="lake-content">
<p id="ub56902e4" class="ne-p"><strong><span class="ne-text">介绍:</span></strong><span class="ne-text">Docker Desktop 是一款易于安装的应用程序,使您能够构建和共享容器化应用程序和微服务。</span></p>
<p id="u74ed5323" class="ne-p"><strong><span class="ne-text">官网地址:</span></strong><span class="ne-text">https://www.docker.com/products/docker-desktop</span></p>
<p id="u6b396f88" class="ne-p"><strong><span class="ne-text">支持的系统:</span></strong><span class="ne-text">Mac, Windows</span></p>
<p id="ud8fda191" class="ne-p"><strong><span class="ne-text">功能特性:</span></strong></p>
<ul class="ne-ul">
<li id="u7835d2de"><span class="ne-text">能够以多种语言和框架在任何云平台上容器化和共享任何应用程序</span></li>
<li id="ue68f12fe"><span class="ne-text">轻松安装和设置完整的 Docker 开发环境</span></li>






</ul>
<ul class="ne-ul">
<li id="u017478fe"><span class="ne-text">包括最新版本的 Kubernetes</span></li>
<li id="u435b86d9"><span class="ne-text">自动更新,让您保持最新状态和安全</span></li>






</ul>
<ul class="ne-ul">
<li id="u1e5a1702"><span class="ne-text">在 Windows 上,能够在 Linux 和 Windows Server 环境之间切换以构建应用程序</span></li>
<li id="u29405d01"><span class="ne-text">使用本机 Windows Hyper-V 虚拟化实现快速可靠的性能</span></li>






</ul>
<ul class="ne-ul">
<li id="u95b89b74"><span class="ne-text">能够通过 Windows 机器上的 WSL 2 在 Linux 上本地工作</span></li>
<li id="u3c64d196"><span class="ne-text">代码和数据的卷安装,包括文件更改通知和轻松访问本地主机网络上运行的容器</span></li>






</ul>
<ul class="ne-ul">
<li id="u9f378e25"><span class="ne-text">使用支持的 IDE 进行容器内开发和调试</span></li>






</ul>
<h2>Docker学习系列文章</h2>
<p>入门必备:十本你不容错过的Docker入门到精通书籍推荐👉</p>
<p>day1、全面的Docker快速入门教程👉</p>
<p>day2、CentOS 8.4安装Docker👉</p>
<p>day3、Windows10 Docker安装详细教程👉</p>






</div>






</div>






</div>
<h2>参考文章:</h2>
<div class="lake-content">
<p id="ue969b51f" class="ne-p"><span class="ne-text">官方Docker-docs</span></p>
<p id="u7c0e8aa9" class="ne-p"><span class="ne-text">Docker 10分钟快速入门-B站视频</span></p>




</div>
<p>&nbsp;</p>




</div>







</div>






</div>






</div>

</div>
<div id="MySignature" role="contentinfo">
    <blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【&hearts;推荐&hearts;】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/15559341.html
頁: [1]
查看完整版本: 全面的Docker快速入门教程