Docker的初次探索

此文章对Docker进行一个初步了解(能做到面试的被问Docker是个什么鬼的时候能说出点道道出来)

  • 什么是Docker
  1. Docker是一个对进程进行封装隔离的一种操作系统层面的虚拟化技术,简单的理解为一个容器,进程可以隔离宿主以及其他被隔离的进程。但是Docker在容器的基础之上,从文件系统、网络互联到进程隔离等进行了更进一步的封装,简化容器的创建和维护,更加轻盈便捷。
  2. 它与传统的虚拟化方式相比,由于是在宿主内核上直接运行,放弃了容器自身的内核,不再进行硬件虚拟,不需要像传统的虚拟技术那样在运行一个完整的操作系统的基础之上再去运行所需应用的进程。

Docker的初次探索_第1张图片

Docker的初次探索_第2张图片

  • 为什么要用Docker(Docker的优点)
  1. 更高效的利用系统资源:相比于虚拟技术,一个相同配置的主机可以运行数量更多的应用,执行速度、内存损耗和文件存储速度都更加的高效。
  2. 更快的启动时间:由于不需要启动完整的操作系统的特性,启动时间可以达到秒级乃至毫秒级
  3. 一致的运行环境:Docker提供除了内核以外的完整的运行环境,确保了应用运行环境的一致性,规避了因为开发环境、测试环境、生产环境不一致导致的bug
  4. 持续交付和部署:开发人员可以通过Dockerfile进行镜像构造,并且可以结合持续集成系统进行集成测试;运维人员可以直接在生产环境中快速部署该镜像,乃至结合持续部署系统进行自动部署
  5. 更轻松的迁移:由于Docker确保了应用环境的一致性,导致Docker可以在各种平台上运行,用户可以很轻松的在一个平台上迁移到另一个平台上,并且不用担心运行环境的变化导致的无法正常运行。
  6. 更轻松的维护和扩展:Docker使用分层存储以及镜像的技术,使得应用重复的部分复用更加的容易,运维更新也变得更加的简单,进一步扩展镜像也便的格外的容易,此外开源的Docker集合的各大团队一起维护的高质量的官方镜像也大大降低了应用服务镜像制作的成本。

Docker的初次探索_第3张图片

  • Docker的三个基本概念
  1. Docker镜像:

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资 源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境 变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。由于镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此Docker设计为分层存储的架构,所以说此处的镜像并非IOS文件,只是一个虚拟的概念,并非由一个文件组成,而是由一组文件系统组成,或者说由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生 改变,后一层上的任何改变只发生在自己这一层。因此,在构建镜像的时候,每一层尽量只包含该层需要添加的东西, 任何额外的东西应该在该层构建结束前清理掉

  1. Docker容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中 的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被 创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样,因为这种隔离的特性,很多人初学 Docker 时常常会把容器和虚拟机搞混。

与镜像一样,每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层,因此容器同样也是运用了分层存储。并且容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此, 任何保存于容器存储层的信息都会随容器删除而丢失。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储 层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发 生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷 后,容器可以随意删除、重新 run ,数据却不会丢失。

  1. Docker仓库(Docker Registry

镜像构建完成后,可以很容易的在当前宿主上运行,但是如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签><标签>(ubuntu:14.04) 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签(ubuntu:latest)。仓库名经常以两段式路径形式出现,比如 jwilder/nginx-proxy ,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这 并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。

Docker Registry 公开服务:Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服 务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务 供用户管理私有镜像。常用公开服务Docker Hub(默认Registry)、CoreOS 的 Quay.io。由于访问限制,国内使用一些加速器:阿里云加速器、DaoCloud 加速器、灵雀云加速器等(此处仅作了解,后期继续补充)。国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓 库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。

私有 Docker Registry:除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方 提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

你可能感兴趣的:(Docker学习记录)