Docker(一)之 应用(Application)部署容器化的演进之路

news2024/11/26 16:45:45

前言

容器化技术可以帮助企业更大化资源利用,同时帮助项目相关人员(开发、运维、测试、安全等)以最小的成本实现项目快速上云部署,掌握容器化管理工具Docker,就掌握了云原生最基础、最核心技术之一

应用(Application)部署容器化的演进之路

一、应用程序部署痛点

1.1 应用程序部署流程

举例:部署一个JAVA编程语言开发的Web应用,以War包放入Tomcat方式部署。

  • 部署过程如下:
    • 服务器配置运行环境:JAVA代码运行环境,例如JDK或JRE
    • 服务器上安装Tomcat web中间件,用于运行War包
    • 把JAVA Web对应的War包放置于Tomcat对应目录
    • 在服务器上启动Tomcat应用
    • 可选:涉及数据库(MySQL)或缓存系统(Redis)等都需要逐一部署。

1.2 应用程序扩缩容

  • 涉及多台服务器部署相同的上述环境
  • 痛点:上述环境部署都要重新实施一遍,较浪费人力与物力还有时间成本

1.3 应用程序多环境部署

  • 环境:本地测试环境、预发布环境、生产环境
  • 在本地测试环境运行没有问题,但在预发布环境中出现了问题,甚至上面2种环境都没有问题,到了生产环境就有问题了,某个应用程序起不来了等。
  • 需求:一次成功,可到处运行。

二、 计算资源应用演进过程

2.1 早期使用物理服务器的痛点

在这里插入图片描述

  • 从物理服务器自身管理角度

    • 物理服务器环境部署人力成本大,特别是在自动化手段不足的情况下,依靠人肉运维的方式解决。
    • 当物理服务器出现宕机后,服务器重启时间过长,短则1-2分钟,长则3-5分钟,有背于服务器在线时长达到99.999999999%标准的要求
    • 物理服务器在应用程序运行期间硬件出现故障,解决较麻烦
    • 物理服务器计算资源不能有效调度使用,无法发挥其充足资源的优势
  • 从物理服务器部署应用程序角度

    • 物理服务器环境部署浪费时间,没有自动化运维手段,时间是成倍增加的
    • 在物理服务器上进行应用程序配置变更,需要重新实施前述步骤

2.2 使用虚拟机优点与缺点

在这里插入图片描述

2.2.1 使用虚拟机优秀点

  • 从虚拟机本身管理角度

    • 虚拟机较物理服务器轻量,可借助虚拟机模板实现虚拟机快捷生成及应用
    • 虚拟机中部署应用与物理服务器一样可控性强,且当虚拟机出现故障时,可直接使用新的虚拟机代替
    • 在物理服务器中使用虚拟机可高效使用物理服务器的资源
    • 虚拟机与物理服务器一样可达到良好的应用程序运行环境的隔离
  • 从在虚拟机中部署应用程序角度

    • 在虚拟机中部署应用,容易扩容及缩容实现
    • 与物理服务器相比较,当部署应用程序的虚拟机出现宕机时,可以快速启动,时间通常可达秒级,10秒或20秒即可启动,应用程序可以继续提供服务
    • 应用程序迁移方便

2.2.2 使用虚拟机缺点

  • 虚拟机管理软件本身占用物理服务器计算资源较多,例如:VMware Workstation Pro就会占用物理服务器大量资源,所以一般在企业应用中使用KVM虚拟机较多。
  • 虚拟机底层硬件消耗物理服务器资源较大,例如:虚拟机操作系统硬盘,会直接占用大量物理服务器硬盘空间
  • 相较于容器技术,虚拟机启动时间过长,容器启动可按毫秒级计算
  • 虚拟机对物理服务器硬件资源调用添加了调链条,存在浪费时间的现象,所以虚拟机性能弱于物理服务器
  • 由于应用程序是直接部署在虚拟机硬盘上,应用程序迁移时,需要连同虚拟机硬盘中的操作系统一同迁移,会导致迁移文件过大,浪费更多的存储空间及时间消耗过长

2.3 使用容器的优点与缺点

在这里插入图片描述

