2022年3月底我开始正式的接触Docker这项技术,以往一直以为Docker是一项全新的虚拟技术,认为与我的生活和工作无关,因此也从未计划去了解和使用它。直到看到同事通过它快速地完成了一次服务部署,在以往我是需要花大量时间才能完成的工作,哪怕在运维上已经有丰富的经验也难以避免。而他只需要数分钟就能完成,这巨大的反差令我瞬间对Docker产生了非常浓厚的兴趣,便开始阅读书籍《Docker实战》、翻阅官网手册并加入Docker社区,在短暂的实战中切实的感受到了Docker带来的改变和便利,便想着在这里出个“Docker系列”地博客,跟大家一起分享Docker。如果你也感兴趣,那么请跟我一起进入到下面的Docker世界吧~
如果你是一位开发者,你是否跟我一样有如下问题:
如果你是一位在IT领域内的从业者,但并非研发,你是否有如下困恼:
如果你是一位领导或则软件及服务的直接受益者,你是否有如下担忧:
那么恭喜你,Docker将为你解决如上问题、困恼和担忧。同时,Docker有如下优点:
Docker是一个“docker(命令行程序)”、“dockerd(提供docker服务的守护进程)”、“Registry(存放镜像的仓库)”的一个集合,它简化了安装、运行、发布、删除、移植和管理软件的过程,解决了在传统过程中会出现的很多问题。
同时也提供了一种高效编排服务的方法。而其直接使用的技术是现存的UNIX技术“容器”,因此Docker本身并不引入新的技术,它是一个竖立于技术之上的一种抽象的服务,是基于开发需求而诞生的一种“平台服务”。
docker运行在Linux中的示例图
在没有Docker的时代中,商家和开发们普遍使用的是虚拟机(硬件虚拟化),以提供隔离的需求,比如常用的“VMWare”、“VirtualBox”等。虚拟机提供虚拟的硬件,可直接安装操作系统,但它们花费的时间也较长,通常以分钟来计算。除了时间开销外,还伴随着大量的资源开销,因为它们除了运行你需要的软件外,还需要支撑系统的运行。
而Docker则不同,它不提供硬件虚拟化技术。如上图所示,Docker中的容器与Kernel(操作系统)之间是没有额外的中间层的,它们可以直接与操作系统打交道。而之所以能如此,是因为它使用的是2007年就已经成为Linux一部分的“namespace”和“cgroups”技术。因此,Docker本身并不提供容器技术,但它使容器的使用更加简单了。
Docker构建的容器有如下8方面的隔离:
镜像是容器要运行的资源集合。容器如同集装箱一样,而镜像则是集装箱里面装着的物资,因为集装箱之间是相互隔离的,因此相同内容的物资可以放在多个集装箱中,即通过一个镜像可以产生N个容器,且不必担心他们之间产生冲突。
我们通常在Registry仓库中下载的内容就是镜像。因此,再Docker中镜像是分发的单元,我们通过将自己的程序或文件打包成镜像,并发布到仓库中,最终由仓库分发此镜像给需要的(授权的)用户。
以打包一个Nginx镜像为例,如下所示:
打包Nginx镜像和分发示例
鉴于上面所述,Docker可以随时随地的使用,尤其现在Docker已经支持主流的操作系统,如:Windows、OS X、Linux。在Windows和OS X更是提供了桌面版,让大家操作镜像跟在应用商店操作软件一样简单和方便,可以快速的添加和删除一个镜像以及启停一个容器。
毫不避讳的说,我最近的博客网站就是用Docker快速搭建的,除去对博客软件的学习时间整个搭建过程也就不到3分钟。
容器虽然能够提供一定的保护,预防许多类型的攻击,但并不是安全问题的总解决方案,你不应使用不受信任来源的镜像。也不应当随便的将非完全可控的的容器运行在相互协作的环境中。
如果你觉得有帮助,或则喜欢的话可以注册账户并留言,在更新内容后我会第一时间通知您。