11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

容器技术第一讲:容器入门篇

  • 2019-11-19
  • 本文字数:1975 字

    阅读完需:约 6 分钟

容器技术第一讲:容器入门篇

容器作为 Paas 的一种体现,越来越受到广大程序员的喜爱。本文作为容器的入门篇,对 Docker 的原理和主要技术进行了初步的介绍。


1 概述

容器是 Paas( Platform-as-a-Service,平台即服务)的一种体现。将所需软件整合成一个应用,一个服务。


通俗的讲:容器是一种沙盒技术。沙盒就是像集装箱一样,把应用整体封装起来的技术。封装后,应用与应用之间,在各自的边界内运行,不会相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。


2 实现原理

容器技术的核心就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。 所以,容器只是运行在宿主机上的一种特殊的进程,使用的还是同一个宿主机的操作系统内核。


Docker 在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。容器就只能看到当前 Namespace 所限定的资源、文件、设备、状态或者配置。而对于宿主机以及其他不相关的程序,它就完全看不到了。


3 对比虚拟机的工作原理

虚拟机主要是通过 Hypervisor 的硬件虚拟化功能,模拟运行一个操作系统需要的各种硬件,比如 CPU、内存、I/O 设备等等。然后,它在这些虚拟的硬件上安装了一个新的操作系统,即 Guest OS。


基于以上,用户的应用进程就可以运行在这个虚拟的机器中,它能看到的只有 Guest OS 里面的文件和目录,以及这个机器里的虚拟设备。


区别于虚拟机技术的 Docker 则是用一个名为 Docker Engine 的软件替换了 Hypervisor。


Docker 项目帮助用户启动的,还是原来的应用进程,只不过在创建这些进程时,Docker 为它们加上了各种各样的 Namespace 参数。


进程会觉得自己是各自 PID Namespace 里的第 1 号进程,只能看到各自 Mount Namespace 里面挂载的目录和文件,只能访问到各自 Network Namespace 里的网络设备,就仿佛运行在一个“容器”里面一样。


Docker 初始化时,默认会启用 PID, UTS, network, user, mount, IPC, cgroup 的 Namespace。


4 容器主要技术

Cgroups 技术是用来制造约束的主要手段。


Namespace 技术是用来修改进程视图的主要方法。


Linux Namespaces


Linux Namespaces 机制是 Linux 提供的一种内核级别环境隔离的方法。 PID,IPC,Network 等系统资源不再是全局性的,而是属于特定的 Namespace。每个 Namespace 里面的资源对其他 Namespace 都是透明的。 Linux Namespace 官方文档《Namespace in Operation》


实现过程主要用到:



Linux Cgroups

Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的,它就是一个子系统目录加上一组资源限制文件的组合。


Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。Cgroups 还能够对进程进行优先级设置、审计,以及将进程挂起和恢复等操作。


在 Linux 中,Cgroups 给用户暴露出来的操作接口是文件系统,即它以文件和目录的方式存在于 /sys/fs/cgroup 路径下。


在 /sys/fs/cgroup 下面有很多诸如 cpuset、cpu、 memory 这样的子目录。这些都是机器当前可以被 Cgroups 进行限制的资源种类。在其资源下可以看到该类资源具体可以被限制的方法。Cgroups 的每一项子系统都有其独有的资源限制能力,比如:



5 容器的优点

Namespace 技术实际上只是限制了应用进程可以查看的内容,这些进程和宿主机上的其他进程一样,都是由宿主机操作系统统一管理,只不过这些被隔离的进程拥有额外设置过的 Namespace 参数。


容器本身并没有像 Hypervisor 那样对应用进程的隔离环境负责,真正对隔离环境负责的是宿主机操作系统。Docker 在这里扮演的是辅助管理工作。


使用虚拟化技术作为应用沙盒,就必须要由 Hypervisor 来负责创建虚拟机,这个虚拟机是真实存在的,并且它里面必须运行一个完整的 Guest OS 才能执行用户的应用进程。这就不可避免地带来了额外的资源消耗和占用,尤其对计算资源、网络和磁盘 I/O 的损耗非常大。


而相比之下,容器化后的应用,却还是宿主机上的普通进程,所以性能损耗就不存在了;再有,使用 Namespace 作为隔离手段的容器并不需要 Guest OS,这就使得容器额外的资源占用几乎可以忽略不计。


