当前位置: 首页 > news >正文

【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 就是容器化的解决方案和平台。容器是一种虚拟化技术,和虚拟机类似,也是产生一个独立的环境,我们可以在这个环境中运行独立的应用程序。但是和虚拟机不同的是,它不需要在容器中运行一个完整的操作系统,而是使用宿主机的操作系统。

请添加图片描述
图片来源于网络

同时,因为需要的资源更少,所以可以在物理服务器上运行更多的容器,这样就可以充分利用服务器的资源,减少资源的闲置和浪费。如此对比,我们一台物理服务器上只能运行几个虚拟机,但是却可以启动上百个容器,这就是容器化技术带来的优势以及和虚拟机的主要区别。

http://www.dtcms.com/a/354062.html

相关文章:

  • 全球协作无障碍:cpolar+Nextcloud实现跨国文件共享
  • 通过远程桌面横向移动(破解凭证)
  • 【51单片机】【protues仿真】 基于51单片机出租车计价器系统
  • 三轴云台之动态性能篇
  • 数字化时代催生变革,楼宇自控系统成为建筑管理新潮流的引领者
  • ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况
  • 北斗导航|接收机自主完好性监测算法综述
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • CAS 浅析
  • 视觉语言模型应用开发——Qwen 2.5 视觉语言模型的零样本学习能力在多模态内容审核中的实践研究
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 阿里云——云存储与数据库服务
  • RustFS架构解密:零GC设计如何实现12μs级存储延迟?
  • 【lucene】SpanNearQuery中的slop
  • 【lucene】SpanFirstQuery的end参数
  • 【Python】包管理,弄明白import,package,module
  • 复杂网络环境实测:主流云VR产品性能对比——平行云LarkXR突破网络限制 引领云VR技术新高度
  • 记住密码管理器
  • 在Eclipse中配置Tomcat
  • 终端美化:Windows11 下 安装 WSL 并使用好看的的 zsh 主题
  • 【图论】最短路算法
  • 802.11ax上行OFDMA接入机制:技术原理与实现细节
  • 流水线用到的Dockerfile和构建脚本build.sh
  • Python电影票房预测模型研究——贝叶斯岭回归Ridge、决策树、Adaboost、KNN分析猫眼豆瓣数据
  • MYSQL---存储过程
  • 【轨物方案】“无人值守”光伏电站智能运维解决方案,赋能绿色能源高效运营
  • 正则表达式 —— 贪婪与非贪婪
  • 汽车盲点检测系统的网络安全分析和设计
  • 【Linux学习】正则表达式学习记录
  • 【鸿蒙开发001】上下翻页-翻书效果实现【可复用】