容器与管理程序虚拟化
- 管理程序虚拟化通过中间层将独立的机器虚拟运行于物理硬件上。
- 容器则直接运行在操作系统内核之上的用户空间。
容器也被称为“操作系统级虚拟化”,容器技术让多个独立的用户空间运行在同一台宿主机上。
Docker
Docker是一个能把应用程序自动部署到容器的开源引擎。它在虚拟化的容器执行的环境中增加了一个应用程序部署引擎。
Docker极其简洁,所需环境仅为一台安装了兼容版本Linux内核和二进制文件最小限的宿主机。
Docker为我们提供了
简单轻量的建模方式
上手快,启动快,高性能,低开销。职责逻辑分离
开发只需关心容器中的应用程序;运维只需关心管理容器;同时还方便统一运行环境,避免“在我机器上没问题”的情况。高效的开发生命周期
从开发、测试到部署,让你的程序具备可移植性,易于构建,易于协作。SOA友好
Docker推荐单个容器只运行一个应用程序或进程,构建分布式应用程序模型。
Docker核心组件
-
Docker客户端与服务端,即Docker引擎
- Docker是CS架构的程序
- Docker向服务器或守护进程发请求,由服务器或守护进程处理完成后响应
- Docker守护进程也叫Docker引擎
- Docker提供了一套docker命令行工具以及一套RESTful API与Docker引擎交互
-
Docker镜像
- 镜像是构建Docker世界的基石
- 基于镜像创建容器
- 可以把镜像当作容器的“源代码”
- 镜像体积小,易于分享
-
Registry
- 用来保存用户构建的镜像
- 官方公共Registry是Docker Hub
- 国内的加速镜像是https://registry.docker-cn.com
- 用户还可以架设自己的私有Registry
-
Docker容器
- 一个镜像格式
- 一系列标准的操作
- 一个执行环境
Docker能用来做什么
容器天生自带了“标准性”的特征,很适合为服务创建构建块。Docker的一些使用场景:
- 加速本地开发和构建流程。开发人员可构建、运行并分享Docker容器。容器可以在开发环境中构建,然后提交到测试环境,最终进入生产环境
- 可以让独立服务或应用程序在不同环境中,得到相同结果
- 用Docker创建隔离的环境来进行测试。如Jenkins CI持续集成工具启动一个用于测试的容器
- 构建一个多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主主机部署
- 等等
Docker的技术组件
Docker可运行在任何安装了现代Linux内核的x64主机上。推荐内核版本3.8以上。Docker开销低,可用于服务器、台式机或笔记本电脑。它包括以下几个部分:
- 一个原生Linux容器格式,Docker中称为libcontainer
- Linux内核的命名空间,用于隔离文件系统、进程和网络
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用cgroups(即control group,Linux的内核特性之一)将CPU和内存之类的资源独立分配给每个Docker容器
- 写时复制:文件系统都是通过写时复制创建的,这意味着文件系统时分层的、快速的,而且占用磁盘空间更小
- 日志:容器产生的STDOUT、STDERR和STDIN这些IO流都会被收集并记入日志,用于日志分析或排错
- 交互式shell:用户可创建一个伪tty终端,将其连接到STDIN,为容器提供一个交互式shell
写了这么多干巴巴的文字,下一篇就开始进入实用环节。