通俗讲解:什么是容器?为什么我们要使用它?-程序员宅基地

技术标签: 云原生  Docker  虚拟化  容器技术  Kubernetes  

作为程序员,让我们回忆我们每天从事的熟悉得不能再熟悉的软件开发工作:

在本地搭好开发环境,进行开发工作,完了进行单元测试,把开发好的代码部署到测试系统,重复测试,最后部署到生产系统。

在这里插入图片描述

我们不可避免地会遇到这种情况:同样的代码,运行环境发生变化之后无法正常运行。

这种运行环境的变化可以分成不同的维度:

比如代码从程序员的笔记本电脑切换到测试服务器,或者从一台物理服务器切换到公有云/私有云上;
代码依赖的运行库版本发生变化,比如开发时用的python2.7, 但生产机上用的python3
也可能是代码运行的操作系统发生了变化,比如开发及用的ubuntu,生产机用的redhat

程序员除了投入时间在应用程序本身开发上之外,还需要花费额外的精力去处理这种环境或者说infrastructure问题,有的时候很头痛。

作为一个应用程序开发人员,我对底层的这些环境问题不感兴趣,有没有一种办法能使的我不去考虑它们呢?有,使用容器技术。

什么是容器?我们可以从现实生活中容器的概念来类比。
在这里插入图片描述
简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。

为什么我们要使用容器?那得看看它带来的好处。
在这里插入图片描述

既然容器封装了所有运行应用程序所必需的相关的细节,比如应用依赖以及操作系统,这就使得镜像从一个环境移植到另外一个环境更加灵活。比如,同一个镜像可以在Windows或Linux,开发、测试或生产环境中运行。

标准化:大多数容器实现技术基于开放标准,可以运行在所有主流 的Linux 发行版、Microsoft等操作系统上。

容器镜像提供版本控制,这样就可以追踪不同版本的容器,监控版本之间的差异。

容器隔离带来的安全性:一台宿主机上可以运行多个容器,但这些容器内的进程是相互隔离的,且无法相互感知。其中一个容器的升级或者出现故障,不会影响其他容器。

相比虚拟机来说更加轻量级:

虚拟机和容器的目的类似,都致力于对应用程序及其关联性进行隔离,从而构建起一套能够不依赖于具体环境而运行的应用单元。
在这里插入图片描述

虚拟机是在物理服务器的上层用软件来模拟特定的硬件系统。Hypervisor位于硬件和系统之间,是创建虚拟机必须的一个部分。虚拟机软件必须使用Hypervisor作为一个中间层,是虚拟机技术的核心,当宿主操作系统启动虚拟机时,会通过hypervisor给虚拟机分配内存,CPU,网络和磁盘等资源,并加载虚拟的操作系统,因而需要消耗宿主机大量的物理资源。

一台宿主机上运行的多个容器化应用共享这台宿主机操作系统的内核,因而不需要虚拟机技术的hypervisor中间层,因而同虚拟机技术相比,更加轻量化,启动速度更快。

为什么这几年来容器技术一下子流行了起来?

随着微服务架构应用开发的普及,很多IT公司纷纷推出了基于微服务架构的新产品,就连SAP这种传统的企业管理软件巨头也发布了很多基于微服务的解决方案,比如Engagement center, revenue cloud等等。
在这里插入图片描述

起初微服务提供商倾向于把微服务部署在虚拟机里,这也能实现微服务的隔离性,但无法进行快速扩展,因为前面介绍过的虚拟机的实现原理,其启动需要耗费一些时间,无法立即对瞬时突增的负载或者流量做出反应。并且从成本考虑,使用传统的虚拟机技术,为了实现隔离性,每个应用或者说微服务都必须运行在一个虚拟机里,这种重复和浪费的操作系统和资源的分配,可以通过容器技术来避免,从而大大减少了云服务提供商对硬件的投入,节省了云服务中心的成本。

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/i042416/article/details/85012912

智能推荐

php invalid request,PHP本地服务器请求无效(意外的EOF)-程序员宅基地

文章浏览阅读540次。这是一个已知的错误。[2011-12-08 15:01 UTC] lolautruche at gmail dot comDescription:------------From time to time, built-in server with router script logs this kind of stuff :[Thu Dec 8 13:39:29 2011] 127.0.0.1..._invalid request (unexpected eof)

东方财富四千余支股票2023年度上半年收盘价格走势涨跌可视化分析_东方财富电脑版怎么看2023年的股价-程序员宅基地

文章浏览阅读311次。1 网络爬取,资金流向,涨跌额和幅度的爬取等等。2 数据分析,分类处理,批量保存为本地的csv格式。3 调用库资源进行数据分析,处理数据,可视化处理。4 生成涨跌幅度和价格走势随时间的变化曲线。通过python实现的数据分析。5 保存为本地高清图片并批量输出。原始结果已保存到压缩文件。_东方财富电脑版怎么看2023年的股价