2.3.1 使用容器的优点

  • 不需要为容器安装操作系统,可以节约大量时间
  • 不需要通过手动的方式在容器中部署应用程序的运行环境,直接部署应用就可以了
  • 不需要管理容器网络,以自动调用的方式访问容器中应用提供的服务
  • 方便分享与构建应用容器,一次构建,到处运行
  • 毫秒级启动
  • 容器可直接使用物理服务器硬件资源,物理服务器硬件资源利用率高,性能较好。

2.3.2 使用容器的缺点

对于对使用物理服务器、虚拟机已成为习惯的小伙伴来说,容器化可控性不强,最直观的就是对容器管理访问,总想按物理服务器或虚拟机的方式去管理它,其实容器与物理服务器、虚拟机管理方式上有着本质的区别的,最好不要管理。

三、 What is a Container?

3.1 容器定义

在这里插入图片描述

  • 虚拟机

    • 采用虚拟化技术手段实现物理服务器计算资源打包的方式,为应用程序提供类物理服务器运行环境
    • 能够实现应用程序与应用程序之间的隔离
    • 使用自动化技术部署应用程序及应用程序迁移较方便
    • 可横向扩展
  • 容器

    • 容器是轻量级物理服务器计算资源的打包方式,即轻量级虚拟机,为应用程序提供类虚拟机运行环境。
    • 可在物理服务器中实现高密度部署
  • 容器与虚拟机对比

对比属性容器(Container)虚拟机(VM)
隔离性基于进程隔离提供资源的完全隔离
启动时间毫秒级或秒级秒级或分钟级
内核共用宿主机内核使用独立内核
占用资源MB级GB级
系统支持容量(同级别)支持上千个容器几十台虚拟机

3.2 容器功能

  • 安装容器管理工具,例如Docker,Containerd等,把应用以容器化的方式运行

  • 应用在自己的容器中运行,实现应用程序间隔离

  • 应用程序运行的容器可以生成应用程序模板文件,即容器镜像(Image),其不可变,即为云原生代表技术基础设施不可变,且可以在其它的物理服务器中运行。

3.3 容器解决了什么问题

  • 快速交付和部署应用 (镜像与容器)
  • 资源的高效利用和隔离 (在物理机上实现高密度部署)
  • 便捷迁移和扩缩容(一次构建,多处运行)

四、使用容器步骤

  • 安装容器管理工具

    • Docker (Docker公司)
    • Containerd (2017年docker捐给CNCF云原生计算基金会)
    • Pouch (阿里云)
  • 搜索/下载容器镜像(Image)

  • 使用容器镜像生成容器(容器镜像中的应用程序启动)

  • 终端用户(互联网用户或其它应用程序)访问

  • 迁移部署(可直接把正在运行的容器打包成新的容器镜像,在其它主机上运行即可。)

