zoukankan      html  css  js  c++  java
  • Docker学习一:简单理解docker技术原理

    备注:学习素材来源于拉钩教育课程:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=455#/detail/pc?id=4572

    一、雏形chroot

    首先了解下docker最早的雏形chroot:

      chroot是在unix系统的一个操作,针对正在运作的软件行程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由chroot设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。

      通俗的说,chroot可以限制程序运行的根目录,使之不能访问其他目录。

    通过如下命令创建一个模拟的系统:

    mkdir rootdfs
    cd rootfs 
    docker export $(docker create busybox) -o busybox.tar
    tar -xf busybox.tar

    查看rootdfs目录下文件:

    使用以下命令,可以启动一个 sh 进程,并且把 /data/rootfs 作为 sh 进程的根目录

    # chroot /data/rootfs /bin/sh

    进入sh进程后执行/bin/ls命令查看文件,可以发现文件已经和主进程隔离:

     继续执行/bin/ip route命令,可以看到还是共享的主机的网络,也就是并未实现完整的隔离:

    二、Docker容器原理

    Docker 主要是利用 Linux 的 Namespace 、Cgroups 和联合文件系统三大机制来保证实现:

    1、使用 Namespace 做主机名、网络、PID 等资源的隔离,其中docker主要用到的命名空间:

    • pid namespace:用于隔离进程 ID。
    • net namespace:隔离网络接口,在虚拟的 net namespace 内用户可以拥有自己独立的 IP、路由、端口等。
    • mnt namespace:文件系统挂载点隔离。
    • ipc namespace:信号量,消息队列和共享内存的隔离。
    • uts namespace:主机名和域名的隔离。

    2、使用 Cgroups 对进程或者进程组做资源(例如:CPU、内存等)的限制

    3、使用联合文件系统用于镜像构建和容器运行环境

      是一种通过创建文件层进程操作的文件系统,因此,联合文件系统非常轻快。Docker 使用联合文件系统为容器提供构建层,使得容器可以实现写时复制以及镜像的分层构建和存储。常用的联合文件系统有 AUFS、Overlay 和 Devicemapper 等。

  • 相关阅读:
    这两天又是一次巨大的飞跃
    防范式编程:
    泛型那点儿事儿 泛型概述 简单样例代码
    FindPrivateKey X509
    Remoting Generic Async Queue (Release 3) 不受 Remoting 对象生存期过期约束
    AntiXSS Library v3.0
    X509 static RSACryptoServiceProvider 高并发加解密
    EncodingHelper Identify Encoding by BOM
    NetStatTool
    EditPlus 于 20090602 升级到 v3.11(340)
  • 原文地址:https://www.cnblogs.com/canghai1024/p/13629569.html
Copyright © 2011-2022 走看看