Containers容器
Operating-System-level virtualization操作系统级虚拟化允许我们运行多个隔离的用户空间实例在并行的。这些用户空间实例有应用代码,需求的库,需求的运行平台运行应用程序不带任何外部依赖。这些用户空间实例被认为是容器。
在这一章,我们将谈论容器,也提供细节在基础Docker操作上。
学习目标
在这章结束之际你应该能够去:
解释容器的概念
描述基本的Docker操作。
介绍
大多数时间,我们最终目的是运行应用程序。但是我们需要确保这个工作在多硬件和平台,像开发者笔记本,虚拟机,数据中心,公共的和私有的云,等。
运行一个应用程序(来自Docker, Inc.,查到从docker.com)
作为开发者,我们不想要担心这些层面和我们期待我们的应用程序工作,不考虑之下的平台。随着使用一个容器技术像Docker,我们能捆我们的应用程序伴随所有它的以来在一个盒子里面。
一个Docker容器(来自Docker, Inc.,查到从LinkedIn SlideShare)
这个盒子是被运输到不同的平台和它将运行相等的在他们每个。
镜像和容器
在容器世界,这个盒子(包含我们的应用程序和所哟它的依赖)所涉及到的作为一个镜像。一个运行的这个盒子的实例所涉及到的作为一个容器。我们能旋转多个容器从相同的镜像。
一个镜像包含应用程序,它的依赖和用户空间库。用户空间库像glibc启用交换从用户空间到内核空间。一个镜像不包含任何内核空间组件。
当一个容器被创建从一个镜像,它运行作为一个进程在主机的内核智商。这是主机内恒的并做去隔离和提供资源到每个容器。
容器技术:建立区块
我们现在讲看看一些容器建立徐快的技术,被提供来自Linux内核。
Namaspaces
一个命名空间包裹特定的全局系统资源向网络,进程ID抽象化,使它看起来是进程带有用户空间它们有它们自己的全局资源的隔离实例。接下来的全局资源被命名空间的:
pid-提供每个命名空间有一个相同的PID。每个容器有他自己的PID 1.
net-允许每个命名空间有他自己的网络栈。每个容器有它自己的IP地址。
mnt-允许每个命名空间有它自己的文件系统层次结构的视图。
ipc-允许每个命名空间有它自己的进程间通信。
uts-允许每个命名空间它拥有自己的主机名和域名。
usr-允许每个命名空间有它自己的用户和组ID号空间。一个root用户在一个容器里面不是主机的root用户,这个容器运行的。
cgroups
Control groups控制组被用来政治进程层次结构的和区分系统资源沿着在控制下的层次结构和可配置的方式。接下来cgroups是可用的为Linux:
blkio
cpu
cpuacct
cpuset
devices
freezer
memory
Union filesystem
联合文件系统允许文理的文件系统的文件和目录,所知道的像层,被透明的加载在每个其他上,去创建一个新的虚拟文件系统。
一个镜像被被Docker使用的是多层组成的和,当启动一个新的容器,我们结合所有这些层去穿件一个只读的文件系统。在只读的文件系统上面,一个容器得到读写层,是一个短暂的层和它是放置容器的。
Container Runtimes
容器运行平台
命名空间和控制组已存在在Linux内核里有一段时间了,但是消耗他们去创建容器不是容易的。在Docker登录在2013年之后,容器开始变成主流。Docker隐藏所有的复杂性在后台和带来伴随一个简单地工作流去共享和管理两者镜像和容器。一些容器运行平台被提供之下:
runC
在最近的几年,我们看到一个瞬间的增长在兴趣和采纳为容器技术。大多数云供应商和IT厂商提供支持为容器。确保这是没有厂商锁定的和没有倾向于特定的公司或项目的,IT公司来聚拢和形成一个开放管理结构,称为The Open Container Initiative开放容器倡议,在Linux Foundation的赞助下。这个管理实体起来伴随规范去穿件标准在操作系统进程和应用程序容器。runC是CLI工具为产生和运行容器依据这个规范。
Docker
Docker是一个开源的,基于Apache 2.0许可证的项目。Docker,Inc.是主要的项目的赞助商。
直到Docker 1.10发布,Docker使用libcontainer去访问主机内核功能去创建容器。随着Docker 1.11 它开始使用runC作为容器的运行平台,它是一个OCI规范的执行。Docker使用容器的守护进程控制runC容器。
Docker 引擎和容器化的(来自Docker,Inc.,查到从docker.com)
直到最终用户是忧虑的,没有变化在用户提现在Docker 1.10和Docker 1.11.
当前,Docker是全支持在Linux上。原生支持在Mac和Windows是在管线里的。
rkt
rkt(发音“rock-it”)是一个开源的,Apache 2.0许可证的项目来自CoreOS。它执行应用容器规范。
Container vs. VMs
容器对虚拟机
一个虚拟机运行在Hypervisor纸上,模拟不同的硬件,像CPU,内存,等。,所以一个客户机操作系统能够被安装在它们上面。不同种类的客户机操作系统能运行在一个Hypervisor上。在一个应用运行在一个客户机操作系统和在外面世界之间,有多层:客户机操作系统,Hypervisor和主机操作系统。
Docker容器对VM(来自Docker,Inc.)
另一方面,容器运行直接地作为一个进程在主机操作系统纸上。没有简介的像我们看到的在虚拟机里,帮助容器去得到近乎原生的性能。也是,走位容器有非常小的占用空间,我们能打包大量的容器相比虚拟机在同样的物理机上。作为容器运行在主机操作系统时尚,我们需要确保容器是与主机操作系统兼容的。
Docker Runtime
Docker运行平台
Docker运行平台是来自Docker,Inc.,有建立多个产品围绕这个平台:
Docker Datacenter
-Docker Trusted Registry
-Universal Control Plane
Docker Cloud
Docker Hub
Docker使用一个客户端-服务器架构,一个Docker客户端连接到一个服务器,(Docker主机)和执行命令。
Docker架构(来自Docker,Inc.,查到从docker.com)
基本的Docker操作
你可以找到一个基本Docker操作的列表以下:
- List images:
$ docker images - Pulling an alpine image:
$ docker pull alpine - Run a container from a locally-available image:
$ docker run -it alpine sh - Run a container in the background (-d option) from an image :
$ docker run -d nginx - List only running containers:
$ docker ps - List all containers:
$ docker ps -a - Inject a process inside a running container:
$ docker exec -it <container_id/name> bash - Stop a container:
$ docker stop <container id/name> - Delete a container:
$ docker rm <container id/name>
使用容器的益处
使用容器的一些益处是:
它们有非常小的用户空间。
它们能够背不熟非常快(在毫秒之间)
它们是灵活的解决方案,走位它们能运行在任何计算机,基础脚骨和云环境。
它们能被伸缩容易自在。
有非常丰富的生态建立在它们周围。
问题容器能哦股被简单和快速的隔离当拍错和解决问题的时候。
容器使用少的内容和CPU比虚拟机运行相似的工作流。
增加产量随着减少开销。
学习目标(复习)
在这章结束之际你应该能够去:
解释容器的概念
描述基本的Docker操作。