zoukankan      html  css  js  c++  java
  • 深入理解Docker容器执行引擎runC

    1 简介

    根据官方的定义:runC是一个根据OCI标准创建并运行容器的CLI tool。

    Docker就是基于runC创建的,简单地说,runC就是docker中最为核心的部分,容器的创建,运行,销毁等等操作最终都将通过调用runc完成。而runC也有自己的客户端,下面我们将演示如何用runC,以最精简的方式创建并运行一个容器。

    1.1 利用runc运行busybox容器

    下载并编译runC

    # create a 'github.com/opencontainers' in your GOPATH/src
    cd github.com/opencontainers
    git clone https://github.com/opencontainers/runc
    cd runc
    
    make
    sudo make install
    

      

    创建容器的根文件系统

    # create the top most bundle directory
    mkdir /mycontainer
    cd /mycontainer
    
    # create the rootfs directory
    mkdir rootfs
    
    # export busybox via Docker into the rootfs directory
    docker export $(docker create busybox) | tar -C rootfs -xvf -
    

      

    利用runc的spec命令创建默认的配置文件config.json

    runc spec
    

      

    利用runc运行busybox容器

    # run as root
    cd /mycontainer
    runc run mycontainerid
    / # ls
    bin  dev  etc  home  proc  root  sys  tmp  usr  var

      

    可以看到,容器成功运行,此时我们打开另一个终端观察容器的运行状态

    runc list
    ID              PID         STATUS      BUNDLE         CREATED                          OWNER
    mycontainerid   1070        running     /mycontainer   2017-12-20T12:26:30.159978871Z   root
    

      

    事实上,"runc run"是一个复合命令,它包含了容器的创建(runc create),启动(runc start)以及在退出之后对容器进行的销毁(runc delete),从演示的角度看它是最为直观的。但是对于源码分析来说,将创建,启动,销毁三个过程分开,显然会让整个过程更为简单和易于接受。

    下面我们就将结合源码,对整个容器技术最为核心的部分进行探究—— 容器是创建、启动以及销毁的。

    2  容器的创建

  • 相关阅读:
    JS实例
    第一章 机器学习基础
    事件与信号
    微信公众号开发实例
    php学记笔记之函数用途
    php漏洞修复 禁用函数
    删除MYSQL账号多于的空用户
    MySql 建表、添加字段、修改字段、添加索引SQL语句写法
    php对二维数据进行排序
    iis支持IPA和APK文件下载
  • 原文地址:https://www.cnblogs.com/YaoDD/p/8067958.html
Copyright © 2011-2022 走看看