ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用runc创建亚博体育一个docker容器案例

2020-03-07 13:01:57  阅读:201  来源: 互联网

标签:容器 00 mycontainer runc 亚博 xr docker root


runc 是 docker 捐赠给 OCI 的亚博体育(yabo618點cn)一个符合标准的 runtime 实现,目前 docker 引擎内部也是基于 runc 构建的。分析 runc 这个项目,加深对 OCI 的理解。

1.先创建以容器的目录,例如mycontainer

mkdir mycontainer
 

2.准备一个rootfs的目录,供初始化一个容器所需要的的文件系统

cd mycontainer 
mdkir rootfs

docker export $(docker create busybox) | tar -C rootfs -xvf -
查看下载的文件系统
[root@docker2 mycontainer]# ll rootfs/
总用量 16
drwxr-xr-x 2 root  root  12288 5月   9 2019 bin
drwxr-xr-x 4 root  root     43 3月   6 21:41 dev
drwxr-xr-x 3 root  root    139 3月   6 21:41 etc
drwxr-xr-x 2 65534 65534     6 5月   9 2019 home
drwxr-xr-x 2 root  root      6 3月   6 21:41 proc
drwx------ 2 root  root      6 5月   9 2019 root
drwxr-xr-x 2 root  root      6 3月   6 21:41 sys
drwxrwxrwt 2 root  root      6 5月   9 2019 tmp
drwxr-xr-x 3 root  root     18 5月   9 2019 usr
drwxr-xr-x 4 root  root     30 5月   9 2019 var
 

3.生成一个config.json文件告诉runc如何运行一个容器,准备容器运行时的标准

[root@docker2 mycontainer]# runc spec
[root@docker2 mycontainer]# ll
总用量 4
-rw-r--r--  1 root root 2618 3月   6 21:41 config.json
drwxr-xr-x 12 root root  137 3月   6 21:41 rootfs
 

查看config.json的内容,内容较长就不展示了

more /run/runc/box/state.json  | python  -mjson.tool
 

4.使用runc运行一个容器 

[root@docker2 mycontainer]# runc run box(容器的名称)
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # hostname
runc
/ # whoami
root
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
/ #
 

5.在其他的虚拟终端查看容器的运行信息

[root@docker2 ~]# runc list

ID          PID         STATUS      BUNDLE              CREATED                          OWNER

box         31158       running     /root/mycontainer   2020-03-06T13:44:24.565967666Z   root

目前,在我的机器上,runc 会把容器的运行信息保存在 /run/runc 目录下:

[root@docker2 ~]# tree  /run/runc/
/run/runc/
└── box
    └── state.json
1 directory, 1 file
 

除了 run 命令之外,我们也能通过create、start、stop、kill 等命令对容器状态进行更精准的控制。继续实验,因为接下来要在后台模式运行容器,所以需要对 config.json 进行修改。改动有两处,把 terminal 的值改成 false,修改 args 命令行参数为 sleep 20:

        "process": {
                "terminal": false,
                "user": {
                        "uid": 0,
                        "gid": 0
                },
                "args": [
                        "sh"
                ],
 

接着,用 runc 子命令来控制容器的运行,实现各个容器状态的转换:

kill容器
[root@docker2 mycontainer]# runc kill box KILL
[root@docker2 mycontainer]# runc list
ID          PID         STATUS      BUNDLE      CREATED     OWNER

// 使用 create 创建出容器,此时容器并没有运行,只是准备好了所有的运行环境// 通过 list 命令可以查看此时容器的状态为 `created`➜  runc create mycontainerid➜  runc list
ID              PID         STATUS      BUNDLE                                    CREATED                          OWNER
mycontainerid   15871       created     /home/cizixs/Workspace/runc/mycontainer   2017-11-02T08:05:50.658423519Z   root// 运行容器,此时容器会在后台运行,状态变成了 `running`➜  runc start mycontainerid➜  runc list
ID              PID         STATUS      BUNDLE                                    CREATED                          OWNER
mycontainerid   15871       running     /home/cizixs/Workspace/runc/mycontainer   2017-11-02T08:05:50.658423519Z   root// 等待一段时间(20s)容器退出后,可以看到容器状态变成了 `stopped`➜  runc list
ID              PID         STATUS      BUNDLE                                    CREATED                          OWNER
mycontainerid   0           stopped     /home/cizixs/Workspace/runc/mycontainer   2017-11-02T08:05:50.658423519Z   root// 删除容器,容器的信息就不存在了➜  runc delete mycontainerid➜  runc list
ID          PID         STATUS      BUNDLE      CREATED     OWNER

标签:容器,00,mycontainer,runc,亚博,xr,docker,root
来源: https://www.cnblogs.com/yb880cn/p/12433653.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有