• 001docker架构介绍


    docker 官网Choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.https://docs.docker.com/engine/install/

    4. Dockerfile完全指南 - Docker Tipshttps://dockertips.readthedocs.io/en/latest/dockerfile-guide.html

    介绍

    Docker用Go编程语言编写,并利用Linux内核的多种功能来交付其功能。 Docker使用一种称为名称空间的技术来提供容器的隔离工作区。 运行容器时,Docker会为该容器创建一组名称空间。 这些名称空间提供了一层隔离。 容器的每个方面都在单独的名称空间中运行,并且对其的访问仅限于该名称空间

    RegistriesClient, Docker_Host

     Client

    操作docker服务器的客户端(命令行或者界面)

    用户使用 Docker 提供的工具(CLI 以及 API 等)来构建,上传镜像并发布命令来创建和启动容器

    K8S:CRI(Container Runtime Interface)

    Docker_Host

    Docker主机;安装Docker服务的主机

    Docker_Daemon:后台进程;运行在Docker服务器的后台进程

    Images:镜像、映像、程序包;Image是只读模板,其中包含创建Docker容器的说明。容器是由Image运行而来Image固定不变

    Containers:容器;在Docker服务器中的容器(一个容器一般是一个应用实例,容器间互相隔离)

    Registries

      用于保存镜像,并提供镜像上传和下载  

    仓库官网https://hub.docker.com/search

    镜像与容器

       镜像(Image 

       容器(Container) 对象(实例)

    容器与虚拟机

     镜像原理

            UnionFS

       联合文件系统是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层一层叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下。Union文件系统是docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

    特性:一次加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件叠加起来,这样最终的文件系统会包含所有底层文件和目录。

    Docker镜像加载原理

    docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

    bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

    rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。 

    平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M??

    原因:对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

    分层的镜像

    Tomcat一共有500M

    为什么 Docker 镜像要采用这种分层结构呢?

    最大的一个好处就是 - 共享资源

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

    隔离原理

     namespace 6项隔离 (资源隔离)

    namespace

    系统调用参数

    隔离内容

    UTS

    CLONE_NEWUTS

    主机和域名

    IPC

    CLONE_NEWIPC

    信号量、消息队列和共享内存

    PID

    CLONE_NEWPID

    进程编号

    Network

    CLONE_NEWNET

    网络设备、网络栈、端口等

    Mount

    CLONE_NEWNS

    挂载点(文件系统)

    User

    CLONE_NEWUSER

    用户和用户组、

    cgroups资源限制   (资源限制) 

    1. 资源限制:限制任务使用的资源总额,并在超过这个 配额时发出提示
    2. 优先级分配:分配CPU时间片数量及磁盘IO带宽大小、控制任务运行的优先级
    3. 资源统计:统计系统资源使用量,如CPU使用时长、内存用量等
    4. 任务控制:对任务执行挂起、恢复等操作
    5. 每种子系统独立地控制一种资源
      1. 子系统

        功能

        cpu

        使用调度程序控制任务对CPU的使用。

        cpuacct(CPU

        Accounting)

        自动生成cgroup中任务对CPU资源使用情况的报告。

        cpuset

        cgroup中的任务分配独立的CPU(多处理器系统时)和内存。

        devices

        开启或关闭cgroup中任务对设备的访问

        freezer

        挂起或恢复cgroup中的任务

        memory

        设定cgroup中任务对内存使用量的限定,并生成这些任务对内存资源使用 情况的报告

        perf_event(Linux

        CPU性能探测器)

        使cgroup中的任务可以进行统一的性能测试

        net_cls(Docker未使 )

        通过等级识别符标记网络数据包,从而允许Linux流量监控程序(Trafic Controller)识别从具体cgroup中生成的数据包

     状态

    一个容器在某个时刻可能处于以下几种状态之一:

    created已经被创建 (使用 docker ps -a 命令可以列出)但是还没有被启动 (使 用 docker ps 命令还无法列出)

    running运行中

    paused容器的进程被暂停了

    restarting:容器的进程正在重启过程中

    exited上图中的 stopped 状态,表示容器之前运行过但是现在处于停止状态(要区别于 created 状态,它是指一个新创出的尚未运行过的容器)。可以通过 start 命令使其重新进入 running 状态

    destroyed:容器被删除了,再也不存在了

  • 相关阅读:
    TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调
    HTTP响应
    Go语言实现HTTP正向代理
    四、2023.9.30.C++面向对象end.4
    Linux用户和用户组信息管理
    (二)springcloud实战之config配置中心
    1519_AURIX TC275 SRI总线部分相关寄存器的梳理
    [单片机框架][bsp层][N32G4FR][bsp_gpio] GPIO配置和使用
    要努力,但也别焦虑
    十几年稳坐“大哥”位,搞Java的程序员就是这么“牛x”!
  • 原文地址:https://blog.csdn.net/qq_26594041/article/details/131144373