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

docker镜像解决的一些问题

1 概述

Docker镜像技术通过创新性的设计,彻底解决了应用交付领域的核心痛点,已经成为已成为云原生时代的事实标准。其核心价值在于​​通过标准化封装实现"一次构建,处处运行"​​,从根本上改变了软件交付的生命周期。

2 解决的问题

2.1 打包问题

一个可执行程序包,可能是各种各样的语言编写出来的,对环境有不同的要求。比如Java语言的jar包,需要有JVM环境才能够执行;Python的代码包,需要安装Python和用pip安装一系列依赖包环境才能执行。

把这个可执行包部署到不同的操作系统时,根据不同的操作系统的要求,需要做一些不同的环境变量等配置。比如Java环境在Windows里配环境变量和在Linux环境配环境变量的方式不一样,在部署jar包的时候,在不同的环境上部署的脚本要写成不一样的。

在执行可执行程序包的时候,不同语言、不同操作系统,需要提供不同的启动脚本。

docker镜像则创造性地把可执行包所依赖的环境、配置、启动脚本全部打包成一个镜像包,里面的环境甚至还包含了一整套Linux的目录和文件,额外再根据需要加上相关的依赖包、配置,指定好启动脚本。这样的一个包,不管在windows、Linux、iMac,还是在物理机、虚拟机、各种云平台,都可以用一个简单的命令就可以运行。这代表着可以很轻松地在各个环境中迁移,真正做到打包一次,各个平台执行。

2.2 部署问题

要部署可执行包,除了准备好可执行包,还需要根据不同的操作系统,安装相关的依赖,进行相关的配置,准备相关的启动脚本等,然后再安装可执行包、执行可执行包,完成部署。

由于docker镜像把操作系统等环境、需要的依赖、配置、启动脚本等都打包到镜像包里了,原来需要根据不同语言、不同操作系统等进行的一系列准备工作全都消失了,只剩下拉取镜像包和执行镜像包两个动作,这样部署就非常简单。

2.3 资源利用问题

传统的部署,为了在一台物理机上部署多应用,一般采用虚拟机的方式。虚拟机由于虚拟化管理程序,在Linux上运行Virtual Machine Manager(VMM),在windows上运行Hypervisor,这些虚拟化管理程序需要占用10%~30%的CPU、内存等资源。而Docker是通过linux的Cgroups、Namespace的配置来进行隔离,属于内核级的虚拟化,占用的资源比虚拟机节省80%以上,整体性能可以提高1~2个数量级。

2.4 更新问题

在需求变动后,打包、部署等都需要更新。由于docker的镜像包是一层层叠加而成的,如果要修改的话,只需要修改某些层或者增减某些层,然后重新打包即可。这些内容一般通过dockerfile来进行维护,这些改动只需要在dockerfile上调整,然后重新打包即可,非常的方便。

镜像包更新后,docker上拉取包也比较高效,只需要拉取更新的层即可。docker的创建和删除容器的速度也很快,删除掉老的容器,再创建和启动新版本镜像的容器即可。当部署的服务器比较多,还可以用相关的调度工具,逐步把所有的应用都更新了。

http://www.xdnf.cn/news/18068.html

相关文章:

  • 双重调度(Double Dispatch):《More Effective C++》条款31
  • [Linux] Linux网络管理
  • 16-集合的Stream编程
  • 宋红康 JVM 笔记 Day03|内存结构概述、类加载器与类的加载过程、类加载器分类
  • 深入解析 @nestjs/typeorm的 forRoot 与 forFeature
  • C++面试题及详细答案100道( 31-40 )
  • 算法题Day2
  • Python 类元编程(元类的特殊方法 __prepare__)
  • MixOne:Electron Remote模块的现代化继任者
  • 【低成本扩容】动态扩容实战指南
  • 选择式与生成式超启发算法总结
  • 《设计模式》代理模式
  • 基于Python的电影评论数据分析系统 Python+Django+Vue.js
  • 【运维心得】三步10分钟拆装笔记本键盘
  • Langfuse2.60.3:独立数据库+docker部署及环境变量详细说明
  • 数据清洗处理
  • 【数据结构】深入理解单链表与通讯录项目实现
  • 【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
  • 典型 RAG实现:NFRA智能问答系统实战的总结与反思
  • 数据结构:迭代方法(Iteration)实现树的遍历
  • ubuntu更新chrome版本
  • 平滑方法(smoothing)
  • 零知开源——基于STM32F407VET6的TCS230颜色识别器设计与实现
  • 两个简单的设计模式的例子
  • 【轨物方案】预防性运维:轨物科技用AI+机器人重塑光伏电站价值链
  • JavaScript 核心语法与实战笔记:从基础到面试高频题
  • NLP:Transformer模型构建
  • 驱动开发系列63 - 配置 nvidia 的 open-gpu-kernel-modules 调试环境
  • ES操作手册
  • 在本地部署Qwen大语言模型全过程总结