菜菜哥,你上次讲的kubernetes我研究了一下,你再给我讲讲docker呗
docker可很流行呀
kubernetes是容器编排技术,容器不就是指的docker吗?
docker可不等于容器哦,docker只算是容器的一种吧,算了容器的典型代表
容器的诞生在传统的软件部署方式中,程序员需要把要发布的应用程序打成包发给运维人员,然后由运维人员在生产环境进行部署。当随着应用的版本迭代越来越多,应用的依赖库版本错综复杂,往往会出现开发环境和生产环境不一致的情况发生,而且由于多数情况下采用微服务的架构,每个团队都有可能使用不同版本的依赖库,并有可能在升级的时候替换掉他们,因而同一个应用程序采用相同版本的依赖库是多么的重要。
当应用程序比较少或者都是一些单体应用的时候,可以利用虚拟机来隔离每个服务,通过虚拟机的虚拟化技术来为每个应用程序提供不同的运行环境。但是当拆分为微服务之后,每个服务会变的小而多,这个时候如果为每个应用程序分配一个虚拟机,资源耗费是相当多的,但是每个虚拟机上运行多个微服务又会发生依赖库版本的问题,如果有一种起到类似虚拟机隔离作用,但是成本比虚拟机低很多的技术该有多好?
容器技术得益于linux的容器技术,现代开发者已经由传统的虚拟机方式转向linux容器技术。容器类似虚拟机,但比虚拟机开销要小的多,并且同样把每个应用都隔离开来。容器技术允许你在同一台服务器上运行多个服务,而且还可以根据每个服务提供不同的运行环境。
虚拟机中的进程运行在虚拟机的操作系统中,而运行在容器中的进程实际是运行在宿主机的操作系统中,只是表面看来好像运行在容器的沙盒一样,但实际上确实是和其他进程相互隔离的。
linux之所以能实现容器这种功能,得益于它的命名空间和控制组。linux命名空间时每个进程相互隔离,只能看到它自己的系统资源,例如:文件,进程,网络等,而linux的控制组技术能够限制每个进程可以使用的资源的最大量。一个技术进行隔离,一个技术进行限制,这就导致了容器技术要比虚拟机要灵活的多。