您的位置:首页 > 运维架构 > Docker

Docker总结1/3---基础篇

2020-07-02 11:46 811 查看

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

目录

  • 1.什么是虚拟化
  • 2.什么是Docker
  • 3.Docker有什么有优点
  • 4.容器与虚拟机比较
  • 5.Docker 组件
  • (1)Docker服务器与客户端
  • (2) Docker三大组件
  • Ⅰ 镜像
  • Ⅱ 容器
  • Ⅲ 注册中心
  • 总结
  • 1.什么是虚拟化

    在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术。抽象实体资源,进行重组。

    • 是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组合更好的方式来应用这些资源(不受现有资源的架设方式,地域或物理组态所限制)。

    • 一般所指的虚拟化资源包括【计算能力】和【资料存储】。

    • 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用。

    • 虚拟化技术种类示例:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

    2.什么是Docker

    Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

    Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

    Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。

    Docker 的基础是 Linux 容器(LXC)等技术。

    在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。

    用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

    3.Docker有什么有优点

    (1)上手快

    用户只需要几分钟,就可以把自己的程序“Docker化”。

    Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。

    随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

    (2)明确的逻辑分类

    开发人员 运维人员
    只需要关心容器中运行的应用程序 只需要关心如何管理容器

    Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”(保持开发、测试、生产一致的运行环境)。

    (3)快速高效的开发生命周期

    Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。

    通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。(持续交付和部署,更轻松迁移、维护和扩展

    (4)鼓励使用面向服务的架构

    Docker还鼓励面向服务的体系结构和微服务架构。
    Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型。
    在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,也可以在一个容器中运行多个应用程序)

    4.容器与虚拟机比较

    (1)本质上的区别

    特性 虚拟机 Docker容器
    运行环境 虚拟出一套硬件后,在其上运行一个完成操作系统,在该系统上再运行所需应用进程; 应用进程直接运行与宿主的内核,容器没有自己的内核,而且没有进行硬件虚拟。
    虚拟化 硬件层面 操作系统层面(直接复用本地主机的操作系统)
    优势 可以虚拟出和宿主机器不同的操作系统 启动速度快、占用体积小


    (2)使用上的区别

    特性 容器 虚拟机
    启动 秒级 分钟级
    硬盘使用 一般为MB 一般为GB
    性能 接近原生 较弱
    系统支持量 单机支持上千个容器 一般几十个

    5.Docker 组件

    (1)Docker服务器与客户端

    Docker客户端只需要向Docker服务器或者守护进程(在后台运行并且不受任何终端控制的进程)发出请求,服务器或者守护进程将完成所有工作并返回结果。

    Docker提供了一个命令行工具Docker以及一整套RESTful API。

    你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

    Docker架构(客户端-服务器(C/S))



    (2) Docker三大组件

    镜像【image】、容器【container】、注册中心【registry】

    Ⅰ 镜像

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

    比如:官方进行centos:7.6就包含了完整的一套centos:7.6最小系统的root文件系统。

    Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件之外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

    Docker镜像分层存储

    • 为什么要分层存储?
      Docker镜像包含操作系统完整的root文件系统,体积庞大。
      镜像只是一个虚拟概念,其实际体现是多层文件联合组成。

    • 操作系统
      镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上任何改变之发生在自己这一层。
      在构建镜像的时候,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束之前清理掉。

    • 分层的优点?
      使得镜像的复用、定制变得更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

    • 镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。
      例如:添加一个文件; 执行一个命令; 打开一个窗口。
      也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

    Ⅱ 容器

    Docker容器就是: 一个镜像格式; 一些列标准操作; 一个执行环境。

    • 镜像和容器对比

    不同点

    特征 镜像 容器
    定义 静态定义 运行时的实体(可以被创建、启动、停止、删除、暂停等。容器是基于镜像启动起来的,容器中可以运行一个或多个进程,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
    阶段 Docker生命周期中的构建或者打包阶段 启动或者执行阶段

    相同点

    都是分层存储。
    每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层(为容器运行时读写准备),称为容器存储层

    容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消亡,任何保存于容器存储层的信息都会随容器删除而丢失。因此容器不应该向其存储层写入任何数据,容器存储层要保存无状态化。

    所有的文件写入操作,都应该使用Volume数据卷、或者绑定宿主目录,在这写位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生命周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或重新运行后,数据不会丢失。

    • 示例:

    Docker借鉴了标准集装箱的概念:集装箱运输货物,而Docker运输软件。

    和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器。所有的容器都按照相同的方式将内容“装载”进去。

    Docker也不关心把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

    Ⅲ 注册中心

    Registry

    Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。

    镜像构建完成后,可以很容易在当前宿主机上运行。但是,如果需要在其它服务上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务。

    内容 含义
    仓库和标签 Docker Registry可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。一个仓库包含同一软件不同版本镜像,而标签对应软件各个版本。通过<仓库名>:<标签>指定软件哪个版本镜像。不给标签,将默认latest作为标签。
    公共的Registry Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。
    仓库名 仓库名经常两段式形式。例如:study/nginx,前者是Docker Registry多用户环境下的用户名,后者是对应的软件名。但这并非绝对,取决于使用的具体Docker Registry的软件或服务。

    总结

    到这里,你已经对Docker有了一个初步的认识,更多操作可以关注后面的博客。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息