【docker】P1 虚拟化与容器化
目录
- docker 简介
- 为什么要使用 docker
- docker VS 虚拟机
- 容器化
- 你是否曾经感叹过应用程序的部署和环境配置过程的纷繁复杂,有没有遇到过在开发环境好用,但是到了测试和生产环境就不好用的情况…
- 有没有遇到过新同事加入项目组需要花费大量的时间配置开发环境的问题…
- 有没有遇到过花了一整天或者更长时间按照配置文档来配置环境,但是最终用却卡在了中间的某一个步骤上再也过不去的问题…
如果你曾有过类似的经历,恭喜你,你找到了九星神剑 —— docker。它可以帮我们完美的解决上述这些问题,本系列博文将围绕 docker 的全流程内容展开。
docker 简介
docker 是一个用于构建、运行和传送应用程序的平台,就像其 Logo 所表达的一样,他可以将我们的应用程序打包成一个又一个“集装箱”,然后这个小鲸鱼就可以帮我把他运送到任何需要的地方,这样就解决了我们刚刚提到的一系列问题。
有了docker,我们就可以将应用程序和运行时所需的依赖包、第三方软件库、配置文件等打包在一起,以便在任何环境中都可以正确的运行。
为什么要使用 docker
举个例子,比如我们写了一个网站,用到了现在比较流行的前后端分离架构。前端使用 Vue 框架,后端 Java 的使用 SpringBoot 微服务框架来提供各种服务和接口,然后使用 Mysql数据库来存储数据。如果没有 docker,你需要在本地:
- 先安装前端 NodeJS 环境、各种 npm 依赖包、Java 运行时环境…
- SpringBoot 微服务的各种第三方依赖包
- Mysql数据库、配置各种环境变量…
- 然后再启动这些服务…
- 网站才能正常运行起来。
图片来源:GeekHour B站课程
如果项目规模再大一点,我们还需要配置 Redis 缓存,nginx 负载均衡,各种微服务框架等等。
此外,如果你需要把这个网站部署到测试环境及生产环境,那么刚刚你的所有步骤需要在新的环境再来一遍。运气好的话一切顺利一个下午搞定,运气不好你会抓耳挠腮。
有了docker,你就可以把它们打包成一个个的集装箱,只要你在开发环境中运行成功了,那么你在其他环境中一定也是可以运行成功的,这就是为什么在云服务时代,我们要使用 docker 来部署服务。
具体为什么,请关注本系列博文。
docker VS 虚拟机
跟我一样的技术员,大家应该都是从虚拟化年代来的,多多少少都使用过 VMWare、WSL等虚拟机软件。我们可以在 Windows 中通过 WSL 功能来安装使用 Linux 系统,也可以在 Mac 上通过 Parallels 运行 Windows 系统。
这是通过一种叫做虚拟化(Hypervisor)的技术来实现的。虚拟化技术通过将物理资源虚拟为多个逻辑资源的技术。他可以将一台物理服务器虚拟为多台逻辑服务器,每台虚拟服务器完全隔离、独立运行,包含完整的操作系统。
图片来源于网络
虚拟机在一定程度上完成了资源的整合,可以将一台物理机的计算能力、存储能力、网络资源分配给多个逻辑服务器,实现服务器的功能。
但是他的缺点也非常明显,每台虚拟机都需要持续占用各系统资源。而在实际服务场景中,应用服务并不需一个完整的操作系统所提供的所有功能,只需要的提供一个 Web 服务器,但虚拟机却需启动一个完整的操作系统,包含操作系统的内核、各种系统服务、各种工具甚至图形界面等等。
这些我们并不需要的服务占用了大量的资源,导致了资源的浪费和启动慢的问题。这个问题的技术迭代,就是容器化。
容器化
docker 就是容器化的解决方案和平台。容器是一种虚拟化技术,和虚拟机类似,也是产生一个独立的环境,我们可以在这个环境中运行独立的应用程序。但是和虚拟机不同的是,它不需要在容器中运行一个完整的操作系统,而是使用宿主机的操作系统。
图片来源于网络
同时,因为需要的资源更少,所以可以在物理服务器上运行更多的容器,这样就可以充分利用服务器的资源,减少资源的闲置和浪费。如此对比,我们一台物理服务器上只能运行几个虚拟机,但是却可以启动上百个容器,这就是容器化技术带来的优势以及和虚拟机的主要区别。