容器技术概述

容器是一种轻量级的、操作系统级别的虚拟化技术,它允许我们在资源隔离的进程中运行应用程序及其依赖项。运行应用程序所需的所有必要组件都可以打包为单个可以复用的映像。当映像被执行时,它将运行在一个孤立的环境中,不会与宿主操作系统共享内存、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这样的容器技术就是应用程序容器的例子。

本文的版权归 赵康 所有,如需转载请联系作者。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

在Kubernetes上运行SAP UI5应用(下)

上一篇文章 在Kubernetes上运行SAP UI5应用(上),我介绍了如何在Docker里运行一个简单的SAP UI5应用,并且已经成功地将一个包含了这个U...

9110
来自专栏SDNLAB

用防火墙来保障容器安全(Docker/Kubernetes)

在部署任何基于容器的应用程序之前,首先通过确保Docker、Kubernetes或其他容器防火墙来保护容器的安全至关重要。有两种方式来实现容器防火墙:手动或通过...

50960
来自专栏信达雅

OpenShift 的容器镜像(第 3 部分):使您的镜像易用

这是我在欧洲,中东和非洲(EMEA)红帽技术交流 2017 会议上的一个会议记录,与会者包括 EMEA 所有红帽解决方案架构师和顾问。会议的主要内容包括了在创建...

24260
来自专栏格子的个人博客

vSphere Hypervisor 6.5 虚拟机创建和操作系统安装

在上一篇博客中,介绍了vSphere Hypervisor 6.5的安装过程:包括镜像下载、定制和安装以及部分问题解决,一路磕磕碰碰,最终也算是把vSphere...

13530
来自专栏Brian

Docker 学习系列一之原理

---- Docker 认识 在谈及Docker时,不得不牵扯到一个现在很重要的一个领域:云计算。云计算是一种资源的服务模式,该模式可以按需的从可配置计算资源共...

37090
来自专栏北京马哥教育

docker容器技术系列一:基本概念

前言:从去年下半年开始,我们就尝试在使用docker部署生产应用,至现在已经有十多个项目使用了docker容器部署,docker为我们节约 了大量的服务器资源,...

31240
来自专栏宝哥的专栏

Docker系列学习文章 - 镜像仓库的介绍(七)

| 导语 前面我们讲了镜像的制作,知道了镜像是怎么生成的。但是镜像制作好了后,要怎么管理?他们存在哪里。通过本篇文章的讲解,大家就清楚了。

2.4K180
来自专栏北京马哥教育

写给新手的十一条 Docker 守则

18550
来自专栏云计算

容器技术概述

容器是一个允许我们在资源隔离的过程中,运行应用程序和其依赖项的 、轻量的 、操作系统级别的虚拟化技术, 运行应用程序所需的所有必要组件都打包为单个镜像,这个镜像...

585110
来自专栏CodeSheep的技术分享

利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)

任何一家云主机厂商提供给用户的主机功能其实讲白了就是一个操作系统基础镜像的运行实例。因此本篇博文将讲解如何在本地构建一个带ssh组件的centos底包镜像并上传...

47660

扫码关注云+社区

领取腾讯云代金券