Android笔记(一):ViewDragHelper实现底部上滑同时底部下滑_android viewdraghelper 实现负一屏下滑-程序员宅基地

文章浏览阅读1k次。先看看效果图:自定义布局控件:public class DragLayout extends FrameLayout { private int title; //限制上滑后的顶部标题高度大小 private Status mStatus = Status.Open; //默认底部是不上滑的 private View mTopCont_android viewdraghelper 实现负一屏下滑

数字图像处理(第四版)-冈萨雷斯-学习过程的笔记_数字图像处理第四版-程序员宅基地

文章浏览阅读3.2k次,点赞13次,收藏91次。数字图像处理(第四版)的学习笔记,对数字图像成像过程、灰度变换和高斯等空间滤波,彩色图像模型,数学形态学处理、基本的边缘检测算法都进行了描述。_数字图像处理第四版

arcgispro制作gp工具、发布和使用GP服务_pro发布gp服务要登录吗-程序员宅基地

文章浏览阅读2.6k次。需求:在arcgispro使用modelbuilder制作包含相交、汇总统计两个工具功能的gp工具,并且将其发布到portal,并在portal上操作该gp服务效果图:模型工具:链接:https://pan.baidu.com/s/1MKSQpKZP7CVPQNWQDamAPA提取码:md6x具体实现:1、制作gp工具。1)将相交工具和汇总统计工具拖拽到mo..._pro发布gp服务要登录吗

SSMP整合综合案例_风格无涯-程序员宅基地

文章浏览阅读72次。关注itheima谢谢喵_风格无涯

随便推点

R-7-82 简单计算器_:houleijiandan-程序员宅基地

文章浏览阅读339次。模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。输入格式:输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。输出格式:在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。输入样例:1+2*10-10/_:houleijiandan

SkylineGlobe SFS发布的WFS和WMS服务测试-程序员宅基地

文章浏览阅读121次。SkylineGlobe SFS发布的WFS服务:http://localhost/SFS/streamer.ashx?service=wfs&request=GetCapabilities&Username=&Password=<?xml version="1.0" encoding="UTF-8"?><wfs:WFS_Capabi..._wfs ows:serviceidentification

rk3399不能正常启动原因分析_rk3399救砖-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏3次。rk3399是rockchip发布的性能较为强悍的一款64bit cpu,该款cpu系统启动最快可以达到10s进入桌面。最近使用该cpu设计一款工也控制板,基本原理参考了某宝的一款开发板,在此表示感谢。硬件配置为lpddr4 4GB,emmc 1GB,pcb采用8层板设计,由于lpddr4的封装限制,只能使用盲孔埋孔设计,做过的朋友都知道,pcb的制版成本那是一个高,周期且长。pcb制作好之后,焊接,调试,第一款pcba很幸运上电后就能成功识别到设备,并顺利下载固件后启动。后来发现别的pcb总有启动不_rk3399救砖

展示编写的一个有趣C程序_c程序展示-程序员宅基地

文章浏览阅读1.2k次。*/* 程序的版权和版本声明部分: * Copyright (c) 2014, 烟台大学文经学院 * All rights reserved. * 文件名称:youqu.cpp * 作 者:杨雪飞(杨志铭)* 完成日期:2014 年 10 月 26 日 * 版 本 号:vc6++ * 对任务及求解方法的描述部分:* 输入描述:* 问题描述:* 程序输出:* 问_c程序展示

nodejs基于vue+微信小程序+python+PHP小型超市进销存管理系统的设计与实现-计算机毕业设计推荐_node 进销存-程序员宅基地

文章浏览阅读80次。小型超市进销存管理系统自然也不例外,互联网技术的日益成熟,推动了小型超市进销存管理系统的建立,从根本上改变了以往的传统管理模式;不但降低了服务管理的难度,还提高了管理的灵活性。小型超市进销存管理系统,主要的模块包括管理员;系统首页、个人中心、采购员管理、业务员管理、仓管员管理、供货商管理、客户信息管理、商品分类管理、仓库库存管理、采购进货管理、销售信息管理、入库信息管理、调拨单管理、出库信息管理、盘点信息管理、账目信息管理,采购员;_node 进销存

Linked List Cycle-- 判断一个单向链表中是否有环存在_linklist里面有一个环-程序员宅基地

文章浏览阅读3.4k次。原题:Given a linked list, determine if it has a cycle in it. =>给定一个单向链表,如何判断它里面是否有环存在。Follow up:Can you solve it without using extra space? =>能否不使用额外的空间来解决这个问题?/** * Definition f_linklist里面有一个环

推荐文章

热门文章

相关标签