小知识:运行容器其实不需要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 < 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 制作的更是无从感知。

原文链接:https://www.toutiao.com/a7040433061615649310/

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:windows下apache的简单命令

2023-3-13 16:33:24

建站知识

小知识:重要提醒:年底机房巡检不要忘!

2023-3-13 16:47:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索