Containerd (2017年docker捐给CNCF云原生计算基金会)

  • Pouch (阿里云)

  • 搜索/下载容器镜像(Image)

  • 使用容器镜像生成容器(容器镜像中的应用程序启动)

  • 终端用户(互联网用户或其它应用程序)访问

  • 迁移部署(可直接把正在运行的容器打包成新的容器镜像,在其它主机上运行即可。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot整合hibernate,gradle,达梦8数据库,实现增删改查的功能

1.新建一个springboot项目,选择gradle管理 2.gradle添加以下依赖,gradle版本7.4 dependencies {// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webimplementation org.springframework.boot:spring-boot-starter…

Pytorch深度强化学习1-3:策略评估与贝尔曼期望方程详细推导

目录 0 专栏介绍1 从一个例子出发2 回报与奖赏3 策略评估函数4 贝尔曼期望方程5 收敛性证明 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者理解并快速上手开发。同时,辅…

ZUH-ACDM-网络-网闸-根据论坛的案例进行分析

H3C技术论坛:https://zhiliao.h3c.com/Theme/details/64343 文章目录 需求:源地址:172.16.1.33访问目的地址:192.168.4.233确认确定是主机确认外端机连接地址172.16.1.254确认内端机到源地址172.16.1.33是通的确认流量走向/路由第…

基于matlab使用高斯混合模型检测和计数视频序列中的汽车(附源码)

一、前言 此示例演示如何使用基于高斯混合模型 (GMM) 的前景检测器检测和计数视频序列中的汽车。 检测和计数汽车可用于分析交通模式。检测也是执行更复杂的任务(例如按类型跟踪或分类车辆)之前的第一步。 此示例演示如何使用前…

prometheus描点原理

大家好,我是蓝胖子,关于prometheus的入门教程有很多,拿我之前学prometheus的经历来讲,看了很多教程,还是会对prometheus的描点以及背后的统计原理感到迷惑,所以今天我们就来分析下这部分,来揭开…

AIGC - Stable Diffusion 的 墨幽人造人 模型与 Tag 配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131565068 Stable Diffusion的模型网站 LiblibAI:https://www.liblibai.com 墨幽人造人网址:https://www.liblibai.com/m…

BUU [vnctf2023]电子木鱼

BUU [vnctf2023]电子木鱼 先看看题目,点不了。 看看源码。Rust整数溢出。 在 Rust 中,整数类型默认是有符号整数类型,意味着这些整数类型可以表示正数和负数。对于有符号整数类型,最高位用来表示符号,0 表示正数&…

如何在Microsoft Excel中快速创建等比序列

Excel 中的填充句柄允许你通过拖动句柄自动填充行或列中的数据列表(数字或文本)。这可以在大型工作表中输入顺序数据时节省大量时间,并提高工作效率。 如果数据遵循某个模式或基于其他单元格中的数据,则可以使用“自动填充”功能…

TiDB(7):技术内幕之存储

1 引言 数据库、操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石。其中数据库更靠近应用层,是很多业务的支撑。这一领域经过了几十年的发展,不断的有新的进展。 很多人用过数据库,但是很少有人实现过一个数据库&a…

基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习三)

设备节点功能模块设计 在本文节点功能设计中,拥有用于检测温度的温度传感器、监测湿度的湿度传感器以及 调节空调温度的IR红外发射器,另留有部分外接扩展串口,因此可能会在实际使用中扩展更多的设备模块与功能。 可见,如何高效地…

2023年03月份青少年软件编程Python等级考试试卷三级真题(含答案)

2023-03 Python三级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1.十进制数111转换成二进制数是?( )(2分) A.111 B.1111011 C.101111 D…

青岛大学_王卓老师【数据结构与算法】Week04_10_线性表的应用3_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

Spring Boot中的度量指标及使用方法

Spring Boot中的度量指标及使用方法 简介 Spring Boot是目前流行的Java后端框架之一,它提供了许多有用的功能,其中包括度量指标。度量指标可以帮助我们监测应用程序的性能、稳定性和可靠性,以便及时发现并解决问题。本文将介绍Spring Boot中…

使用Jetpack Compose集成WebView

在Android开发中,WebView是一个非常重要的组件,它可以用来显示网页或加载在线内容。然而,在Jetpack Compose(Google推出的新的UI工具包)中,目前没有内置的WebView Composable。但不必担心,你可以…

【数据算法与结构】栈和队列课后习题

题目(共两道) 题目1 Qestion: 根据下面代码片段写出运行下列程序段的输出结果(元素类型为char) 题目代码片段 void main() {Stack S; char x,y; InitStack(S); // 初始化栈x ‘e ‘; y ‘c’; Push(S, ‘h‘); Push(S, ‘r‘); Push(S,y);Pop(S,x);…

了解Java可见性的本质

作者:早恒 前一段时间重温了伪共享(false sharing)问题,了解到深处有几个问题一直想不明白,加上开发过程中遇到volatile时总觉得理解不够透彻,借着这次脑子里这几个问题,探究下Java可见性的本质…

【C语言】深入学习函数(万字)

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

文件上传+文件包含组合式getshell

实验目的 通过本实验,了解文件包含的特点,掌握图片马的执行方法,文件上传文件包含组合式getshell。 实验环境 操作机:kali 靶机:Windows 2007 用户名/密码:college/360College 实验地址:http…

jenkins部署springboot项目

jenkins部署springboot项目 1、创建一个项目 上传到gitee 1、创建项目 2、上传到git 2、jenkins创建一个pipeline项目 Pipeline简介 1)概念 Pipeline,简单来说,一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者…

优化chatGPT提示词的Prompts

你扮演一个专业的chatGPT提示词工程师,我将为您提供我的提示词,它用三个反引号分隔,请根据openai发布的提示词标准和优化技巧,改进和优化我的提示词,让chatGPT能够更好的理解。 我的第一个提示词是:“”“……