新聞中心
云計(jì)算 這個(gè)有點(diǎn)標(biāo)題黨的意思,但確實(shí)是事實(shí):容器的鏡像只是組織rootfs,如果我們提前準(zhǔn)備好rootfs,那么就不需要容器的鏡像。

這個(gè)有點(diǎn)標(biāo)題黨的意思,但確實(shí)是事實(shí):容器的鏡像只是組織rootfs,如果我們提前準(zhǔn)備好rootfs,那么就不需要容器的鏡像。
下面我們通過一個(gè)實(shí)戰(zhàn)演示一下,如何直接通過runc啟動(dòng)容器。
- $ mkdir my_container && cd my_container
- $ runc spec
通過spec命令便可以生成一個(gè)config.json文件。文件的內(nèi)容大概是下面這樣的
- {
- "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" }
- ]
- }
- }
里面就是標(biāo)準(zhǔn)的RUNC格式,主要是定義了啟動(dòng)命令、env、rootfs、主機(jī)名、mount掛載、namespace等。
然后我們創(chuàng)建一個(gè)rootfs目錄
- $ mkdir rootfs
然后我們寫一個(gè)打印主機(jī)名的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/
然后啟動(dòng)容器
- $ sudo runc create mycont1
- $ sudo runc start mycont1
便可以直接輸出”runc“(因?yàn)樯厦鎠pec定義的hostname就是runc)。
所以對(duì)應(yīng)容器來說,只是需要一個(gè)rootfs,其實(shí)這個(gè)rootfs是怎么生成的,它其實(shí)并不關(guān)心。至于是不是用overlay 制作的更是無從感知。
網(wǎng)站題目:運(yùn)行容器其實(shí)不需要Docker鏡像
本文來源:http://www.dlmjj.cn/article/dppgceh.html


咨詢
建站咨詢
