容器技术概述

容器是一种轻量级的、操作系统级别的虚拟化技术,它允许我们在资源隔离的进程中运行应用程序及其依赖项。运行应用程序所需的所有必要组件都可以打包为单个可以复用的映像。当映像被执行时,它将运行在一个孤立的环境中,不会与宿主操作系统共享内存、CPU和磁盘。这样,就保证了容器内的进程不能看到容器外的任何进程。

操作系统与容器虚拟化

虚拟机和容器之间的区别

虚拟机通常包括整个操作系统和应用程序,同时,还需要运行在它们之上的虚拟机管理程序来控制虚拟机。

由于它们包括了操作系统,所以它们的大小多达几千MB。使用虚拟机的一个缺点是:它需要几分钟的时间才能启动操作系统和初始化它们托管的应用程序。与之相比,容器是轻量级的、大部分是MB大小的。与虚拟机相比较,容器的性能更好,并且可以立即启动。

虚拟机和容器的对比

容器解决了什么问题?

当应用程序的计算环境发生变化时,许多问题都会显现,尤其是当开发人员将代码从开发环境推送到测试环境时。例如:开发人员在Windows中编写应用程序代码,但上层环境(dev/test/stage)是基于Linux的。在这种情况下,当操作系统发生变化时,某些功能可能会停止工作。所以,当配套的软件环境不一样的时候,间歇性故障的几率会更高。

正如Docker的创造者Solomon Hykes所说:“当你使用Python 2.7进行测试,然后在生产环境中使用Python 3,就很可能会发生一些奇怪的事情;或者当你依赖某个特定版本的SSL库的行为,但是却安装了另一个时;或者当你在Debian上运行测试,但是在RedHat上进行生产时,也可能发生各种奇怪的事情。”

这种变化可能不仅仅是计算环境的变化,也可能是网络环境的变化。Hykes还补充说:“当网络拓扑结构不同,或者安全策略和存储不同,同时软件必须在其上运行的时候(也可能发生各种奇怪的事情)。

容器的优点

  1. 敏捷环境:容器技术的最大优势是创建速度比VM实例更快。它轻量化的内存占用使得它在在性能和存储方面的开销更小。
  2. 提高生产力:容器通过消除跨服务的依赖和冲突来提高开发人员的生产力。每个容器都可以被看作是一个不同的微服务,因此可以独立升级,而不需要考虑它们的同步。
  3. 版本控制:容器的每个镜像都可以进行版本控制,因此可以跟踪不同版本的容器、观测不同版本之间的差异等。
  4. 计算环境可移植性:容器封装了运行应用程序所必需的所有相关细节,如应用程序依赖和操作系统。这有助于简化容器映像从一个环境到另一个环境的移植难度。例如,可以使用相同的镜像在 Windows/Linux 或 dev/test/stage 环境中运行。
  5. 标准化:大多数容器基于开放标准,并且可以运行在所有主要的Linux发行版和Windows上。
  6. 安全: 容器将一个容器的进程与另一个容器以及底层基础架构隔离开来。因此,一个容器中的任何升级或更改都不会影响另一个容器。

容器的缺点

  1. 复杂性增加:使用n个容器运行同一个应用程序,复杂性因素也随之增加。在生产环境中管理这么多的容器可是一项具有挑战性的任务。像Kubernetes和Mesos这样的工具可以用来管理n个容器。
  2. 本机Linux支持:大多数容器技术(如Docker)都基于Linux容器(LXC)。因此,与在Linux上原生地运行这些实例相比,在微软环境下运行这些容器有点笨重,它们的日常使用会带来复杂的问题。
  3. 不成熟: 容器技术在市场上相对较新,因此市场化的时间较慢。可用资源的数量对于开发人员来说是有限的,如果遇到一些问题,可能需要一些时间才能找出解决方案。

容器分类

操作系统容器: 根据维基百科,“操作系统级虚拟化是一种计算机虚拟化方法,其中操作系统的内核允许存在多个孤立的用户空间实例,而不是一个,这样的实例有时称为容器,或者虚拟化引擎(VE),或者监狱(FreeBSD jail或chroot jail),从正在运行的程序的角度来看,它们可能看起来就像真正的计算机。

如上所述,它们共享主机操作系统的内核,但提供用户空间隔离。可以安装、配置不同的应用程序,并且可以像我们在宿主操作系统上运行应用程序一样运行。同样,分配给容器的资源只对该容器可见。任何其他来宾操作系统映像将无法访问另一来宾操作系统的资源。

当需要配置一组具有相同配置的操作系统时,它们非常有用。因此,它有助于创建模板,这可以用来创建与另一个操作系统类似的风格。

我们可以利用LXC,OpenVZ,Linux VServer,BSD Jails和Solaris zones技术创建OS容器。

操作系统容器与应用程序容器

