docker 历史
什么是docker
Docker是基于Go语言实现的开源容器项目,诞生于2013年初,最初的发起者是dotCloud公司。
Docker是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本。
Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging)
、分发(Distribution)
、部署(Deployment)
、运行(Runtime)
生命周期进行管理,达到应用组件“一次封装、到处运行”的目的。
为什么使用docker
Docker容器化的好处
通过容器来打包应用、解耦应用和运行平台。
Docker在开发和运维中的优势
(1) 更快速的交付和部署
(2) 更高效的资源利用
运行docker容器不需要额外的虚拟化管理程序的支持,docker是内核级的虚拟化,可以实现更高的性能, 同时对资源的额外需求较低
(3) 更轻松的迁移和扩展
(4) 更简单的更新管理
使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作
Docker与虚拟化
虚拟化技术一般指的是计算机虚拟化,或通常说的服务器虚拟化。
维基百科如是说:
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。
虚拟化的核心是对资源的抽象。
虚拟化技术科分为基于硬件的虚拟化和基于软件的虚拟化。
基于软件的虚拟化可分为应用虚拟化和平台虚拟化。
平台虚拟化:
- 完全虚拟化:虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改
- 硬件辅助虚拟化:利用硬件(主要是CPU)辅助支持处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改
- 部分虚拟化:只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改
- 超虚拟化:部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改
- 操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。(容器相关技术即在这个范畴)
docker为什么比VM快
docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势
docker利用宿主机的内核,VM需要是Guest OS
Docker的思想
集装箱
会将所有需要的内容放到不同的集装箱中,所需要的环境直接用这个集装箱就可以了
标准化
(1) 运输的标准化:统一的仓库
(2) 命令的标准化:docker提供了一系列的命令,帮助我们操作容器
(3) 提供了REST的API:衍生出了很多的图形化界面
隔离性
docker在运行容器时,会在Linux的内核中,单独开辟空间,该空间不影响其他进程
Docker的基本组成
Docker本身是一个容器运行载体或称之为管理引擎。
docker三要素:容器,镜像,仓库
镜像:用于创建Docker容器的模板,一个镜像可以创建多个容器
容器:独立运行的一个或一组应用,是镜像运行的实体
仓库:集中存放镜像的地方,分为共有仓库和私有仓库
最大的公开仓库:https://hub.docker.com
docker的架构图:
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker的使用场景
- 使用Docker容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务基础设施
- 提供软件即服务应用程序
- 高性能、超大规模的宿主机部署