Docker是一个开源的容器引擎,它笨重,且易移植,“build once, configure once and run anywhere”。应用 go 语言开发,并听从 apache2.0 协定。
一、传统软件行业中存在的问题
- 开发、生产、测试环境不统一,开发环境下可用的服务挪到生产上不可用。
- 不同环境之间迁徙老本太高,没有对立的软件部署封装规范及封装环境。
- 对于分布式软件继续集成(测试、打包、公布、部署、治理)周期很长,难以自动化、工程化。
- 面临刹时用户流量增大的场景,很难实现分布式应用服务实例的疾速部署。
二、集装箱与 docker 之间的关系
通常称 docker 为软件行业的集装箱技术,那么 docker 和集装箱有什么相似之处呢?
传统行业集装箱 | 软件行业 Docker |
---|---|
装载实体货物 | 装载并运行应用服务 |
具备对立的规格,便于搬运 | 封装环境的统一性(JDK、环境变量都能够封装在一个 docker 镜像外面),能够听从肯定规定重复的、疾速的自动化装置部署 |
环境隔离,每个公司的集装箱货物与其余的公司的货物不混在一起。 | 在 linux 中采纳 namespace 技术进行资源隔离,cgroups 技术进行资源限度。容器之间互不影响。 |
资源共享,一个运送集装箱的船舶,搭载多个集装箱 | 一台服务器能够启动多个 docker 容器,达到共享服务器资源的目标 |
具备残缺的物流仓储零碎 | docker 镜像仓库中的镜像,能够导出导入,上传下载 |
能够参考我的另一篇文章《【大话云原生】煮饺子与 docker 之间的关系》,我感觉这篇文章对于您了解 docker 将有十分大的帮忙。
三、docker 与虚拟机的区别
docker 和虚拟机在某些利用场景下比拟像,然而 docker 不是虚拟机。
docker 是一种虚拟化容器技术,他和虚拟机最基本的区别是:docker 容器和宿主机共用 linux 操作系统内核,不会在宿主机上再次装置操作系统。docker 容器运行状态下的实质是宿主机上的过程,通过 namespace 资源隔离,cgroups 资源限度,使它看上去像是一个独立的虚拟机.
比照项 | 虚拟机 | docker 容器 |
---|---|---|
启动速度 | 龟速(实质是启动操作系统) | 秒速(实质是启动一个过程) |
镜像大小 | 以 Ubuntu 为例,1G 以上 | Ubuntu:195M |
利用部署集成 | 通常是手动装置 | 下载镜像 + 启动镜像(主动) |
内存拜访效率 | 慢,先拜访虚拟地址 | 根本等同于宿主机 |
CPU 损耗 | 虚构操作系统造成的损耗较大 | 靠近于 0 |
四、docker 的利用场景
- docker 镜像一旦构建,就曾经一次性实现了利用主动打包、集成。docker 镜像能够进行版本治理、复制、分享、批改,就像治理代码一样。
- 通过对立的 docker 环境封装(比方镜像中封装了同一版本的 JDK、同样的环境变量等等),保障应用服务运行环境的一致性。避免出现在测试环境上好用,挪到生产环境下运行失败的问题。
- docker 能够做到秒级、甚至毫秒级的启动工夫。大大的节约了开发、测试、部署的工夫。
- 因为镜像可下载、可复用,docker 容器可疾速启动等个性,联合容器编排服务 (k8s) 能够实现大型分布式部署的弹性伸缩,疾速扩大。
五、总结
如果初学者对于本节内容了解起来有艰难,也不要泄气。其实 docker 的学习难度很低,随着学习的深刻,下面的这些概念很容易了解的。
感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源!。更多精彩内容公众号:字母哥杂谈。字母哥博客:zimug.com