加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 襄阳站长网 (https://www.0710zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

运行容器其实不需要 Docker镜像

发布时间:2023-02-17 11:14:50 所属栏目:云计算 来源:
导读:  这个有点标题党的意思,但确实是事实:容器的镜像只是组织rootfs,如果我们提前准备好rootfs,那么就不需要容器的镜像。
  
   运行容器其实不需要Docker镜像
  
  下面我们通过一个实战演示一下,如
  这个有点标题党的意思,但确实是事实:容器的镜像只是组织rootfs,如果我们提前准备好rootfs,那么就不需要容器的镜像。
  
   运行容器其实不需要Docker镜像
  
  下面我们通过一个实战演示一下,如何直接通过runc启动容器。
  
  $ mkdir my_container && cd my_container
  $ runc spec
  通过spec命令便可以生成一个config.json文件。文件的内容大概是下面这样的
  
  {
      "ociVersion": "1.0.1-dev",
      "process": {
          "terminal": true,
          "user": {
              "uid": 0,
              "gid": 0
          },
          "args": [
              "sh"
          ],
          "cwd": "/",
          "env": [ ... ],
          "capabilities": { ... },
          "rlimits": [ ... ]
      },
      "root": {
          "path": "rootfs",
          "readonly": true
      },
      "hostname": "runc",
      "mounts": [ ... ],
      "linux": {
          "namespaces": [
              { "type": "pid" },
              { "type": "network" },
              { "type": "ipc" },
              { "type": "uts" },
              { "type": "mount" }
          ]
      }
  }
  里面就是标准的RUNC格式,主要是定义了启动命令、env、rootfs、主机名、mount挂载、namespace等。
  
  然后我们创建一个rootfs目录
  
  $ mkdir rootfs
  然后我们写一个打印主机名的Go程序,编译后并拷贝到rootfs里面。
  
  $ cat <<EOF > main.go
  package main
  
  import "fmt"
  import "os"
  
  func main() {
      fmt.Println(os.Hostname())
  }
  EOF
  
  $ GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o printme
  $ mv printme rootfs/
  然后启动容器
  
  $ sudo runc create mycont1
  $ sudo runc start mycont1
  便可以直接输出”runc“(因为上面spec定义的hostname就是runc)。
  
  所以对应容器来说,只是需要一个rootfs,其实这个rootfs是怎么生成的,它其实并不关心。至于是不是用overlay 制作的更是无从感知。
 

(编辑:PHP编程网 - 襄阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!