容器化部署引擎Docker

简介: 本节介绍Docker技术,解决微服务部署中环境不一致、依赖冲突等问题。Docker通过打包应用及依赖,实现跨环境无缝迁移;利用容器隔离机制,确保各服务互不干扰。相比虚拟机,Docker更轻量、启动更快、资源占用少,是现代应用交付的首选方案。

在前面的学习中,我们掌握了微服务的服务注册与发现(nacos)、配置中心(nacos)、远程服务调用(feign)、网关(gateway),同时借助Idea编译工具多次完成本地服务启动、部署和验证。但是我们假想下面场景:
● 开发人员A写好的代码-->开发人员B的电脑上运行,B必须保证跟A一样的系统环境(JDK/MySQL等)
● 系统代码部署从DEV-->TEST-->PRE-->PROD,每个环节都必须保证一样的系统环境(同上)
● 分布式系统中依赖组件非常多,组件与组件之间的部署往往会产生一些冲突(端口/依赖/环境等)

这样的版本一致保证会耗费我们大量的时间和精力,同时万一有问题产生,我们也很难第一时间考虑到是因为版本不一致导致的问题。因此我们需要一套可以平滑切换的部署引擎,这就是本节我们学习的Docker。
1.认识Docker
1.1 什么是Docker
1-Docker解决依赖兼容
Docker为了解决依赖的兼容问题的,采用了两个手段:
● 【依赖打包】将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
● 【部署隔离】将每个应用放到一个隔离容器去运行,避免互相干扰

此时打包好的应用包(不再是原来的jar包)既包含应用本身,也包含应用所需的Libs、Deps,无需在操作系统上安装,自然不存在应用间的兼容问题。
虽然解决了不同应用的兼容问题,但是开发、测试等多个环境,不同的操作系统版本之间也会有差异,这个不解决一样会面临开篇所说的问题,想了解这个必须先了解下操作系统的结构。
2-Docker解决操作系统环境差异
以一个ubuntu操作系统为例,如下:

其结构包括:

  1. 计算机硬件:如CPU、内存、磁盘等
  2. 系统内核:所有Linux发行版内核都是Linux,如CentOS/Ubuntu/Fedora等,内核与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
  3. 系统应用:操作系统本身提供的应用、函数库。这些函数是对内核指令的封装,使用更方便。
    应用与计算机交互的流程大致如下:
  4. 应用(外部应用如redis/web应用等)调用操作系统应用(函数库),实现各种功能
  5. 系统函数库是对内核指令集的封装,会调用内核指令
  6. 内核指令操作计算机硬件
    如Ubuntu和CenOS虽然都是基于Linux内核,无非是系统应用不同,提供函数库有差异,如下:

但就是这种差异,当一个Ubuntu版本的MySQL尝试安装到CentOS系统时,MySQL还是调用的Ubuntu函数库,会出现找不到或者不匹配的情况,从而导致报错,即出现我们上面提到的系统环境差异导致的不兼容问题:

我们来看下Docker是如何处理这种环境间的差异的:
● Docker将应用程序与所需调用的系统(如Ubuntu)函数库一起打包
● Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统Linux内核来运行

3-小结
Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
● Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
● Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题?
● Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:
● 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
● 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
● 启动、移除都可以通过一行命令完成,方便快捷

1.2 Docker和虚拟机的区别
如果对虚拟机有了解的读者(也可以在一个操作系统中运行另一个操作系统,从而达到保护系统中的应用),那么Docker听起来也是这样的环境隔离,二者有什么区别?为什么现在主流是使用Docker呢?
虚拟机:在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
Docker:仅是封装函数库,并没有模拟完整的操作系统,即共享同一个底层硬件设备。

相较于传统虚拟机而言,二者主要区别如下:
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个
总结如下:
● docker是一个系统进程;虚拟机是在操作系统中的操作系统
● docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

相关文章
|
8月前
|
人工智能 安全 Java
【程序员必看】做Java,这一个AI插件就够了
飞算JavaAI插件助力开发者高效开发,覆盖需求分析、设计、编码全流程。智能分析、一键生成代码,大幅提升开发效率,让Java开发更轻松便捷。
|
5月前
|
机器学习/深度学习 存储 传感器
面向课堂与自习场景的智能坐姿识别系统——从行为感知到可视化部署的完整工程【YOLOv8】
本系统基于YOLOv8实现课堂与自习场景下的智能坐姿识别,支持标准坐姿与驼背等不良姿态的实时检测。结合PyQt5开发图形界面,提供图片、视频、摄像头多模式输入,具备高精度、低延迟、易部署等特点,适用于智慧校园、健康办公等场景,助力行为规范与健康管理。
350 5
面向课堂与自习场景的智能坐姿识别系统——从行为感知到可视化部署的完整工程【YOLOv8】
|
5月前
|
消息中间件 NoSQL Java
SpringCloud
本课程基于黑马程序员2025版SpringCloud实战教学,聚焦高频面试与实际应用,涵盖微服务、RabbitMQ、Redis高级、ElasticSearch等核心内容,结合项目实战与AI模块优化,助力掌握企业级开发技能。资料详尽,尊重原创,侵权必究。
|
5月前
|
存储 算法 BI
xxljob本地运行
本文介绍XXL-JOB分布式任务调度的使用教程。包含源码获取、服务端部署(数据库导入、配置修改、启动访问)、客户端运行与执行器注册,以及调度任务配置和路由策略详解。通过实际操作演示任务创建、参数设置、手动执行与日志查看,帮助开发者快速掌握XXL-JOB核心功能,实现定时任务的可视化管理和高效调度。(238字)
|
5月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题,结合thread、watch、jad等指令定位阻塞线程与异常代码,实现无需重启服务的热更新修复,并通过profile生成火焰图进行性能分析,提升线上问题排查效率。
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
1802 2
|
人工智能 Kubernetes Ubuntu
linux配置IP
linux配置IP
4481 1
|
机器学习/深度学习 人工智能 自然语言处理
AI与代理IP:携手共创美好未来
在数字化浪潮中,人工智能(AI)与代理IP技术的融合正推动网络环境的智能化发展。AI凭借深度学习、自然语言处理等能力,结合代理IP的匿名性和灵活性,为网络安全、数据分析、内容分发等领域带来革命性变革。本文探讨两者协同作用,通过案例和代码展示其如何共同优化网络性能、保护隐私并提升效率,展望未来智能化、安全化的网络环境。 AI与代理IP的融合不仅提升了网络访问的效率与稳定性,还为智能风控、智能客服及全球内容分发网络(CDN)等应用提供了坚实支持。AI优化代理IP选择与调度,代理IP则保障AI应用的安全与隐私,二者相辅相成,共同推动全球化、智能化的发展趋势。
486 7

热门文章

最新文章