最新在学习Docker,记录下自己对Docker的理解。
一.Docker是什么?
1. Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。
2.Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cproup(control group控件组),namespace(命名空间)以及UnionFS等技术,对进程进行封装隔离。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。
LXC是一个系统容器。Docker是一个应用程序容器
二.Dokcer 组成原理
如图:
Linux文件系统由bootfs和rootfs两部分组成,bootfs主要包含 bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后 bootfs就被umount了。 rootfs 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件。 Docker容器是建立在Aufs基础上的,Aufs(Advanced Union FS)是一种Union FS, 简单来说就是支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种layer的概念。
三.Docker的三个基本概念
1.镜像
镜像就是一个特殊的文件系统。 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
2.容器——镜像运行时的实体
镜像(Image)和容器(Container)的关系,就像类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。
3.仓库——集中存放镜像文件的地方
一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。
四.Docker的优点
Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性——一致的运行环境
可以做到秒级、甚至毫秒级的启动时间。——快速的启动时间
避免资源会容易受到其他用户的影响。——隔离性
善于处理集中爆发的服务器使用压力;——弹性伸缩,
快速扩展 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便
使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署
五.Docker容器与虚拟机的区别?
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
容器是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。 虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢 。