一、docker简介
1.1虚拟化技术
Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
被Hypervisor用来执行一个或多个虚拟机器的电脑称为主体机器(host machine),这些虚拟机器则称为客体机器(guest machine)。hypervisor提供虚拟的作业平台来执行客体操作系统(guest operating systems),负责管理其他客体操作系统的执行阶段;这些客体操作系统,共同分享虚拟化后的硬件资源。
起初,大家普遍认为基于hypervisor的方式可以在最大程度上提供灵活性。所有虚拟机实例都能够运行任何其所支持的操作系统,而不受其他实例的影响。然而,越来越多的用户发现hypervisor提供这样一种广泛支持的特性其实是在给自己制造麻烦。对于hypervisor环境来说,每个虚拟机实例都需要运行客户端操作系统的完整副本以及其中包含的大量应用程序。从实际运行的角度来说,由此产生的沉重负载将会影响其工作效率及性能表现。
1.2容器
因此出现了一种称为容器(Container)的新型虚拟化技术来帮助解决这些问题。
操作系统层虚拟化(英语:Operating system–level virtualization),亦称容器化(英语:Containerization),是一种虚拟化技术,这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。
1.3 虚拟机与容器的对比
项目 | 虚拟机 | 容器 |
---|---|---|
启动时间 | 分钟级启动 | 秒级启动 |
体积 | 以G为单位 | 容器镜像大小通常以M为单位 |
性能 | 需要Hypervisor层,需要虚拟化硬件设备,具有完整的Guest OS,开销大,性能较容器差 | 共享宿主机内核,系统级虚拟化,没有Hypervisor层开销,性能基本接近物理机 |
安全性 | 具有完成的Guset OS,隔离性,稳定性好 | 因为共享了宿主机内核,只是进程级的隔离,因此隔离性和稳定性不如虚拟机。且容器有权限访问宿主机内核,存在一定的安全隐患。 |
要求 | 基于硬件虚拟化,需要cpu支持虚拟化技术 | 不用考虑cpu是否支持虚拟化 |
2. docker是什么
Docker是一个开源的应用容器引擎,使用GO语言开发,并利用 Linux 内核的几个特性来提供其功能。Docker 使应用程序与基础设施分开,以便可以快速交付软件。
2.1 应用场景
-
快速、一致地交付您的应用程序
-
Docker 允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和持续交付 (CI/CD) 工作流。
-
-
响应式部署和扩展
-
Docker 的可移植性和轻量级特性还使动态管理工作负载、根据业务需求几乎实时地扩展或拆除应用程序和服务变得容易。
-
-
在相同硬件上运行更多工作负载
-
Docker 是轻量级和快速的。它为基于管理程序的虚拟机提供了一种可行且经济高效的替代方案,因此您可以使用更多的计算能力来实现您的业务目标。Docker 非常适合高密度环境以及需要以更少资源完成更多任务的中小型部署。
-
3. docker架构
Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
Docker 守护进程
Docker 守护进程 ( dockerd) 监听 Docker API 请求并管理 Docker 对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。
#Docker 客户端
Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当您使用诸如 之类的命令时docker run,客户端会将这些命令发送到dockerd,从而执行它们。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。
#Docker 仓库
Docker仓库用来存储 Docker 镜像。Docker Hub 是一个任何人都可以使用的公共仓库平台,Docker 默认配置在 Docker Hub 上查找镜像。也可以配置自己的私有仓库