正文
1、 开发构建镜像并将镜像 push 到 Docker 仓库
2、 测试或者运维从 Docker 仓库拷贝一份镜像到本地
3、 通过镜像文件开启 Docker 容器并提供服务
为啥要用 Docker? 这要从目前软件行业的痛点来讲起 1、软件更新发布及部署低效,过程繁琐且需要人工介入,2、环境一致性难以保证,3、不同环境之间迁移成本太高。有了 Docker 可以很大程度解决上面的问题。
首先,Docker 的使用简单至极,
从开发的角度来看就是三步走:构建,运输,运行。
其中关键步骤就是构建环节,即打包镜像文件。但是
从测试和运维的角度来看,那就只有两步:复制,运行。
有了这个镜像,那么想复制到哪运行都可以,完全和平台无关了。同时 Docker 这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源了以及还不需要考虑应用之间相互影响,想想就开心。
其次,因为在构建镜像的时候就处理完了服务程序对于系统的所有依赖,所以在你使用的时候,你可以忽略掉原本程序的依赖以及开发语言。对测试和运维而言,更多专注于自己的业务内容上。
最后,Docker 于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。
所以, Docker 能干啥,总结如下:
· 构建容易分发简单
· 隔离应用解除依赖
· 快速部署测完就销
Docker 是个进程级的轻量化虚拟机,和传统虚拟机有啥区别呢?
Docker 这个虚拟机超级轻量级,仅仅是一个进程而已。与传统的虚拟机比如 VM 有着巨大的差别,区别看下图:
我们来看一下二者的区别,因为 VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,其中虚拟机操作系统占用内存是比较大的,一个操作系统有好几个 G,自然在启动速度和资源利用率以及性能上有非常大的开销,如果在本地,或者个人电脑,那么影响还不是那么大,但是在云端就是一个非常大的资源浪费。
咱们很多时候做事情的时候不会考虑与事情本身无关的问题,比如造飞机的不会考虑飞机是否要潜水,对于我们目前很多移动互联网的应用来说,很少会涉及到对操作系统的部分。
其实我们主要关心的是应用的本身,
而 VM 虚拟机的上层是运行的运行时库和应用,整个虚拟机的空间是非常的庞大,但是容器化技术 Docker 技术的出现后,省去了操作系统这一层,多个容器之间相互隔离且共用了宿主操作系统和运行时库。
所以 Docker 应用容器相对于 VM 有以下几个优点:
· 启动速度快,容器启动本质就是一个开启一个进程而已,因此都是秒启,而 VM 通常要更久。
· 资源利用率高,一台普通 PC 可以跑成百上千个容器,你跑十个 VM 试试。
· 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源。
所以很多移动互联网的应用或者云计算的后端节点都可以用 docker 来替换物理机器或者虚拟机。比如腾讯地图的很多后台服务基本上都迁移 docker 部署了。
前面说了那么多,始终还是雾里看花。下面就详细介绍一下技术架构,底层又是用的啥技术来实现上述那么多优点的?