首先先明白何为Docker以及它能够用来做什么。
Docker 是一个开源的应用容器引擎,基于GO并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
From: runoob
Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly.
From: 官方文档
综上,Docker其实就是一种能够将程序及其所需要的运行环境打包的容器。它解决的问题或者说优势为:
1. 在保证一致性的前提下进行应用传递/Fast, consistent delivery of your applications:不会出现我电脑跑得起来你电脑跑不起来的情况
2. 响应式部署和缩放/Responsive deployment and scaling:个人理解就是Docker可以将应用部署在各式各样的平台上,包括本地计算机,VM,云端等等。Docker轻量化的体现之一就是能够进行动态调整。
3. 同一套硬件实现更多的应用部署/Running more workloads on the same hardware: 这一条主要是与VM相比的优势。
虽然VM也能够实现各应用相互隔离的效果,但却更加笨重:
从结构上来讲,Docker一个containers中包含应用程序以及所需要的依赖(MB为单位)。VM在其基础上还多打包了一个Guest OS(GB为单位)。所以明显的,VM更加笨重一些。这也解释了Docker的第三个优势。
几个比较重要的概念
1. IMAGES: 所谓镜像就是一个创建container的模板。类比OOP语言,就是一个类。
2. CONTAINERS: 所谓容器是一个镜像的可执行实例。类比OOP语言,在不考虑static的情况下,我们需要实例化一个对象(继承了class中的特点)而后才能执行。 默认情况下,各个containers之间是相互隔离的,但是我们也可以手动控制其隔离等级。
3. DOCKER DEAMON: 所谓Docker deamon负责监听docker API的请求,管理Docker对象。deamons之间也可以进行通信从而提供服务。
3. SERVICES:所谓服务允许我们通过多个Docker deamon对应用进行缩放。