Rkt简介

Rkt诞生于2014年12月,是一种与Docker类似的容器引擎,由CoreOS公司主导,得到了Redhat、Google、Vmware等公司的支持,更加专注于解决安全、兼容、执行效率等方面的问题。

CoreOS公司最早是Docker的支持者,其产品CoreOS操作系统是适用于企业的轻量级容器化的Linux发行版,是Docker生态圈的重要一员。随着Docker在容器行业变得逐渐强大,Docker也越来越臃肿,CoreOS公司希望有一个更加开放和中立的容器标准,因此推出了自己的容器计划。

Rkt主要的特征包括:

(1)原生支持Pod :Rkt和Kubernetes联系更紧密,基本执行单元是Kubernetes中的Pod,将资源和用户应用连接在一起。

(2)安全 :Rkt的开发原则是默认安全,具有一系列安全特征,例如支持SELinux、TPM和在硬件隔离的虚拟机中运行。Rkt包含权限拆分功能,旨在避免不必要的以root权限运行的操作,同时提供默认的签名验证与其它出于安全性考虑的先进功能。

(3)可组合性 :采用了无后台守护程序模式,意味着能够轻松与标准init系统相集成,例如systemd与upstart,或者其它集群编排系统,例如Nomad与Kubernetes。

(4)开放标准和兼容性 :Rkt实现了AppC规范,支持 Container Networking Interface specification,镜像格式为App Container Image,简称ACI,也可以运行Docker镜像。

AppC标准应用容器规范

CoreOS公司结合社区的容器实现,制定了开放容器规范,即AppC,全称是“Application Container Specification(标准应用容器规范)”,Rkt是AppC规范的一个具体实现。

AppC容器规范设计目标有以下特征:

(1)组件式工具 :用于下载、安装和运行容器的操作工具应该相互独立可替换且良好的集成。

(2)镜像安全性 :传输需要使用加密协议,容器工具应当含有验证机制和应用标识,避免不安全来源的镜像。

(3)去中心化 :镜像发现应该使用分布式的检索和命名空间。支持多种协议,例如BitTorrent协议,在私有环境中可以不用注册。

(4)开放性标准 :容器镜像的格式与运行应该由社区制定和开发。不同的工具实现都能够运行此镜像文件。

Rkt容器的基本使用方法

Rkt预装在CoreOS系统中,也可以安装在其他Linux发行版中,下面以CentOS系统为例介绍。安装方式可以从GitHub网站下载软件包安装,也可以选择压缩包方式安装;Rkt的最新版本是1.29.0。

Rkt软件下载https://github.com/rkt/rkt/releases

(1)下载Rkt软件

wget https://github.com/rkt/rkt/releases/download/v1.29.0/rkt-v1.29.0.tar.gz

(2)安装软件 绿色安装,将软件包解压至本地后就可以使用。

tar xzvf rkt-v1.29.0.tar.gz

cd rkt-v1.29.0

(3)检查版本

rkt version

rkt Version: 1.29.0

appc Version: 0.8.11

Go Version: go1.8.3

Go OS/Arch: linux/amd64

执行rkt version命令后程序返回了Rkt工具和AppC标准的版本信息,表示软件已经正确安装了。

(4) 下载镜像

Rkt对镜像的安全性要求较高,在镜像下载和运行前,需要添加镜像发布者的公共密钥,用来验证镜像信息,避免不安全的镜像来源。

下面的命令添加CoreOS的签名信息

rkt trust --prefix=coreos.com/etcd

Prefix: "coreos.com/etcd"

Key: "https://coreos.com/dist/pubkeys/aci-pubkeys.gpg"

GPG key fingerprint is: 8B86 DE38 890D DB72 9186 7B02 5210 BD88 8818 2190

CoreOS ACI Builder <release@coreos.com>

Are you sure you want to trust this key (yes/no)? yes

Trusting "https://coreos.com/dist/pubkeys/aci-pubkeys.gpg" for prefix "coreos.com/etcd".

Added key for prefix "coreos.com/etcd" at "/etc/rkt/trustedkeys/prefix.d/coreos.com/etcd/8b86de38890ddb7291867b025210bd8888182190"

Rkt使用content addressable storage(CAS)来在本地存放镜像。下载后的镜像会存放在/var/lib/rkt/cas/blob/sha512/仓库目录中,并以SHA512哈希值作为镜像的文件名。

对于私有的仓库,需要提供用户名和密码等认证信息;rkt支持通过配置文件提供多种认证信息。如下在/etc/rkt/auth.d/目录下添加一个认证信息配置文件。

/etc/rkt/auth.d/coreos-basic.json:

"rktKind": "auth",

"rktVersion": "v1",

"domains": ["coreos.com", "tectonic.com"],

"type": "basic",

"credentials": {

"user": "foo",

"password": "bar"

Rkt也可以支持下载运行Docker镜像,需要在镜像路径前面加上docker://,由于Docker镜像是没有签名认证机制的,因此需要添加--insecure-options=image参数。下面的命令下载了ubuntu的Docker镜像。

rkt fetch --insecure-options=image docker://ubuntu

Downloading sha256:fc0342a94c8 [=============================] 170 B / 170 B

Downloading sha256:f6d82e297bc [=============================] 846 B / 846 B

Downloading sha256:275abb2c8a6 [=============================] 621 B / 621 B

Downloading sha256:9f15a39356d [=============================] 854 B / 854 B

Downloading sha256:50aff78429b [===========================]42.7 MB/42.7 MB

sha512-e78ef9eacd302501a0d1d9516f91a01c

(5)查询下载的镜像

rkt image list

ID NAME SIZE IMPORT TIME LAST USED

sha512-e78ef9eacd30 registry-1.docker.io/library/ubuntu:latest 86MiB 27 seconds ago 27 seconds ago

使用rkt image list命令可以显示出本地的镜像信息。

(6)运行容器

运行容器的命令是rkt run,参数是镜像的命名或者镜像的哈希值或者镜像的完整地址。

rkt run --interactive docker://ubuntu

root@rkt-05575170-463c-480e-bc69-54f964f85d1a:/# Container rkt-05575170-463c-480e-bc69-54f964f85d1a terminated by signal KILL.

容器启动后会自动运行镜像制作时指定的入口程序,按3次Ctrl+]组合键会退出当前容器。--interactive表示启用交互模式,后台运行镜像需要使用&。

(7)查询容器运行信息

rkt list

UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS

4fa62eee ubuntu registry-1.docker.io/library/ubuntu:latest running 23 seconds ago 23 seconds ago default:ip4=172.16.28.7

(8)更多功能

通过rkt help命令可以查询支持的命令和参数,常用的命令有

enter 进入容器的命名空间

export 将容器内容输出至ACI文件中

image rm 删除镜像

rm 删除容器相关的资源和文件

status 检查容器的状态

stop 停止容器的运行

Rkt作为一种新兴的容器实现,与Docker相比,还有很多不完善的地方,但是作为竞争者必将促进容器技术的良性发展。

返回搜狐,查看更多

责任编辑: