• 容器技术基础原理


    chroot

          chroot是linux系统的一个操作,针对正在运行的软件的进程和它的子进程。

          一个运行在这个环境下经由chroot设置根目录的程序,它不能够对这个指定的根目录之外的文件进行读取更不能进行修改

          chroot 就是可以改变某进程的根目录,使这个程序不能访问目录之外的其他目录

          chroot /home/admin/rootfs  /bin/bash   启动一个sh进程,并且把 /home/centos/rootfs 作为 sh 进程的根目录

    镜像

           它是一个只读的文件和文件夹组合.它包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础.所以想启动一个容器,那首先必须要有一个镜像

            镜像是一个特殊的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据。即镜像不包含任何动态数据,镜像内容在构建后不会被改变

    容器

         镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态

         云原生的代表技术包括容器,服务网格,微服务,不可变基础设施和声明式API

         可变的基础设施

               软件开发完成后,需要工程师或管理员通过SSH 连接到他们的服务器上,然后进行一些脚本安装、deb/rpm 包的安装工作,并逐个机器地调整对应的配置参数及文件。后续还会根据需要对该环境进行不断更改,比如 kernel 升级、配置更新、打补丁等

         不可变基础设施

            不可变基础设施部署完成以后,便成为一种只读状态,不可对其进行任何更改。如果需要更新或修改,就使用新的环境或服务器去替代旧的。不可变基础设施带来了更一致、更可靠、更可预测的设计理念,可以缓解或完全避免可变基础设施中遇到的各种常见问题

           借助容器技术我们可以自动化地构建出不可变的、可版本化管理的、可一致性交付的应用服务体系,这里包括了标准化实例、运行环境等

     容器单进程模式     

         容器实际上是一个“单进程”的模型。因为如果你在容器里启动多个进程,这将会带来很多麻烦。不仅它们的日志记录会混在一起,它们各自的生命周期也无法管理。
         只有一个进程的PID可以为 1,如果PID为1的进程这个时候挂了,或者说失败退出了,那么其他几个进程就会自然而然地成为“孤儿”,无法管理,也无法回收资源

    docker名称空间隔离

        pid namespace:用于隔离进程 ID

        net namespace:隔离网络接口,在虚拟的 net namespace 内用户可以拥有自己独立的 IP、路由、端口等

        mnt namespace:文件系统挂载点隔离

        ipc namespace:信号量,消息队列和共享内存的隔离

        uts namespace:主机名和域名的隔离         

    docker容器进程架构

          

         runC是 Docker 官方按照 OCI 容器运行时标准的一个实现.通俗地讲runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的

        containerd是 Docker 服务端的一个核心组件,它是从dockerd中剥离出来的 ,它的诞生完全遵循 OCI 标准,是容器标准化后的产物.containerd通过 containerd-shim 启动并管理 runC,可以说containerd真正管理了容器的生命周期

        containerd-shim的主要作用是将 containerd 和真正的容器进程解耦,使用 containerd-shim 作为容器进程的父进程,从而实现重启 containerd 不影响已经启动的容器

        dockerd 启动的时候,containerd 就随之启动了,dockerd与containerd一直存在。当执行docker run命令通过 busybox 镜像创建并启动容器时,containerd 会创建 containerd-shim 充当 “垫片” 进程

    busybox 是一个集成了数百个 Linux 命令(例如 curl、grep、mount、telnet 等)的精简工具箱,只有几兆大小,被誉为 Linux 系统的瑞士军刀。我经常会使用 busybox 做调试来查找生产环境中遇到的问题

    docker镜像构成原理

        Dockerfile 的每一行命令都会生成一个独立的镜像层,并且拥有唯一的ID
        Dockerfile 的每一行命令,都生成了一个镜像层,每一层的 diff 夹下只存放了增量数据
    分层的结构使得 Docker 镜像非常轻量,每一层根据镜像的内容都有一个唯一的 ID 值,当不同的镜像之间有相同的镜像层时,便可以实现不同的镜像之间共享镜像层的效果
       镜像的实现原理:
            镜像是由一系列的镜像层(layer )组成,每一层代表了镜像构建过程中的一次提交,当我们需要修改镜像内的某个文件时,只需要在当前镜像层的基础上新建一个镜像层,并且只存放修改过的文件内容。分层结构使得镜像间共享镜像层变得非常简单和方便

       

    容器的操作 

           docker run -it --name=busybox busybox

           1.使用busybox镜像创建并启动一个容器

           2.分配文件系统,并在镜像只读层外创建一个读写层

           3.从Docker IP池中分配一个IP

           4.执行用户的启动命令运行镜像

       

    容器的停止

         

         容器的1号进程是不能被退出的,如果容器中的1号进程被杀死 那么容器也会被杀死

    Docker仓库

            注册服务器(Registry)和仓库(Repository)的区别

            注册服务器是存放仓库的实际服务器,而仓库则可以被理解为一个具体的项目或者目录。注册服务器可以包含很多个仓库,每个仓库又可以包含多个镜像

            镜像地址为 docker.io/centos,docker.io 是注册服务器,centos 是仓库名

     Dockerfile优化

             

                                   

  • 相关阅读:
    RuntimeError: Object: Could not open SDE workspace
    数字证书原理
    ie浏览器总跳转到 http://hao.360.cn
    ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied
    卸载重装ArcGIS Enterprise 注意事项
    修改机器名、IP对arcgis server、portal的影响?
    arcpy调试
    jquery的show/hide/toggle详解
    jquery的回调对象Callbacks详解
    元素全屏居中(不变形)
  • 原文地址:https://www.cnblogs.com/yxh168/p/13614135.html
Copyright © 2020-2023  润新知