zoukankan      html  css  js  c++  java
  • 第1章:docker介绍

    1.容器的介绍

      容器是一种基础工具,可以部分或完全能封闭数据使其做到数据隔离的作用。

    2.容器的发展

      FreeBASE Jail --> Linux vserver --> LXC --> docker

      开始:隔离一些功能,但是想使用还需用C语言其调用,所以想用好容器还需精通C语言

    • chroot:完整的根系统(FHS)功能
    • UTSCLONE_NEWUTS主机名与域名
    • IPCCLONE_NEWIPC信号量、消息队列和共享内存
    • PIDCLONE_NEWPID进程编号
    • NetworkCLONE_NEWNET网络设备、网络栈、端口等
    • MountCLONE_NEWNS挂载点(文件系统)
    • UserCLONE_NEWUSER用户和用户组

      LXC:

    • 将功能封装方便做容器的生命周期

           docker 

    •  镜像安装实现功能

    3.容器一般隔离的什么功能

    • chroot:完整的根系统(FHS)功能
    • UTSCLONE_NEWUTS主机名与域名
    • IPCCLONE_NEWIPC信号量、消息队列和共享内存
    • PIDCLONE_NEWPID进程编号
    • NetworkCLONE_NEWNET网络设备、网络栈、端口等
    • MountCLONE_NEWNS挂载点(文件系统)
    • UserCLONE_NEWUSER用户和用户组

    4.容器为什么能够实现这些功能的隔离

       容器技术的核心功能就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。其中,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法

    • 1. Namespace 隔离

        Linux Namespace是Linux提供的一种内核级别环境隔离的方法。Linux内核中提供了6种namespace隔离的系统调用,如下所示:(官方文档在这里Namespace in Operation

    namespace系统调用参数隔离内容
    UTS CLONE_NEWUTS 主机名与域名
    IPC CLONE_NEWIPC 信号量、消息队列和共享内存
    PID CLONE_NEWPID 进程编号
    Network CLONE_NEWNET 网络设备、网络栈、端口等
    Mount CLONE_NEWNS 挂载点(文件系统)
    User CLONE_NEWUSER 用户和用户组

      2. Cgroups 资源限制

      通过linux namespace,我们已经能够创建出一个资源隔离的进程了,也就是所谓的“容器”,但这个“容器”尚不完整,还需要对其进行资源限制。为什么呢?这里通过PID namespace为例进行说明。

      虽然容器内的第 1 号进程在“障眼法”的干扰下只能看到容器里的情况,但是从宿主机的角度来看,它作为第 100 号进程与其他所有进程之间依然是平等的竞争关系这就意味着,虽然第 100 号进程表面上被隔离了起来,但是它所能够使用到的资源(比如 CPU、内存),却是可以随时被宿主机上的其他进程(或者其他容器)占用的

    5.传统虚拟化与容器的区别

    • 传统虚拟化

      传统虚拟化分为基于硬件和基于软件,软件中又分为应用虚拟化和平台虚拟化(包含虚拟技术),平台虚拟化中又分为完全虚拟化部分虚拟化。

      传统的虚拟化是在硬件层面实现虚拟化:需要有额外的虚拟机管理应用和虚拟操作层。

           需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

    • 容器

           共用宿主机内核,运行服务,损耗少,启动快,性能高

      不需要硬件的支持。不需要模拟硬件,共用宿主机的内核,启动时间秒级(没有开机启动流程)

      docker容器时在操作系统层面上实现需要虚拟化直接复用本地的操作系统。

    最大的缺点就是隔离不彻底。

    • 1)容器知识运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核。
    • 2)在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间,即如果某个容器修改了时间,那整个宿主机的时间都会随之修改。
    • 3)容器给应用暴露出来的攻击面比较大,在生产环境中,没有人敢把运行在物理机上的Linux容器暴露在公网上。

      下面是两者的差别解析:

    6.docker的三大核心概念

    • 镜像(image):  类似于虚拟机的快照,只能读不能写,每条命令都会产生一个层,层越少越好   
    • 容器(Container) : 轻量级的沙箱,docker利用容器来运行和隔离应用
    •  仓库(Repository): 类似于代码仓库,放镜像文件的场所,仓库注册服务器(库)上有多个仓库,每个仓库可以放多个镜像,每个镜像都有不同的标签,运行多个容器。仓库分为私有仓库和公有仓库(最大的公有仓库hub.docker.com)不管是公有的还是私有的,都可以上传(push)下载(pull)镜像。

      注意:镜像只能读,容器在启动时会创建一层可写层作为最上层。

      三大核心关系:仓库(私有仓库和公有仓库)中保存着镜像,镜像运行起来的为容器。

      如图所示:

    7.docker的构想

         实现:“Build ,Ship and Run Any App ,Any-Where”,及通过应用封装,分发,部署,运行的生命周期进行管理,达到“一次分装,到处运行”。

    8.docker的优点

    • 更加快捷的交付和部署
    • 更加有效的资源利用
    • 更加轻松的迁移和扩展

    更加简单的更新和管理(涉及到dickerfile配置文件)

    下一章,我们会有docker的安装

  • 相关阅读:
    CISCO实验记录九:NAT地址转换
    CISCO实验记录八:ACL访问控制
    【零基础】风格迁移之deep-painterly-harmonization的安装和使用
    CISCO实验记录七:OSPF
    【零基础】看懂“深度学习”的优势
    数学专业各学科视频网址
    Flash网站Loading制作
    30张图 讲述真实的人性
    【UXPA工作坊小记】郎学明:做更“有用”的用户研究
    科学训练传播训练营///第一期:科学问题的复杂性///参后感觉
  • 原文地址:https://www.cnblogs.com/hanjiali/p/14077929.html
Copyright © 2011-2022 走看看