6 容器的坑

基于 Linux Namespace 的机制隔离不彻底

首先,虽然容器只是运行在宿主机上的进程,但是那么多个容器之间使用的还是同一个宿主机的操作系统内核。 如果你要在 Windows 宿主机上运行 Linux 容器,或者在低版本的 Linux 宿主机上运行高版本的 Linux 容器,都是行不通的。


其次,在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,最典型的例子就是:时间。如果在虚机修改时间,会发现宿主机的也会改变。


容器的“限制”问题

上文说到容器只是看起来被封装起来,但是实际上他和系统上其他的进程是有资源间相互竞争的关系。合理的评估资源的使用就显得很重要了。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/oOUm8uX4cuSvmIReMDsGnA


2019-11-19 23:481519

评论

发布
暂无评论
发现更多内容

HDFS(Hadoop分布式文件系统)

编程江湖

大数据 hdfs

DataPipeline与海量数据完成产品互认证,助推数据管理信创生态新进程

DataPipeline数见科技

数据库 中间件 数据融合 数据迁移 数据管理

再说绩效考核

张老蔫

28天写作

使用Amazon Step Functions Data Science SDK创建基于无服务器架构的工作流

亚马逊云科技 (Amazon Web Services)

AI/ML

在线上传图片二维码识别解析

入门小站

工具

大数据开发之sparkSQL的使用分享

@零度

大数据 Sparksql

云小课|DGC数据开发之基础入门篇

华为云开发者联盟

大数据 数据湖治理中心 云数据开发 DLF

愉悦圣诞 暖意融心

龙智—DevSecOps解决方案

Spring核心原理之IoC容器初体验(2)

Tom弹架构

Java spring 源码

Coder 投稿 | mPaaS 的多版本接入(Android)

蚂蚁集团移动开发平台 mPaaS

android Android Studio mPaaS 移动应用开发

盘点一下自己的2021

为自己带盐

28天写作 12月日更 盘点2021

提升产品创新能力?试试斯坦福大学设计思维模型!

恒生LIGHT云社区

设计 产品设计 创新 设计思维

从新手到专家:如何设计一套亿级消息量的分布式IM系统

WorkPlus Lite

Amazon Forecast现可支持对单一条目进行准确性评估

亚马逊云科技 (Amazon Web Services)

AI/ML

热点浅谈:著名主播“薇娅”究竟是怎么赚钱的?

优秀

直播带货 薇娅

手把手教程 | 使用无服务器模板部署机器学习模型

亚马逊云科技 (Amazon Web Services)

AI/ML

解决 GitLab 报错:You are not allowed to force push code to a protected branch on this project

AlwaysBeta

git gitlab

我们开源了一个轻量的 Web IDE UI 框架

Ziv 小威

ide 开源 vscode React WebIDE

新手入门:史上最全Web端即时通讯技术原理详解

WorkPlus Lite

在 Amazon Inferentia 上为 PyTorch 自然语言处理应用程序实现 12 倍的吞吐量和低延迟

亚马逊云科技 (Amazon Web Services)

AI/ML

Amazon SageMaker新玩法——定制你的语音识别模型

亚马逊云科技 (Amazon Web Services)

AI/ML

用一个 flv.js 播放监控的例子,带你深撅直播流技术

杨成功

JavaScript 前端 监控 直播 流媒体

实力超越,绝对领先——Amazon SageMaker 在企业 MLOps 平台报告中获得高度肯定

亚马逊云科技 (Amazon Web Services)

AI/ML

自然语言处理实战——巧用 Amazon Comprehend 分析社交媒体数据

亚马逊云科技 (Amazon Web Services)

AI/ML

专家视野:探寻运维趋势与ITSM落地之道

龙智—DevSecOps解决方案

运维 ITSM

常见开源分布式文件系统架构对比

Juicedata

hdfs 开源 文件系统 云存储 分布式文件系统

通过自动关闭Amazon SageMaker Studio中的闲置资源来节省成本

亚马逊云科技 (Amazon Web Services)

AI/ML

动手用 Java 训练深度学习模型

亚马逊云科技 (Amazon Web Services)

AI/ML

容器技术第一讲:容器入门篇_文化 & 方法_OpsDev - 刘刚_InfoQ精选文章