youki:Rust开发的容器运行时

吴说深度:加密行业风投VC年度报告 谁最值得跟投?

多数投资者喜欢追踪项目的融资信息,以此作为项目资质的评判标准。本文详细统计了自 2020 年 7 月以来(主要为2021年)的 590 个已发 Token 项目的融资信息,计算自融资信息公布以来的收益率(当前价格/公布日价格)、最大收益(公布以来最高价/公布日…


youki:Rust开发的容器运行时

Rust是时下最流行的编程语言,而容器开发也是一个时兴的应用领域。将两者结合使用Rust来做容器开发是一个值得尝鲜的体验。本文就介绍一个这样的项目:youki是使用Rust的实现OCI运行时规范,类似于runc。

概述

youki 发音为/joʊki/或yoh-key。Youki源于日语单词“youki”,意思是“容器。同时,youki也有“快乐”、“快乐”或“热闹”的意思。用Rust重新造轮子主要基于以下原因:

Rust是实现oci-runtime规范的最佳语言之一。许多非常好的容器工具目前都是用Go编写的。但是,容器运行时需要使用系统调用(例如namespaces(7) , fork(2) ),在Go实现比较麻烦。而用Rust,则方便的多。另外,Rust从语言层面就提供了内存安全。虽然Rust还不是容器领域的开发还是初始阶段,但是很适合探索新领域。

youki有可能比runc更快并使用更少的内存,因此可以在内存使用要求严格的环境中工作。没有任何基准测试,但预计Rust的语义将带来更高的性能。

截止目前youki还没有进入实用阶段,但是越来越接近实际使用,一个测试运行实例:

youki:Rust开发的容器运行时

截止目前相关支状态持如下:

youki:Rust开发的容器运行时

youki的设计与实现结构图如下:

youki:Rust开发的容器运行时

安装

本地构建仅真刺激在Linux上运行。对于其他平台,需要使用Vagrant。运行youki还需要Rust环境(2021版本)和最新版本Docker。可以使用linux发行版的安装。

Debian、Ubuntu系

sudo apt-get install pkg-config libsystemd-dev libdbus-glib-1-dev build-essential libelf-dev libseccomp-dev

红帽系,包括Fedora、Centos、RHEL

sudo dnf install pkg-config systemd-devel dbus-devel elfutils-libelf-devel libseccomp-devel

构建

git clone [email protected]:containers/youki.gitcd youki./build.sh./youki -h # 可以获取youki命令的信息

使用教程

创建并运行容器

首先尝试运行一个执行简单的容器,并执行 sleep 30命令。要以root权限。

mkdir -p chongchong/rootfscd chongchong/

使docker将busybox导出到rootfs目录

docker export $( docker create busybox ) |tar -C rootfs -xvf -

然后,准备一个配置文件。该文件包含容器的元数据和规范,例如要运行的进程、要注入的环境变量、要使用的沙盒功能等。

../youki spec

这会生成一个config.json文件

可以编辑config.json为容器添加自定义行为。修改proces要运行的字段为sleep 30.

"process": {..."args": ["sleep", "30"],...}

然后可以查看一个容器的生命周期:

cd .. # 回到仓库根目录sudo ./youki create -b tutorial_container # 创建一个名为`tutorial_container` 的容器sudo ./youki state tutorial_container # 可以看到容器的状态是`created`sudo ./youki start tutorial_container # 启动容器sudo ./youki list # 会显示容器列表,容器正在`running`sudo ./youki delete tutorial_container # 删除容器

可以将sleep 30更改为其他要执行的命令然后看其执行效果。

无根容器

youki提供以非root用户身份运行容器的能力(无根模式)。要以无根模式运行容器,需要修改config.json,其他步骤同上:

mkdir -p chongchong/rootfscd chongchong

用docker 将busybox导出到rootfs目录

docker export $( docker create busybox ) | tar -C rootfs -xvf -../youki spec --rootless

将以无根模式生成一个config.json 的规范文件

## 根据需要修改 `args` 字段

然后就可以以无根模式创建并运行一个容器

../youki run rootless-container

其他相关

docker守护进程

启动

dockerd --experimental --add-runtime="youki=$(pwd)/target/x86_64-unknown-linux-gnu/debug/youki"

如果抛出错误消息:

failed to start daemon: pid file found, ensure docker is not running or delete /var/run/docker.pid

则表示普通Docker守护程序正在运行,需要将其停止。

然后重复上述命令,应该会启动docker守护进程。

可以在不同的终端中使用 youki 来启动容器。

docker run -it --rm --runtime youki busybox

之后,可以在其他终端中关闭docker守护进程。要重新启动普通的docker守护进程,请运行:

systemctl start docker

集成测试

git submodule update --init --recursive./integration_test.sh

使用模式运行特定的 test_cases

./integration_test.sh linux_ *

Vagrantfile

可以使用Vagrantfile 在 Linux以外的平台上试用 youki。Vagrantfile中准备了两个环境,分别是rootless模式和rootful模式

git clone [email protected]:containers/youki.gitcd youki

默认模式是在rootless开发模式

vagrant upvagrant ssh

要切换到rootful模式下

VAGRANT_VAGRANTFILE=Vagrantfile.root vagrant upVAGRANT_VAGRANTFILE=Vagrantfile.root vagrant sshcd youki./build.sh

总结

本文我们介绍了一个,基于Rust开发的容器运行时youki,目前他还处于很早期的开发状态,可以作为一个好玩尝鲜的工具,也可以作为Rust在容器领域开发的初始项目,期待项目的不断成熟完整,以便可以在生产环境使用。

一起涉及500万美元比特币诈骗案的嫌疑人认罪,被判处20年监禁

据Finance Magnates消息,纽约联邦检察官周五宣布,已被取消律师资格的Philip Reichenthal承认犯有合谋实施电信欺诈罪行,涉及比特币诈骗。 Reichenthal谎称他将作为交易的托管代理人,并与国际逃犯、前珊瑚泉居民Randy Cr…

Click to rate this post!
[Total: 0 Average: 0]

人已赞赏
Rust开发

实战:使用rust开发动态链接库并在Golang中使用(上)

2022-2-17 11:00:34

Rust开发

如何使用 Rust 进行嵌入式开发?

2022-2-17 11:01:40

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