docker-基本概念

Docker 和传统虚拟化方式的不同

容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

容器化

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:您可以即时部署更新和升级。
  • 便携式:您可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:您可以增加并自动分发容器副本。
  • 可堆叠:您可以垂直和即时堆叠服务。

Docker 三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

镜像

Linux 而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统

镜像包含操作系统完整的root文件系统,其体积往往是庞大的。分层存储,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。 删除当前层不是真删除,该文件会一直跟随镜像 每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

镜像是多层存储,每一层是在前一层的基础上进行的修改; 而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。

容器

容器可以被创建、启动、停止、删除、暂停

镜像(Image)和容器(Container)的关系, 就像是面向对象程序设计中的 类 和 实例 一样

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间 容器内的进程是运行在一个隔离的环境里

容器运行时 以镜像为基础层 上面建立当前容器存储层(为容器运行时读写而准备) 容器消亡时,容器存储层也随之消亡

所有的文件写入操作,都应该使用数据卷(Volume)或者绑定宿主目录。 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

仓库

一个 Docker Registry 中可以包含多个仓库(Repository); 每个仓库可以包含多个标签(Tag);每个标签对应一个镜像

一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以**通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像**。

命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行 在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼互不影响。