服务器之家

服务器之家 > 正文

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

时间:2021-12-13 23:32     来源/作者:云技术趣谈

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

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

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

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

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

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

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

然后我们创建一个rootfs目录

  1. $ mkdir rootfs

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

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

然后启动容器

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

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

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

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

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部