一 容器的由来
随着云计算的发展,IAAS服务已经趋于成熟,我们很容易从IAAS供应商获得虚拟机、存储、数据库资源。如果以虚拟机VM为单位进行管理,总是显得很厚重,资源利用率并不高。
为了充分使用操作系统的资源,LXC(linux container)是基于linux内核提供的cgroups 和 namespace进行的用户态的隔离机制。通过LXC,我们可以控制进程的内存、cpu竞争、独立的名字空间(网络、mnt、pid、ipc等)。这样,运行在同一个操作系统上的进程,可以认为是看不到彼此的。
而对于应用开发者而言,他们关心的是如何将他们的产品能够快速部署、更新,能够高效的运维,甚至自动化运维。一个产品,会包括多个组件,可能会有分布式部署的形态,如何将产品能够快速部署到操作系统中,并且能够充分使用操作系统资源呢。
容器的出现,最大的贡献是将应用的部署标准化,从而应用可以快速部署,与此同时将应用作为资源调度的单元,提供了能够被调度的可能。
容器化应用的发布流程为:
1 build 将应用所需的配置,应用环境打包为docker image。
2 ship 发布,将docker image 发布到镜像仓库docker registry中。
3 run 在操作系统中,执行docker run,将镜像仓库中的image 拉到本地,通过docker engine执行。
二 容器的应用场景
1 docker 与VM的差异
docker是非常轻量级的,docker的启动时间是秒级。与虚拟机的全虚拟化和半虚拟化,是操作系统级别的轻量级虚拟化。
docker image往往不大,docker image 是一层层的,可以只更新差量。 而VM的image 往往非常大。