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

云计算
这个有点标题党的意思,但确实是事实:容器的镜像只是组织rootfs,如果我们提前准备好rootfs,那么就不需要容器的镜像。

这个有点标题党的意思,但确实是事实:容器的镜像只是组织rootfs,如果我们提前准备好rootfs,那么就不需要容器的镜像。

[[439964]]

下面我们通过一个实战演示一下,如何直接通过runc启动容器。

 

$ mkdir my_container && cd my_container 
$ runc spec 
  • 1.
  • 2.

 

通过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" } 
        ] 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

 

里面就是标准的RUNC格式,主要是定义了启动命令、env、rootfs、主机名、mount挂载、namespace等。

然后我们创建一个rootfs目录

 

$ mkdir rootfs 
  • 1.

然后我们写一个打印主机名的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/ 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

 

然后启动容器

 

$ sudo runc create mycont1 
$ sudo runc start mycont1 
  • 1.
  • 2.

 

便可以直接输出”runc“(因为上面spec定义的hostname就是runc)。

 

所以对应容器来说,只是需要一个rootfs,其实这个rootfs是怎么生成的,它其实并不关心。至于是不是用overlay 制作的更是无从感知。

 

责任编辑:华轩 来源: 今日头条
相关推荐

2014-09-24 09:31:31

Dockersshd

2021-05-26 10:19:01

jreJava应用程序

2017-09-19 15:40:23

Linuxsudo命令密码

2017-03-13 13:54:40

戴尔

2009-11-23 12:45:22

2012-08-23 09:50:07

测试测试人员软件测试

2015-05-05 14:50:21

Python不需要操作系统

2024-09-26 18:04:02

2015-09-30 09:57:53

天分热情工程师

2013-07-18 09:21:32

代码文档

2014-01-17 13:09:48

Linux碎片整理

2022-09-14 15:10:40

前端架构

2010-11-23 10:55:47

跳槽

2022-02-15 07:26:34

web前端算法题

2018-01-29 13:18:42

前端JavaScript

2015-08-20 10:56:19

算法界面开发

2013-12-02 09:43:29

字符串编程

2024-02-22 09:00:00

LogitMat数据集算法

2016-10-26 13:35:43

云自动资源负载

2023-01-28 13:34:47

Web 3.0区块链互联网
点赞
收藏

51CTO技术栈公众号