为什么需要容器,下面哪些不是容器类型,为什么需要容器,下面哪些不是容器的条件

  为什么需要容器,下面哪些不是容器类型,为什么需要容器,下面哪些不是容器的条件

  作为程序员,让我们回忆一下我们每天所做的熟悉的软件开发工作:

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

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

  这种经营环境的变化可以分为不同的方面:

  比如代码从程序员的笔记本电脑切换到测试服务器,或者从物理服务器切换到公有/私有云;

  代码所依赖的运行时版本会发生变化,比如python2.7用于开发,而python3用于生产。

  也可能是代码运行的操作系统变了,比如开发用的ubuntu,量产机用的redhat。

  除了花时间在应用程序本身的开发上,程序员还需要花费额外的精力来处理这类环境或基础设施问题,有时会令人头疼。

  作为一名应用程序开发人员,我对这些潜在的环境问题不感兴趣。有没有办法让我不去想他们?是的,使用容器技术。

  什么是容器?我们可以从现实生活中容器的概念进行类比。

  简单来说,一个容器包含一个完整的运行时环境:除了应用程序本身,所有的依赖项、类库、其他二进制文件、配置文件等。被统一打包到一个名为容器映像的包中。通过容器化应用本身及其依赖关系,抽象出操作系统和其他基础环境的分布所导致的差异。

  我们为什么要使用容器?那要看它带来的好处。

  由于容器封装了运行应用程序所需的所有相关细节,例如应用程序依赖关系和操作系统,因此可以更加灵活地将映像从一个环境移植到另一个环境。例如,同一个映像可以在Windows或Linux开发、测试或生产环境中运行。

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

  镜像提供了版本控制,因此可以跟踪容器的不同版本,并监控版本之间的差异。

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

  与虚拟机相比,轻量级:

  与容器的目的类似,虚拟机致力于隔离应用程序及其关联,以便构建一组可以独立于特定环境运行的应用程序单元。

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

  运行在一台主机上的多个容器化应用共享主机操作系统的内核,所以不需要虚拟机技术的hypervisor中间层,所以比虚拟机技术重量更轻,启动更快。

  为什么近年来容器技术突然流行起来?

  随着微服务架构应用开发的普及,很多IT公司都推出了基于微服务架构的新产品。就连传统的企业管理软件巨头SAP也发布了很多基于微服务的解决方案,比如接洽中心、收入云等等。

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

  更多嬉草原创文章,请关注微信官方账号‘王子熙’:

为什么需要容器,下面哪些不是容器类型,为什么需要容器,下面哪些不是容器的条件