Docker入门–镜像与容器
一、什么是Docker?
官方:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
自己理解:Docker的目的在于服务的部署,最初的服务是部署在服务器上,一台服务器的话一个端口只能部署一个服务,且环境不是隔离的。后来就有了虚拟机,在一台服务器(物理机)上搭建多台虚拟机,虚拟机运行自己的服务。但是虚拟机比较笨重,需要重复搭建很多基础服务。于是docker就出来了,可以说docker是一个轻量级的虚拟机。但是docker并不是虚拟机。
网上有一个很恰当的比喻来说明物理机,虚拟机和docker之间的关系。
物理机就像是一栋独栋别墅,各种豪华,别墅拥有很多房间卧室可以供人(服务)休息,大家共同使用客厅、餐厅(CPU)等资源,性能较好,可惜就是成本高。
虚拟机就像是公寓,一栋楼,里面有许多单间,单间相对隔离,有自己的客厅,厨房,卫生间等(资源独立)。一套公寓可以有很多单间(虚拟机),但是虚拟机性能不如物理机。
docker则相当于隔间,像北京香港的蜗居隔断间,或者休眠仓,每一个单间可以被隔成多个隔间供多人(服务)使用。
二、Docker的镜像与容器
官方:docker镜像和容器的区别:docker镜像是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据。docker容器是由docker镜像创建的运行实例。
Image Layer(镜像层)
镜像可以看成是由多个镜像层叠加起来的一个文件系统(通过UnionFS与AUFS文件联合系统实现),镜像层也可以简单理解为一个基本的镜像,而每个镜像层之间通过指针的形式进行叠加。
Container(容器,一层读写层+多层只读层)
容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运行容器。
(以上内容摘自:侵权即删)
个人理解:镜像更像是一个模版,定义了docker是怎样的,里面包含什么内容。内容是只读的,不能修改。模版只是方便研发,并不能直接使用,直接使用的就是容器,容器的底层是镜像,最外层链接了一层读写层。可以把容器称作运行的镜像,是镜像的实例。这样我们要发布服务的话,只需要定义好镜像模版,不断的实例化镜像,就能生成可运行的容器,容器里面运行的就是我们定义的服务(镜像)。