什么是Docker呢?Docker是一种新兴的虚拟化方式。Docker其实就是一个容器,这个容器能够放置咱们的应用,管理咱们的应用。Docker本意是码头工人,码头工人是干什么的,就是管理集装箱的,而集装箱中装的就是咱们的应用。php
咱们要在服务器上放置应用,不一样的应用程序可能会有不一样的应用环境,好比.net开发的网站和php开发的网站依赖的软件就不同,若是把他们依赖的软件都安装在一个服务器上就要调试好久,并且很麻烦,还会形成一些冲突。前端
在没有Docker的时代,一般咱们会在服务器上建立不一样的虚拟机来放置不一样的应用,目的是隔离不一样应用的环境,可是一个完整的虚拟机包含了一整套操做系统、一个或多个应用、必要的二进制文件和库资源,所以占用大量空间。并且虚拟机启动也十分缓慢 。数据库
而在有了Docker以后就不同了,Docker是一个应用层抽象,用于将代码和依赖资源打包在一块儿。 多个容器能够在同一台机器上运行,共享操做系统内核,但各自做为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小一般只有几十兆),瞬间就能完成启动 。后端
简而言之,使用Docker的目的:服务器
·为应用提供须要的应用环境架构
·节省开销,更合理的利用资源网站
固然咱们会根据不一样的需求去决定究竟是使用Docker仍是虚拟机,他们各有各额特色。虚拟机更擅长于完全隔离整个运行环境,例如,云服务提供商一般采用虚拟机技术隔离不一样的用户。而Docker一般用于隔离不一样的应用 ,例如前端,后端以及数据库。spa
图示Docker与虚拟机操作系统
上图左边就是Docker打包应用的方式,而右边就是虚拟机打包的方式,能够看到Docker只须要在服务器上安装了Docker的服务,就能够运行多个不用的应用。而虚拟机则是建立多个应用所需的操做系统来进行隔离。固然咱们也能够从上图看到Docker和虚拟机是能够共存的。.net
Docker中有很是重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。
·镜像
镜像(Image)至关于一个分层存储的用户文件系统,是一堆只读层(read-only layer)的统一视角。
什么意思呢?操做系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就至关因而一个 root 文件系统(这里也就解释了为何一个主机里能够有n多个Docker了,由于他们都在共用一个内核啊)。由于镜像包含操做系统完整的 root 文件系统,其体积每每是庞大的,所以在Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。因此说,它是一堆只读层的统一视角,它是由多层文件系统联合组成。
·容器
容器(container)的定义和镜像(image)几乎如出一辙,也是一堆层的统一视角,惟一区别在于容器的最上面那一层是可读可写的。
镜像是静态的定义,容器是镜像运行时的实体(很相似与面向对象中的类与对象)。
容器的实质是进程,但与直接在宿主执行的进程不一样,容器进程运行于属于本身的独立的 命名空间。所以容器能够拥有本身的 root 文件系统等。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操做同样。
要点:容器 = 镜像 + 读写层。而且容器的定义并无说起是否要运行容器。
·仓库
镜像构建完成后,能够很容易的在当前宿主上运行,可是,若是须要在其它服务器上使用这个镜像,咱们就须要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
一个 Docker Registry 中能够包含多个仓库(Repository);每一个仓库能够包含多个标签(Tag);每一个标签对应一个镜像。
仓库就是咱们存放镜像的地方
简单的概念就是这些了,更深刻的在后续慢慢理解。