Docker理论总结

文章目录

    • 容器的发展
      • 虚拟化技术出现以后
      • 容器的出现
      • 什么是容器技术
    • Docker
      • 什么是Docker
      • Docker的基本组成
      • Docker三要素
        • 1、Docker 镜像
        • 2、Docker容器
        • 3、Docker仓库
      • Docker架构
        • Docker Client
        • Docker daemon
    • Docker是怎样工作的
    • 容器和虚拟机的区别

容器的发展

虚拟化技术出现以后

1、一个物理机可以部署多个app
2、每个app可以独立允许在一个vm里面
3、优点:

  • 资源池:一个物理机的资源分配到了不同的虚拟机里面
  • 容易扩展:加物理机器+虚拟机
  • 容易云华:阿里云,直接在云上创建虚拟机然后运行app就可以了,不需要底层硬件的支持

4、缺点:

  • 每一个虚拟机器都是一个完整的OS,要给其分配资源,当虚拟机数量增多时,OS本身消耗的资源势必增多
  • 开发人员的不同技术栈需要不同的开发环境;开发人员和运维人员的环境不同,可能会出现问题。

5、解决:

  • 容器打包app可以使得这个app运行在任何环境上。
  • 在开发和运维之间搭建了一个桥梁,是实现devops的最佳解决方案
    Docker理论总结_第1张图片

容器的出现

  • Docker是由虚拟机优化而来的 :由于虚拟机是模仿了一台电脑硬件资源,然后上面运行很多OS,存在很多缺点,比如资源占用多,冗余步骤多,启动慢等。linux发展出来了另一种技术:Linux容器也就是容器虚拟化技术
  • Docker比虚拟机的抽象层更少。由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机上的硬件资源。因此在CPU,内存利用率上会有明显优势
  • Docker利用的是宿主机的内核,而不需要GuestOS。因此当新建一个容器时,docker不需要和虚拟机一样重新加载一个OS内核。

什么是容器技术

  • 对软件和其依赖的标准化打包
  • 一种虚拟化的方案
  • 应用之间相互隔离,但是共享同一个OS kernrl
  • 可以允许在很多主流OS上,但是只能运行相同或者相似内核的操作系统
  • 依赖于Linux内核特性:Namespace和Cgroups
    Docker理论总结_第2张图片

Docker

什么是Docker

  • 可以将应用程序自动部署到容器
  • 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
  • docker理念: 一次封装,到处运行【DevOps:开发自运维,一次封装,到处运行】
  • 官网:http://www.docker-cn.com/

Docker的基本组成

  • Docker Client客户端
  • Docker Daemon守护进程
    [- ] Docker是CS架构,Docker客户端向服务器端也就是守护进程发出请求,守护进程处理完所有的工作并返回结果,可以本地访问也可以远程访问
  • Docker Image镜像
  • Docker Container容器:通过镜像启动
  • Docker Register仓库
    Docker理论总结_第3张图片

Docker三要素

Docker理论总结_第4张图片
总结:镜像是Docker运行容器的核心,客户是存放镜像的场所,可见镜像是Docker的核心

1、Docker 镜像

(1) Docker镜像是什么

  • 镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含每个软件所需的所有内容,包括代码,运行时、库、环境变量和配置文件。
  • 镜像是一个层叠的只读文件系统,最底层是引导文件系统bootfs,只在启动时检查。 bootfs主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。当bootfs加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfsrootfs,在bootfs之上。包含的是/dev,/proc等文件。
  • 也就是说,镜像可以看成是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含为运行时准备的一些配置参数[比如匿名卷、环境变量、用户等]。镜像不包含任何动态数据,其内容在构建之后也不会被改变

(2)Docker镜像加载原理:

  • docker的镜像实际上是由一层层的文件系统组成,这种层级的文件系统UnionFS。
    • UnionFS[联合文件系统]:Union文件系统UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像[无父镜像],可以制作各种具体的应用镜像。
    • UnionFS特征:一次同时加载多个文件系统,单从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样只能看到最终的文件
      Docker理论总结_第5张图片
  • 镜像就是一堆只读层的统一视角:
    Docker理论总结_第6张图片
    从上的左边可以看到多个只读层重叠在一起。除了最下面一层,其他层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统UnionFS技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统[右边]。
  • 为什么docker中centos才200M:因此它底层直接用Host的kernel,自己只需要提供rootfs就行了。而一个最精简的rootfs,只需要包括基本的命令,工具和程序库就可以了

(3)Docker为什么要采用分层结构

  • 目的:共享资源
  • 比如:由很多个镜像都是从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

(4)Docker镜像的特点

  • Docker镜像的特点:Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下都叫“镜像层”

2、Docker容器

  • Docker利用容器独立运行的一个或者一组应用。容器是用镜像创建的运行实例。他可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。可以把容器看成是一个建议的Linux环境[包括root用户权限,进程空间,用户空间和网络空间等]和运行在其中的应用查询。类似360的沙箱共
  • 容器的定义和镜像几乎一摸一样,也是一堆层的同一视角,唯一区别在于容器最上面那一层是可读可写的。
    Docker理论总结_第7张图片
  • 容器 = 镜像 + 读写层

3、Docker仓库

  • 集中存放、分发镜像文件的场所。如Docker Hub 和 Docker Cloud
    仓库和仓库注册服务器是由区别的。
  • 仓库注册服务器上往往存放着多个仓库,每个仓库中会包含同一个软件的不同版本的镜像,每个镜像有不同的标签,标签就对应该软件的不同版本。如果不给出标签,默认latest作为默认标签32
  • 仓库分为公开仓库和私有仓库两种形式。最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。默认情况下Docker会到Docker中央仓库寻找镜像文件,当然,可以修改配置指定其他仓库比如私有仓库等去寻找

Docker架构

Docker理论总结_第8张图片
Docker使用C/S架构,Docker客户端和Docker服务器进行交互,客户端向服务器发送命令,服务器负责构建、运行和分发容器。客户端和服务器可以允许在同一台机器上,也可以通过restful、stock或者网络接口与远程服务端进行通信
Docker理论总结_第9张图片
从上图可以看出,
Docker 的核心组件包括:

  • Docker Client
  • Docker daemon
  • Docker Image
  • Docker Registry
  • Docker Container

Docker Client

客户端:可以构建、运行、停止容器等

Docker daemon

daemon是服务器组件,以linux后台服务的方式运行,是Docker最核心的后台进程[就是守护进程]。它负责响应来自Docker客户端的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接收由客户端发送的请求,接收到的请求将通过daemon内部的一个路由分发调度,由具体的函数来执行请求
我们大致可以将其分为以下三部分:

  • Docker Server
  • Engine
  • Job

Docker是怎样工作的

Docker理论总结_第10张图片

Docker是一个CS结构的系统,Docker守护进程运行在主机上,然后通过Socker链接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器,是一个运行时环境,相当于一个集装箱
Docker理论总结_第11张图片

容器和虚拟机的区别

  • 虚拟机技术是虚拟出一套硬件之后,在其上运行了一个完整的OS,在该系统上运行所需的进程

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

  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源

  • Linux容器并不是模拟一个完整的操作系统,而是对进程进行隔离。容器将软件运行所需的所有资源打包到一个隔离的容器中。容器和虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此变得高效轻量并保证部署在任何环境中的软件都能运行。也就是值打包了内核+库资源+设置+软件:
    Docker理论总结_第12张图片

参考:https://cloud.tencent.com/developer/article/1354393

你可能感兴趣的:(#,golang,#,docker)