freeCodeCamp/guide/chinese/containers/index.md

53 lines
4.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Containers
localeTitle: 集装箱
---
## 集装箱
容器是解决从一个计算环境移动到另一个计算环境时如何使软件可靠运行的问题的解决方案。这可以是从开发人员的笔记本电脑到测试环境,从登台环境到生产,也可能是从物理机器到私有云或公共云中的虚拟机的数据中心。
换句话说Container包含整个运行时环境应用程序及其所有依赖项库和其他二进制文件以及运行它所需的配置文件捆绑到一个包中。通过容纳应用程序平台及其依赖关系操作系统分发和底层基础架构的差异被抽象掉了。
容器是操作系统级虚拟化 - 一种操作系统功能,其中内核允许存在多个隔离的用户空间实例。从其中运行的程序的角度来看,这种称为容器的实例可能看起来像真正的计算机。
## 虚拟机
VM本质上是对真实计算机的仿真该计算机执行类似于真实计算机的程序。 VM使用“管理程序”在物理机器上运行。反过来管理程序可以在主机上运行也可以在“裸机”上运行。
_虚拟机管理程序_是虚拟机运行的软件固件或硬件。管理程序本身在物理计算机上运行称为“主机”。主机为VM提供资源包括RAM和CPU。这些资源在VM之间划分可以根据需要进行分发。因此如果一个VM运行的资源更多的应用程序您可能会分配更多的资源而不是在同一主机上运行的其他VM。
在主机上运行的VM同样使用管理程序通常也称为“客户机”。此客户机包含应用程序以及运行该应用程序所需的任何内容例如系统二进制文件和库。它还带有自己的整个虚拟化硬件堆栈包括虚拟化网络适配器存储和CPU - 这意味着它还拥有自己的完整客户操作系统。从内部来看客户机具有自己的专用资源。从外部来看我们知道它是一个VM - 共享主机提供的资源。
如上所述,来宾计算机可以在托管虚拟机管理程序或裸机虚拟机管理程序上运行。它们之间存在一些重要的差异。
首先托管虚拟化管理程序在主机的操作系统上运行。例如运行OSX的计算机可以在该OS之上安装VM例如VirtualBox或VMware Workstation 8。 VM无法直接访问硬件因此必须通过主机操作系统在我们的例子中是Mac的OSX
托管虚拟机管理程序的好处是底层硬件不那么重要。主机的操作系统负责硬件驱动程序而不是管理程序本身因此被认为具有更多的“硬件兼容性”。另一方面硬件和管理程序之间的这个附加层会产生更多的资源开销从而降低VM的性能。
裸机虚拟机管理程序环境通过在主机的硬件上安装和运行来解决性能问题。因为它直接与底层硬件接口所以它不需要运行主机操作系统。在这种情况下作为操作系统安装在主机服务器上的第一件事就是管理程序。与托管虚拟机管理程序不同裸机虚拟机管理程序具有自己的设备驱动程序可直接与每个组件交互以执行任何I / O处理或特定于操作系统的任务。这样可以获得更好的性能可伸缩性和稳定性。这里的权衡是硬件兼容性有限因为管理程序只能内置如此多的设备驱动程序。
在讨论了虚拟机管理程序之后您可能想知道为什么我们在VM和主机之间需要这个额外的“虚拟机管理程序”层。
好吧由于VM拥有自己的虚拟操作系统因此虚拟机管理程序在为VM提供管理和执行此客户机操作系统的平台方面发挥着重要作用。它允许主机在作为客户端运行的虚拟机之间共享其资源。
## 容器
与提供硬件虚拟化的VM不同容器通过抽象“用户空间”来提供操作系统级虚拟化。当我们解开术语容器时你会明白我的意思。
出于所有意图和目的容器看起来像VM。例如它们具有用于处理的私有空间可以以root身份执行命令具有专用网络接口和IP地址允许自定义路由和iptable规则可以挂载文件系统等。
容器和VM之间的一个重要区别是容器与其他容器_共享_主机系统的内核。
## 管弦乐编曲
生产中有几个容器编排框架docker-swarm和kubernetes
## 容器提供商列表
Bellow是可以使用的最常用容器供应商的小清单。
* [搬运工人](https://www.docker.com/)
* [Kubernetes](https://kubernetes.io/)
* [亚马逊AWS ECS](https://aws.amazon.com/ecs/?nc1=h_ls)
* [RKT](https://github.com/rkt/rkt)
* [Azure Fabric](https://azure.microsoft.com/en-us/services/service-fabric/)