docker 历史

什么是docker

Docker是基于Go语言实现的开源容器项目,诞生于2013年初,最初的发起者是dotCloud公司。

Docker是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本。

Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging)分发(Distribution)部署(Deployment)运行(Runtime)生命周期进行管理,达到应用组件“一次封装、到处运行”的目的。

为什么使用docker

  1. Docker容器化的好处

    通过容器来打包应用、解耦应用和运行平台。

  2. Docker在开发和运维中的优势

    (1) 更快速的交付和部署

    (2) 更高效的资源利用

    ​ 运行docker容器不需要额外的虚拟化管理程序的支持,docker是内核级的虚拟化,可以实现更高的性能, 同时对资源的额外需求较低

    (3) 更轻松的迁移和扩展

    (4) 更简单的更新管理

    ​ 使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作

Docker与虚拟化

虚拟化技术一般指的是计算机虚拟化,或通常说的服务器虚拟化。

维基百科如是说:

在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。

虚拟化的核心是对资源的抽象。

虚拟化技术科分为基于硬件的虚拟化和基于软件的虚拟化。

基于软件的虚拟化可分为应用虚拟化和平台虚拟化。

平台虚拟化:

  1. 完全虚拟化:虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改
  2. 硬件辅助虚拟化:利用硬件(主要是CPU)辅助支持处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改
  3. 部分虚拟化:只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改
  4. 超虚拟化:部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改
  5. 操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。(容器相关技术即在这个范畴)

docker为什么比VM快

  1. docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势

  2. docker利用宿主机的内核,VM需要是Guest OS

    img

image-20200523162048460

Docker的思想

  1. 集装箱

    会将所有需要的内容放到不同的集装箱中,所需要的环境直接用这个集装箱就可以了

  2. 标准化

    (1) 运输的标准化:统一的仓库

    (2) 命令的标准化:docker提供了一系列的命令,帮助我们操作容器

    (3) 提供了REST的API:衍生出了很多的图形化界面

  3. 隔离性

    docker在运行容器时,会在Linux的内核中,单独开辟空间,该空间不影响其他进程

Docker的基本组成

Docker本身是一个容器运行载体或称之为管理引擎。

docker三要素:容器,镜像,仓库

镜像:用于创建Docker容器的模板,一个镜像可以创建多个容器

容器:独立运行的一个或一组应用,是镜像运行的实体

仓库:集中存放镜像的地方,分为共有仓库和私有仓库

最大的公开仓库:https://hub.docker.com

docker的架构图:

img

概念 说明
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的使用场景

  1. 使用Docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 搭建测试环境
  4. 构建多用户的平台即服务基础设施
  5. 提供软件即服务应用程序
  6. 高性能、超大规模的宿主机部署