乐趣区

关于java:docker专栏1docker解决的实际问题及应用场景

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

退出移动版