用了这么多年Docker,殊不知你还有这么多弯弯绕!

单体应用拆分成微服务后,能够实现快速开发迭代,但因为小服务太多 , 导致测试和部署的成本提高 。
单体应用中,将Spring Boot工程打包成一个war包,然后部署在linux服务器的Tomcat中就可以了 。
拆分成微服务后,修改一个需求 , 可能会涉及多个微服务,这个时候,被修改过的代码都需要重新测试、打包、部署、上线发布 。无形之中 , 给现场运维人员增加了成倍的工作压力 。
微服务通常会在共有云上创建ECS进行扩容 , ECS通常只包含了基本的操作系统环境,没有包含运行JAVA的环境jdk,就需要在ECS上安装jdk,而且每个服务依赖的jdk版本可能也不会相同,一般情况下,都会采用jdk8,但有些喜爱前言技术的项目经理 , 可能要试一下jdk21,毕竟也是一个长期稳定的大版本 。
而容器技术可以解决上面的两个问题(代码部署难、缺环境) 。
时下容器技术最火的当属Docker,很多小伙伴也用了多年,只知道它是容器技术,可以将程序和依赖打到Docker里,然后发布在Linux服务器中,就完成了程序的部署,一次构建、到处运行,很牛逼,至于其它的 , 就不知道了 , 也不想知道~
一、神之容器 Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 , 然后发布到任何流行的Linux或windows操作系统的机器上,也可以实现虚拟化 。容器是完全使用沙箱机制,相互之间不会有任何接口 。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口 。它是目前最流行的Linux容器解决方案 。
一个完整的Docker由以下七个部分组成:
  • Docker Client 客户端 。
  • Docker Daemon 守护进程,提供Docker Server,用于接收Docker Client的请求 , Docker Server 通过路由Router与分发调度,找到相应的 Handler 来执行请求 。
  • Docker Image 镜像,包含Distribution(分发)、Layer(层)、Image(镜像)、Registry(注册中心)、Reference(引用) 。
  • Docker Driver 驱动,Docker架构中的驱动模块,它主要通过与Docker守护进程进行交互 , 实现对Docker容器执行环境的定制和管理 。
  • Docker Graph 内部数据库 , Docker Graph是Docker中的一种数据结构,用于记录和跟踪Docker镜像和容器之间的关系;
  • LibcontAIner 函数库 , Libcontainer是Docker的底层容器管理库,它提供了一组接口和函数,用于创建和管理容器 。Libcontainer直接与内核交互,负责容器的命名空间、cgroup、网络设备等底层操作 。
  • Docker Container 容器,Docker Container是Docker中的容器实例,它是通过Driver和Libcontainer共同协作创建出来的 。Driver提供了容器的运行环境定制,而Libcontainer则负责容器的具体创建和管理操作 。

用了这么多年Docker,殊不知你还有这么多弯弯绕!

文章插图
二、Docker架构图