什么是Docker虚拟化
2.1 什么是DockerDocker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上。Docker基于LXC来实现类似VM的功能,可以在更有限的硬件资源上提供给用户更多的计算资源。与同VM等虚拟化的方式不同,LXC不属于全虚拟化、部分虚拟化或半虚拟化中的任何一个分类,而是一个操作系统级虚拟化。Docker是直
2.1 什么是Docker
Docker
是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上。Docker
基于LXC
来实现类似VM的功能,可以在更有限的硬件资源上提供给用户更多的计算资源。与同VM等虚拟化的方式不同,LXC
不属于全虚拟化、部分虚拟化或半虚拟化中的任何一个分类,而是一个操作系统级虚拟化。
Docker
是直接运行在宿主操作系统之上的一个容器,使用沙箱机制完全虚拟出一个完整的操作,容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,及自己的资源管理能,使同一台宿主机上可以友好的共存多个容器。
Docker
借助Linux的内核特性,如:控制组(Control Group)、命名空间(Namespace)等,并直接调用操作系统的系统调用接口。从而降低每个容器的系统开销,并实现降低容器复杂度、启动快、资源占用小等特征。
2.2 Docker
的构成
2.2.1 Docker
架构
Docker
使用客户端-服务器 (C/S) 架构模式 使用远程API来管理和创建Docker容器。Docker 容器(Container)通过 Docker 镜像(Image)来创建,二者之间的关系类似于面向对象编程中的对象与类。
其中,Docker
客户端用于向Docker
服务器或守护进程
发送请求。而服务器或守护进程会接受来自客户的请求(创建、运行、分发容器),并在处理完请求后返回响应结果。Docker
提供了一个命令行工具docker
,及一整套RESTful API
。客户端和服务端既可以运行在一个机器上,也可通过 socket
或者RESTful API
来进行通信。
2.2.2 Docker
核心组件
Docker Image
(镜像)、Registry
(仓库)、Docker Container
(容器)是Docker
中包含几个核心组件(核心概念),这几个组件介绍如下:
Docker Image
- 镜像
镜像用于构建Docker
容器,是构成Docker
的基础。它类似于虚拟机中的镜像,但它非常小,可以将它理解为容器的源代码。是一种层式结构的增量文件系统,由一系列命令一步步组成。
与传统虚拟机中的镜像相比,Docker
镜像是分层的,也更为轻量。你可以对其进行快速跌代,通过版本管理及增量的文件系统,Docker
提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经现有的应用镜像,再通过简单的命令就可以直接使用。
Registry
- 仓库
Registry
是Docker
用于存放镜像文件仓库,仓库分为开放(Public)和私有(Private),其设计理念非常类似于代码仓库Git
。
Docker Hub
是Docker公司运营的Registry
,也是最大的Docker
仓库,用户可以在上面注册帐号分享并保存自己的镜像。除Docker Hub
外,还有很多第三方镜像仓库。如果不希望自己的镜像被其它人看到,你甚至可以架设自己的私有仓库,以增强安全性或满足一些特殊需求。
注意:也可以将Repository
认为是Docker
仓库,实际上二者区分并不严格。
Docker Container
- 容器
容器是用于运行镜像的沙箱环境,它是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除。而这些容器都是相互隔离、互不可见的。我们可以理解为:镜像是Docker
生命周期的打包和构建阶段,而容器Docker
的启动和执行阶段。
Docker
借签了集装箱的设计概念,不同的是集装箱运送的货物,而Docker
运送的是软件。和集装箱一样,我们并不需要关心里面装的是什么,只需要将应用按标准的形式装进去,然后上传到Registry
,在需要使用它的服务器下载部署即可。Docker
容器可以非常方便的替换,且各个容器都有良好的通用性,易于分发和叠加。
2.3 Docker
的适用范围
正如前所述,Docker
为容器提供了标准的隔离性,而各个容器本身就是一个标准的系统环境。因些,Docker
非常适合构建服务块,以下是Docker
的一些应用场景:
- 方便应用的自动化打包与部署 - 加速本地开发和构建流程,使其更加高效和轻量化。本地开发人员可以构建、运行并分享Docker容器。容器可以在开发环境中构建,然后轻松的提交到测试环境,并最终进入生产环境。
- 创建轻量、私密的PAAS环境
- 部署和扩展Web应用、数据库与后台服务 - 可以让独立服务在不同环境中得到相同的执行结果
- 连续的集成/部署、测试自动化 - 开发者可以在本地构建运行或测试环境,而不是直接在生产环境中部署、测试。
Docker
也并不是万能的,其设计目的也并不是要成为KVM
等的替代品。不可避免的,Docker
也会有一些局限性,如:
- 基于Linux内核,所以只能运行于Linux环境中,且只能64位主机上
- 基于
LXC
实现的容器,而LXC
是基于Linux内核中的cgroup
。因此,Docker
容器使用的权限、物理资源等也受限于LXC
更多推荐
所有评论(0)