比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。
Docker是不携带操作系统的,所以Docker的应用就非常的轻巧。
另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor去虚拟化内存,整个调用过程是虚拟内存->虚拟物理内存->真正物理内存,但是Docker是利用Docker Engine去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。
Docker 基本架构Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 主要有以下几部分组成:
- Docker Client 客户端
- Docker daemon 守护进程
- Docker Image 镜像
- Docker Container 容器
- Docker Registry 仓库
客户端和守护进程:
- Docker是C/S(客户端client-服务器server)架构模式。
- docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作返回结果。
- docker客户端可以连接本地或者远程的守护进程。
- docker客户端和服务器通过socket或RESTful API进行通信。
Docker 容器通过 Docker 镜像来创建,容器与镜像的关系类似于面向对象编程中的对象与类。
如图所示基本架构:
1.Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板。
2.Docker 容器(Container)
容器是独立运行的一个或一组应用。
3.Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API
4.Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
5.Docker 仓库(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
6.Docker Hub
提供了庞大的镜像集合供使用。
7.Docker Machine
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
总之,Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能,并使用了一种分层的联合文件系统技术管理镜像,能极大简化环境运维过程,最后看看对应的应用场景。
Docker的应用场景1. 作为云主机使用
相比虚拟机来说,容器使用的是一系列非常轻量级的虚拟化技术,使得其启动、部署、升级跟管理进程一样迅速,用起来灵活又感觉跟虚拟机一样没什么区别,所以有些人直接使用Docker的Ubuntu等镜像创建容器,当作轻量的虚拟机来使用。
2. 作为服务使用
如果你仅仅把Docker容器当作一个轻量的固定虚拟机用,那其实只能算是另类用法,Docker容器最重要价值在于提供一整套平台无关的标准化技术,简化服务的部署、升级、维护,只要把需要运维的各种服务打包成标准的集装箱,就可以在任何能运行Docker的环境下跑起来,达到开箱即用的效果,这个特点才是Docker容器风靡全球的根本原因。
- Web应用服务
- 持续集成和持续部署
3. 微服务架构使用
如果说上面两种应用场景还不足以体现出与传统的PaaS平台相比的巨大优势的话,那么对微服务的架构这种复杂又灵活的使用场景的无缝支持绝对具有革命意义。
微服务架构将传统分布式服务继续拆分解耦,形成一些更小服务模块,服务模块之间独立部署升级,这些特性与容器的轻量、高效部署不谋而合。
更多阿里P8架构师谈:架构设计16精讲(关注后即可查看)