最近项目组打算进行技术革新,顺应技术发展趋势,同时也为了丰富提高大家的技术水平,想要使用Docker来替换之前旧有的服务部署方式。虽然之前也了解过Docker,但却没有进行过系统深入的研究,所以打算借这次机会,好好的整理学习一下Docker,不管以后用不用的上,这东西现在确实非常的火,所以还是很有必要学习一下的。
本文不做特别详细的介绍,只是介绍怎么更通俗形象的理解Docker。虽然网上的入门教程很多,但是大部分看完之后依旧是云里雾里的感觉,所以特地写了这片文章帮助想要学习Docker的人快速理解和入门。
Docker 的三大核心?
1、镜像
-
官方解释:
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 -
通俗理解:
我们可以把镜像看成面向对象编程中的类,一个容器就是一个类的实例,我们可以根据一个镜像,创建出很多个容器(创建同一个类的多个对象)。
每一个容器都是独立的,我们可以在容器上面做出更改(对不同对象的同一属性设置不同的值。obj1.name=‘张三’,obj2.name=‘李四’),然后再把这个容器打包成一个新的镜像,从而以后可以根据改动后的镜像创建出新的容器。
2、容器
- 官方解释:
容器就是将软件打包成标准化单元,以用于开发、交付和部署。 - 通俗理解:
容器可以看成是一个鱼缸,鱼缸中有水草假山(鱼生存的基本环境)。
镜像是只读的,容器从镜像启动时,会在镜像的最上层创建一个可写层。
3、仓库
- 官方解释:
仓库是集中存放镜像文件的场所。
Docker 是什么?
- Docker本身并不是容器,是一个开源的容器引擎,创建容器的工具
- Docker这样创建容器的技术和虚拟机一样,也是虚拟化技术
- Docker相比于虚拟机是一个轻量级的虚拟化技术
Docker和虚拟机对比:
- 容器之所以轻量,主要因为每一个虚拟机都包含一个完整的操作系统,而容器不包括操作系统。
- 因为每个虚拟机都带有一个完整的操作系统,占用大量的空间(几GB到几十GB大小),所以相比容器而言(几M大小),虚拟对资源的利用率要远低于容器(一台主机可以同时运行几千个Docker容器)。
- 容器启动时间很快,几秒钟就能完成。虚拟机一般需要几分钟才能启动完成。
官方对Docker的介绍
- Build, Ship and Run 搭建、发送、运行
形象理解:
还是用鱼缸养鱼的故事。我现在想养几条金鱼,那我首先要去花鸟鱼虫市场去买个鱼缸,然后再去买几条好看的金鱼,买回家后往鱼缸里倒水,然后用水草,假山装饰一下,再把金鱼倒进去。
但是,现在问题来了,我想再养几条热带鱼。那肯定不能跟金鱼养在一个鱼缸里了,也许它们会互相攻击,所以你就又得买个新鱼缸,倒上水,放上水草、假山,然后把鱼放进去。
可能你特别喜欢鱼,又想养点别的品种的鱼,然后一顿操作猛如虎,最后累个够呛… …
在你还想养别的鱼但又苦于奔走在花鸟鱼虫市场和家里的路途中,忽然一个头发杂乱的乞丐出现在你面前:“小伙子,我看你骨骼奇特,定是一个养鱼奇才,这本《鱼缸复制大法》10块钱卖给你吧”,你回家后一通苦练,终于只要你拍一下鱼缸,它就会一个变两个,而且你都不用倒水,放水草、假山,只需要把鱼放进去就行,这样是不是方便多了。 - Build once,Run anywhere 一次搭建,到处运行
不管鱼缸在哪里,只要有一个你准备好用来养鱼的鱼缸作为原样品,你就可以用它来复制产生更多的鱼缸来养不同的鱼。