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

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

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

[[439964]]

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

 

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

 

通过spec命令便可以生成一个config.json文件。文件的内容大概是下面这样的

 

  1.     "ociVersion""1.0.1-dev"
  2.     "process": { 
  3.         "terminal"true
  4.         "user": { 
  5.             "uid": 0, 
  6.             "gid": 0 
  7.         }, 
  8.         "args": [ 
  9.             "sh" 
  10.         ], 
  11.         "cwd""/"
  12.         "env": [ ... ], 
  13.         "capabilities": { ... }, 
  14.         "rlimits": [ ... ] 
  15.     }, 
  16.     "root": { 
  17.         "path""rootfs"
  18.         "readonly"true 
  19.     }, 
  20.     "hostname""runc"
  21.     "mounts": [ ... ], 
  22.     "linux": { 
  23.         "namespaces": [ 
  24.             { "type""pid" }, 
  25.             { "type""network" }, 
  26.             { "type""ipc" }, 
  27.             { "type""uts" }, 
  28.             { "type""mount" } 
  29.         ] 
  30.     } 

 

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

然后我们创建一个rootfs目录

 

  1. $ mkdir rootfs 

然后我们写一个打印主机名的Go程序,编译后并拷贝到rootfs里面。

 

  1. $ cat <<EOF > main.go 
  2. package main 
  3.  
  4. import "fmt" 
  5. import "os" 
  6.  
  7. func main() { 
  8.     fmt.Println(os.Hostname()) 
  9. EOF 
  10.  
  11. $ GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o printme 
  12. $ mv printme rootfs/ 

 

然后启动容器

 

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

 

便可以直接输出”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

戴尔

2012-08-23 09:50:07

测试测试人员软件测试

2009-11-23 12:45:22

2015-05-05 14:50:21

Python不需要操作系统

2024-09-26 18:04:02

2015-09-30 09:57:53

天分热情工程师

2013-12-02 09:43:29

字符串编程

2015-08-20 10:56:19

算法界面开发

2024-02-22 09:00:00

LogitMat数据集算法

2018-01-29 13:18:42

前端JavaScript

2022-09-14 15:10:40

前端架构

2014-01-17 13:09:48

Linux碎片整理

2022-02-15 07:26:34

web前端算法题

2013-07-18 09:21:32

代码文档

2010-11-23 10:55:47

跳槽

2020-02-18 10:00:15

数据库工具技术

2020-12-20 18:08:31

业务层服务化微服务
点赞
收藏

51CTO技术栈公众号