应用程序容器:根据维基百科,“应用程序虚拟化是一种软件技术,它将计算机程序从其执行的底层操作系统中进行封装。完全虚拟化的应用程序仍然像以前一样被执行,但它并不是按照传统的意义来安装的。应用程序在运行时表现得像直接与原始操作系统及其管理的所有资源进行交互,但可以在不同程度上进行隔离或沙箱化。

在这种情况下,术语“虚拟化”是指被封装的工件(应用程序),它与硬件虚拟化中的含义完全不同,它指的是被抽象的物件(物理硬件)。

应用程序容器被设计为将服务作为单个进程打包和运行,而在OS容器中,可以运行多个服务和进程。

像Docker和Rocket这样的容器技术就是应用程序容器的例子。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之结构型模式

本文已收录于专栏 《设计模式》 目录 概念说明大话设计模式结构型模式 各模式详解适配器模式(Adapter Pattern)桥接模式(Bridge Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Patt…

刘汝佳samaのDLX详解

引入 精确覆盖问题(Exact Cover Problm) 有一些由整数 1~n 组成的集合 S 1 , S 2 , S 3 , … , S r S_1,S_2,S_3,…,S_r S1​,S2​,S3​,…,Sr​, 要求选择若干个集合 S i S_i Si​,使1~n 的每个整数恰好在一个集合中出现。比如&#xff0c…

基于JSP+Servlet的文件上传与下载

基于JSPServlet的文件上传与下载 一、系统介绍二、功能展示1.项目骨架2.单文件上传3.多文件上传4.下载文件1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的文件上传与下载案例 项目架构:B/S架构…

Flutter学习四:Flutter开发基础(五)资源管理

目录 0 引言 1 资源管理 1.1 指定 assets 1.2 Asset 变体(variant) 1.3 加载 assets 1.3.1 加载文本 1.3.2 加载图片 1.3.2.1 声明分辨率相关的图片 1.3.2.2 加载图片 1.3.3 依赖包中的资源图片 1.3.4 打包包中的 assets 1.3.5 特定平台 as…

【Spring】— Spring MVC复杂数据绑定

目录 复杂数据绑定1.绑定数组2.绑定集合 复杂数据绑定 实际项目开发中,除了简单数据类型外,还会经常遇到一些比较复杂的数据绑定问题,比如数组的绑定、集合的绑定,接下来将具体讲解一下数组绑定和集合绑定的使用。 1.绑定数组 …

adb 工具

小白初如嵌入式的坑,对于串口调试工具,之前一直只知道有SecureCRT这一种方式; 但是在最近一次的使用过程中,发现抢占资源的情况出现,两个进程之间相互打架,这个时候需要 查看top(嵌入式板子资…

此导入从不用作值,必须使用 “import type“ ,因为 “importsNotUsedAsValues“ 设置为 “error“。

前言 最近电脑更新了一次系统,重启后在 VsCode中打开项目 ,发现原本正常的代码出现了一堆语法提示。网上搜了一下,没有找到关于此问题的回答,不知道我是不是第一个遇到的。在此记录一下这次的经历,如果有其他人遇到&a…

数据结构--队列的基本概念

数据结构–队列的基本概念 队列的定义 队列其实是一种受限制的线性表 队列(Queue):是 只允许在一端进行插入或删除操作 \color{red}只允许在一端进行插入或删除操作 只允许在一端进行插入或删除操作的线性表 重要术语: 队头、队尾、空队列 队列的特点: 先进先出 \…

5.4.1 虚拟专用网VPN

5.4.1 虚拟专用网VPN 我们已经学习了因特网的路由协议(5.3.1 因特网的路由协议(一)、5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议、5.3.3 因特网的路由协议(三)OSPF协议、5.3.4 因特…

ModaHub魔搭社区:向量数据库Milvus性能调优教程(二)

目录 索引 其他 存储优化 常见问题 索引 向量索引的基本概念请参考 向量索引概述。 选择合适的索引需要在存储空间、查询性能、查询召回率等多个指标中权衡。 FLAT 索引 FLAT 是对向量的暴力搜索(brute-force search),速度最慢&#…

CMake使用gRPC(Protobuf) 的c++ demo

gRPC的命令参数里, 1. 如果要用pacakge,需要--proto_path的参数, 例如helloworld.proto的绝对路径是 /home/user/grpc_demo_ws/grpc_demo/hello_world/proto/helloworld.proto 在helloworld.proto里面的pacakge是 package grpc_demo.hello_w…

模仿QQ之右键菜单

参考:QT多级菜单 - 知乎 (zhihu.com) 运行效果图: 关键代码: void personMenu::contextMenuEvent(QContextMenuEvent *event) {//我完全可以写出一个代码生成器来把这些代码生成出来。parentnew QMenu(this);parent->addAction(QIcon(…