安装并运行RunC

简介: 本文讲的是安装并运行RunC,【编者的话】 Docker 是时下最为流行的开源容器技术,而 runC又是opencontainer发布的一款根据OCF 规范批量生成和运行容器的CLI工具。现在让我们来认识一下这个工具。
本文讲的是安装并运行RunC 【编者的话】 Docker 是时下最为流行的开源容器技术,而 runC又是opencontainer发布的一款根据OCF 规范批量生成和运行容器的CLI工具。现在让我们来认识一下这个工具。

Get runC

在旧金山举行的DockerCon大会上, 开放容器项目 和一个运行容器的CLI工具runC同时和大家见面。runC是 libcontainer 的一层包装(wrapper )。

它是Docker捐献给开放容器项目用来作为参考实现的。这听起来很有意思,尤其是主要的供应商是OCI的一部分,就像rkt之于CoreOS。

让我们签出 runC 源码用它把Docker容器跑起来吧。

安装runC

runC目前不提供二进制源。需要先安装Go语言环境,然后签出runC代码才能编译runC:
mkdir -p ~/golang/src/github.com/opencontainers/  
cd ~/golang/src/github.com/opencontainers/  
git clone https://github.com/opencontainers/runc  
cd ./runc  
make  
sudo make install 

以上这些指令是在Ubuntu 14.04机器上运行的,并未在其它环境验证。

现在,你应该编译得到自己的二进制runC了。

运行一个容器

runC的运行级别比Docker更低,因此他只需要镜像文件在文件夹或者包文件中。我们使用正在运行的Docker容器导出一个打包文件并解压到文件夹中即可。
mkdir ./goapp  
cd ./goapp  
docker pull geku/go-app:0.1  
CONTAINER_ID=$(docker run -d geku/go-app:0.1)  
docker export -o go-app.tar $CONTAINER_ID  
tar -xf go-app.tar  
rm go-app.tar  

现在我们的文件中都是容器文件。我们必须先创建 container.json 文件,然后运行它。
{ "version": "0.1",
    "os": "linux",
    "arch": "amd64",
    "processes": [
            {
                    "tty": true,
                    "user": "daemon",
                    "args": [
                            "/app/go-app"
                    ],
                    "env": [
                            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                            "TERM=xterm"
                    ],
                    "cwd": ""
            }
    ],
    "root": {
            "path": "./",
            "readonly": true
    },
    "cpus": 1.1,
    "memory": 128,
    "namespaces": [
            {
                    "type": "process"
            },
            {
                    "type": "mount"
            },
            {
                    "type": "ipc"
            }
    ],
    "capabilities": [
            "AUDIT_WRITE",
            "KILL",
            "NET_BIND_SERVICE"
    ],
    "devices": [
            "null",
            "random",
            "full",
            "tty",
            "zero",
            "urandom"
    ],
    "mounts": [
            {
                    "type": "proc",
                    "source": "proc",
                    "destination": "/proc",
                    "options": ""
            },
            {
                    "type": "tmpfs",
                    "source": "tmpfs",
                    "destination": "/dev",
                    "options": "nosuid,strictatime,mode=755,size=65536k"
            },
            {
                    "type": "devpts",
                    "source": "devpts",
                    "destination": "/dev/pts",
                    "options": "nosuid,noexec,newinstance,ptmxmode=0666,mode=0620,gid=5"
            },
            {
                    "type": "tmpfs",
                    "source": "shm",
                    "destination": "/dev/shm",
                    "options": "nosuid,noexec,nodev,mode=1777,size=65536k"
            },
            {
                    "type": "mqueue",
                    "source": "mqueue",
                    "destination": "/dev/mqueue",
                    "options": "nosuid,noexec,nodev"
            },
            {
                    "type": "sysfs",
                    "source": "sysfs",
                    "destination": "/sys",
                    "options": "nosuid,noexec,nodev"
            }
    ]
}   

当运行 runc spec 时,runC工具根据上面的一些配置生成容器。很显然,我们必须在 processes/args 中设置过程命令而且要移除 network ,再将 uts 命名空间分享到主机网络。基于以上原因,
我们也应该移除不必要的 hostname 。最后我们还应该设置一下 root path为  ./.

当准备启动一个容器时确保我们的 container.json 存在镜像的root根目录。
cd ./goapp  
sudo runc  

为了验证容器内部的应用程序是否正在运行,我们可以发送一个HTTP请求:
curl localhost:5000/json  
{"hostname":"demo","env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"TERM=xterm","HOME=/usr/sbin"],"num_cpu":4,"go_max_procs":1} 

哇,我们的第一个容器使用runC开始运行了!这是一个简单的例子,但演示了如何使用runC运行Docker镜像。

原文链接: Getting Started with runC(翻译:张亚龙)

原文发布时间为:2015-09-18
本文作者:ylzhang 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:安装并运行RunC
目录
相关文章
|
负载均衡 Ubuntu 应用服务中间件
|
SQL 安全 PHP
|
Linux 开发工具 C语言
Linux 安装 gcc 编译运行 C程序
Linux 安装 gcc 编译运行 C程序
584 0
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
276427 0
|
搜索推荐 容器
containerd环境搭建指南
关于如何搭建containerd环境的详细指南,包括通过yum和二进制方式安装containerd的步骤,以及安装和配置runc的必要性。
3172 3
containerd环境搭建指南
|
缓存 Ubuntu Linux
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
1838 25
|
存储 人工智能 缓存
怎么根据自己的业务选择阿里云服务器配置大小?
本文指导如何根据业务需求精准选择阿里云服务器配置,涵盖个人轻量级至企业级、计算密集型等场景,推荐不同实例类型、存储与带宽方案,并提供成本优化策略,如包年包月节省成本、按需升级配置及选用性价比高的自研ARM架构实例。帮助用户在数字化转型中实现性能与成本的平衡。 注:以上配置与价格基于阿里云2025年官方数据,实际信息可能有所调整,请以官网实时页面为准。
|
运维 监控 安全
Linux 面板推荐:Websoft9
Websoft9 是一款高效 Linux 服务器管理面板,支持一键部署 200+ 开源应用,提供全生命周期安全防护与轻量化资源占用,适配主流系统,适合开发者及企业快速搭建业务环境
532 2
|
数据可视化 机器人 编译器
科力雷达Lidar使用指南
本文是科力2D激光雷达Lidar的使用指南,包括了雷达的安装、编译、IP配置、上位机软件使用、ROS节点运行、参数配置、官方文档和软件资源链接,以及雷达通讯建立失败等问题的解决方案。适用于Ubuntu20.04(x86) PC和Ubuntu20.04(Arm) Nvidia Orin环境。
1271 1
科力雷达Lidar使用指南
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
26003 1

热门文章

最新文章