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相比,还有很多不完善的地方,但是作为竞争者必将促进容器技术的良性发展。
返回搜狐,查看更多
责任编辑: