您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么在64位Ubuntu中安裝Rkt”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
作為一個(gè)年輕的應(yīng)用容器新秀,開源的Rkt并不是一個(gè)人在戰(zhàn)斗,在它的背后支撐的是一支儼然有序的龐大社區(qū)力量。
Rkt項(xiàng)目最初的發(fā)起者是CoreOS公司。
CoreOS公司與其核心產(chǎn)品CoreOS操作系統(tǒng)
是實(shí)至名歸的最早一批Docker企業(yè)級(jí)用戶,伴隨著Docker從最初的0.1版本一直走到正式發(fā)布的1.0版本。起初兩者相互促進(jìn),合作甚好。然而,隨著Docker在容器界一家獨(dú)大的趨勢越來越明顯,其周邊的生態(tài)逐漸的從單純的圍繞構(gòu)建容器化應(yīng)用服務(wù),發(fā)展成了自上而下的集群規(guī)范體系,甚至部分取代了操作系統(tǒng)的服務(wù)進(jìn)程調(diào)度工作。這種臃腫而受Docker單方面控制的容器規(guī)范,是CoreOS系統(tǒng)所不待見的,他們想要一個(gè)更加開放而中立的容器標(biāo)準(zhǔn)。
2014年12月,CoreOS公布了自己的容器計(jì)劃,并在幾個(gè)月后結(jié)合社區(qū)中的容器實(shí)踐,著手制定新的開放應(yīng)用容器規(guī)范,Rkt則作為此規(guī)范中的一個(gè)具體實(shí)現(xiàn)而繼續(xù)發(fā)展。
AppC的全稱是“Application Container Specification(標(biāo)準(zhǔn)應(yīng)用容器規(guī)范)”,這個(gè)規(guī)范的制定不是為了服務(wù)于特定的Linux系統(tǒng)環(huán)境,其初衷在于制定一組不依賴于具體平臺(tái)、技術(shù)、操作系統(tǒng)和編程語言的容器虛擬化規(guī)范,解除已經(jīng)初露端倪的企業(yè)容器產(chǎn)品互不兼容、各自封閉發(fā)展的危機(jī),防止更多技術(shù)壁壘的產(chǎn)生。
正在制定中的AppC容器規(guī)范設(shè)計(jì)目標(biāo)包括:
組件式工具:用于下載、部署和運(yùn)行虛擬容器環(huán)境的操作工具應(yīng)該相互獨(dú)立、互不依賴且可被替換。
鏡像安全性:鏡像在因特網(wǎng)下載傳輸時(shí)應(yīng)當(dāng)使用加密協(xié)議,容器工具應(yīng)當(dāng)內(nèi)置驗(yàn)證機(jī)制,以拒絕不安全來源的鏡像。
操作去中心化:鏡像分發(fā)應(yīng)該支持可擴(kuò)展的傳輸協(xié)議,未來允許引入P2P,甚至BitTorrent協(xié)議來提升鏡像分發(fā)效率,且容器使用前不應(yīng)需要登錄特定的鏡像倉庫。
開放性標(biāo)準(zhǔn):容器鏡像的格式與元數(shù)據(jù)定義應(yīng)該由社區(qū)設(shè)立統(tǒng)一協(xié)商制定,使得符合這一規(guī)范的不同容器產(chǎn)品能夠共享鏡像文件。
為了確保規(guī)范的開放并兼顧多方利益,CoreOS作為規(guī)范的倡導(dǎo)者、參與者和實(shí)施者,但并不會(huì)成為其唯一的制定者。
目前已經(jīng)在遵循AppC的開源應(yīng)用容器除了Rkt,還有FreeDBSD平臺(tái)的容器Jet Pack和Linux平臺(tái)通過C++實(shí)現(xiàn)的容器Nose Cone。更好的通用性,更小的入侵性,以及更高的開放性,正是由于這些AppC規(guī)范的獨(dú)具匠心,使得它在Docker如日中天之時(shí),恰逢其時(shí)的給業(yè)界帶來一陣清風(fēng),引發(fā)許多技術(shù)玩家和企業(yè)的駐足和思考。
且不論AppC的未來發(fā)展究竟會(huì)如何,遠(yuǎn)水不解近渴,既然Rkt容器本身是開源免費(fèi)的,何不自己動(dòng)手嘗試一番。
作為開放式容器標(biāo)準(zhǔn)的樣板項(xiàng)目,Rkt自然不會(huì)只能用在CoreOS的自家系統(tǒng)里。與Docker相似,Rkt雖然也被預(yù)裝在了CoreOS系統(tǒng)中,但其他的任何Linux發(fā)行版都可以安裝并使用它。在接下來的部分里,我們將以比較常見的64位Ubuntu系統(tǒng)為例,演示Rkt的安裝和使用方法。
事實(shí)上,在任何Intel架構(gòu)的64位Linux中,安裝Rkt都簡單到極致。這得益于Golang語言原生的靜態(tài)編譯方式,幾乎所有編譯過的Golang程序都可以下載即運(yùn)行,而不需要安裝額外依賴。
從GitHub網(wǎng)站可以直接下載到打包好的Rkt的二進(jìn)制文件,目前最新的版本是v0.5.4。Rkt只提供了64位的編譯版本,雖然通過自行編譯源代碼的方式也能夠得到32位的可執(zhí)行文件,但在32位系統(tǒng)上運(yùn)行Rkt是不被官方推薦和支持的。
wget https://github.com/coreos/rkt/releases/download/v0.5.4/rkt-v0.5.4.tar.gz
下載后得到一個(gè)壓縮文件。然后,恩,解壓它。
tar xzvf rkt-v0.5.4.tar.gz
將解壓后得到的文件統(tǒng)統(tǒng)放到系統(tǒng)的可執(zhí)行目錄里面,安裝就算完成了。
sudo cp rkt-v0.5.4/* /usr/local/bin/
接下來,試在命令行下執(zhí)行不帶任何參數(shù)的rkt version
命令,可以看到程序返回了Rkt工具和AppC標(biāo)準(zhǔn)的版本信息,說明Rkt已經(jīng)正確的安裝了。
$ rkt version rkt version 0.5.4 appc version 0.5.1+git
工欲善其事,必先利其器。在前面安裝Rkt時(shí),我們還沒來得及多看一眼,就直接將解壓后的文件一股腦兒丟進(jìn)了系統(tǒng)目錄里。這種部署方式雖然方便,但也實(shí)在簡單粗暴?,F(xiàn)在安裝完了,至少還是得回頭瞅瞅這個(gè)目錄里到底提供了哪些東西。
不過,這一瞅簡直讓人失望,偌大一個(gè)壓縮包,里面就這么倆文件。
$ ls rkt-v0.5.4 rkt stage1.aci
第一個(gè)文件剛剛已經(jīng)試過了,它是Rkt容器的主程序,所有操作容器的命令都會(huì)通過這個(gè)命令作為入口。而第二個(gè)文件是個(gè)非常巧妙的設(shè)計(jì)。首先它的aci
后綴已經(jīng)表明了它的身份,是一個(gè)標(biāo)準(zhǔn)的AppC鏡像。如果將這個(gè)鏡像解包就會(huì)看到里面包含的是一套完整的systemd運(yùn)行環(huán)境,其實(shí)它的作用,是為Rkt提供了可替換的容器虛擬化實(shí)現(xiàn)組件。
Rkt容器默認(rèn)是采用基于systemd-nspawn
命令的機(jī)制來處理與內(nèi)核cgroup和namespace相關(guān)操作的,而這個(gè)部分正是提供整個(gè)容器虛擬化能力的核心環(huán)節(jié)。Rkt通過將這部分的功能分離到一個(gè)可以快速外掛和替換的容器中,從而支持?jǐn)U展其他的虛擬化實(shí)現(xiàn)方式(官方的舉例是比如novm
或qemu-kvm
),并能快速的在這些實(shí)現(xiàn)間切換使用。具體來說,只在運(yùn)行容器時(shí)指定--stage1-image
參數(shù),設(shè)置成其他符合要求的虛擬化實(shí)現(xiàn)的鏡像地址即可。
此外,AppC規(guī)范還提供了一套用于制作和轉(zhuǎn)換“符合AppC容器標(biāo)準(zhǔn)的”鏡像的工具,這部分內(nèi)容將會(huì)在系列的下篇中進(jìn)行詳述。
在目前階段的Rkt還必須通過root用戶來執(zhí)行大多數(shù)的命令,不過未來也計(jì)劃支持如Docker那樣使用普通用戶運(yùn)行。在運(yùn)行Rkt命令時(shí)如果出現(xiàn)“permission denied”的錯(cuò)誤,請檢查是否忘記了sudo。
使用Docker的用戶,大多比較習(xí)慣在網(wǎng)上隨便找到一個(gè)鏡像地址,就直接pull下來使用。因此,即便Docker官方發(fā)現(xiàn)了一些惡意鏡像的發(fā)布者,也無法有效的阻止這些鏡像在網(wǎng)絡(luò)的傳播。
AppC規(guī)范中,特別強(qiáng)調(diào)了鏡像的安全性
。為此,在默認(rèn)情況下,所有鏡像在下載和運(yùn)行前,都必須明確的添加鏡像發(fā)布者的簽名信任,以確保鏡像的來源不會(huì)被偽造。下面的命令將從官方倉庫中獲取前綴為“coreos.com/etcd”的簽名信息,并添加到本地信任列表中。
$ sudo 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 Are you sure you want to trust this key (yes/no)? yes <--輸入"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顯示了簽名在本地保存的位置。查看文件的內(nèi)容就會(huì)發(fā)現(xiàn),這個(gè)簽名實(shí)際上是一個(gè)標(biāo)準(zhǔn)的GunPG簽名公鑰。GunPG是著名RSA非對稱加密算法PGP的開源實(shí)現(xiàn),關(guān)于PGP算法的介紹可以參考這篇百度百科。
$ cat /etc/rkt/trustedkeys/prefix.d/coreos.com/etcd/8b86de38890ddb7291867b025210bd8888182190 -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 mQINBFTCnMQBEAC/49bGbStCpa3peej+/42mobfuGbTcdmcGGwYZmigP0Kl0TPZK ... 省略部分輸出 ... fMkBtaM3knaFonHZc19BD1FOishRThCCq2Ty8HUoN2Fk7w0l =bYl7 -----END PGP PUBLIC KEY BLOCK-----
通過rkt fetch
命令可以獲取遠(yuǎn)程的鏡像,和Docker的pull命令類似。下面這個(gè)命令會(huì)從CoreOS的GitHub倉庫中下載預(yù)裝了Etcd的示例容器。
$ sudo rkt fetch coreos.com/etcd:v2.0.9 rkt: searching for app image coreos.com/etcd:v2.0.9 rkt: fetching image from https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci Downloading signature from https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci.asc Downloading ACI: [=============================================] 3.79 MB/3.79 MB rkt: signature verified: CoreOS ACI Builder sha512-91e98d7f1679a097c878203c9659f2a2
值得一提的是,如果用戶在上一步中沒有添加簽名信任,則鏡像在下載完成后會(huì)由于無法正確的驗(yàn)證來源,而被直接丟棄(不會(huì)進(jìn)入Rkt的本地倉庫)。并提示鏡像沒有簽名,或鏡像的簽名沒有被信任。
$ sudo rkt fetch coreos.com/etcd:v2.0.9 ... Downloading ACI: [=============================================] 3.79 MB/3.79 MB openpgp: signature made by unknown entity
有的時(shí)候,用戶確實(shí)希望下載或?qū)胍粋€(gè)沒有簽名認(rèn)證的鏡像。可以明確的使用--insecure-skip-verify
參數(shù)來告訴Rkt不要驗(yàn)證鏡像的來源。
$ sudo rkt --insecure-skip-verify fetch coreos.com/etcd:v2.0.9 rkt: searching for app image coreos.com/etcd:v2.0.9 rkt: fetching image from https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci Downloading ACI: [=============================================] 3.79 MB/3.79 MB sha512-91e98d7f1679a097c878203c9659f2a2
下載完成的鏡像會(huì)被存儲(chǔ)在本地的/var/lib/rkt/cas/blob/sha512/
倉庫目錄中,具體的命名規(guī)則是將鏡像SHA512哈希值的前兩位作為目錄名,并以完成的SHA512哈希值作為鏡像的文件名。例如剛剛下載的Etcd鏡像哈希值為:sha512-91e98d7f1679a097c878203c9659f2a2,它存儲(chǔ)的路徑如下:
$ tree /var/lib/rkt/cas/blob/sha512/ /var/lib/rkt/cas/blob/sha512/ └── 91 └── sha512-91e98d7f1679a097c878203c9659f2a26ae394656b3147963324c61fa3832f15
目前Rkt還沒有提供一個(gè)命令能夠快速列出本地倉庫里所有鏡像名字的方法。這看起來是一個(gè)比較匪夷所思的缺失功能。
運(yùn)行Rkt容器的命令是rkt run
,可以通過幾種方式指定容器使用的鏡像。
最常用,也是最方便的方法是使用標(biāo)準(zhǔn)的鏡像的命名。比如例子中的coreos.com/etcd:v2.0.9
名稱:
$ sudo rkt run coreos.com/etcd:v2.0.9 rkt: searching for app image coreos.com/etcd:v2.0.9 rkt: fetching image from https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci ... Press ^] three times to kill container
也可以直接使用鏡像的哈希值指定:
$ sudo rkt run sha512-91e98d7f1679a097c878203c9659f2a26ae394656b3147963324c61fa3832f15 ... Press ^] three times to kill container
或者直接指定鏡像文件的完整地址,這個(gè)地址可以是本地文件,也可以是網(wǎng)絡(luò)文件,比如這樣:
$ sudo rkt run https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci rkt: fetching image from https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci ... Press ^] three times to kill container
使用時(shí)可以根據(jù)具體情況,哪種方便就用哪種。容器啟動(dòng)后就會(huì)自動(dòng)運(yùn)行鏡像制作時(shí)指定的入口程序,連續(xù)按Ctrl+]
組合鍵3次則會(huì)退出當(dāng)前容器。
通過--help
參數(shù)可以顯示rkt run
命令的可用選項(xiàng)。
$ sudo rkt run --help Usage: -inherit-env=false: inherit all environment variables not set by apps -interactive=false: run pod interactively -local=false: use only local images (do not discover or download from remote URLs) -no-overlay=false: disable overlay filesystem -pod-manifest="": the path to the pod manifest. If it's non-empty, then only '--private-net', '--no-overlay' and '--interactive' will have effects -port=: ports to expose on the host (requires --private-net) -private-net=false: give pod a private network -set-env=: an environment variable to set for apps in the form name=value -signature=: local signature file to use in validating the preceding image -stage1-image="/usr/local/bin/stage1.aci": image to use as stage1. Local paths and http/https URLs are supported. If empty, rkt will look for a file called "stage1.aci" in the same directory as rkt itself -volume=: volumes to mount into the pod
比較常用的選項(xiàng)有:
--volume
外掛分區(qū),類似于Docker的-v
參數(shù)
--port
暴露容器中的端口,類似于Docker的-p
參數(shù)
--interactive
啟用交互模式,類似于Docker的-i
加上-t
參數(shù)的效果
--set-env
向容器里添加環(huán)境變量,類似于Docker的-e
參數(shù)
對于經(jīng)常在使用Docker的用戶,有兩點(diǎn)值得注意的Rkt與Docker運(yùn)行鏡像時(shí)不同的地方:
目前還沒有與Docker的-d
參數(shù)相當(dāng)?shù)倪\(yùn)行選項(xiàng),要后臺(tái)運(yùn)行鏡像先將就用nohup
和&
吧。
在任意容器中連續(xù)按Ctrl+]
組合鍵3次,都會(huì)結(jié)束當(dāng)前容器,不論是否啟用了交互模式。
Rkt導(dǎo)入本地鏡像的命令和下載遠(yuǎn)程鏡像是一樣的,同樣使用rkt fetch
。需要留意的是,即便是導(dǎo)入本地鏡像,Rkt仍然會(huì)強(qiáng)制驗(yàn)證簽名(除非指定--insecure-skip-verify
參數(shù))。
$ wget https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.aci ... aving to: ‘etcd-v2.0.9-linux-amd64.aci’ 100%[=================================>] 3,788,138 1.00MB/s in 5.1s ‘etcd-v2.0.9-linux-amd64.aci’ saved [3788138/3788138] $ sudo rkt run etcd-v2.0.9-linux-amd64.aci error opening signature file: open /home/ubuntu/etcd-v2.0.9-linux-amd64.aci.asc: no such file or directory
默認(rèn)的簽名文件應(yīng)該和鏡像在同一目錄下,并且文件名應(yīng)為鏡像名加后綴.asc
。如果簽名文件的位置或名字與此規(guī)范不符,則可以用--signature
指定。例如:
sudo rkt run image.aci --signature sign.asc
Rkt支持直接下載Docker鏡像,并自動(dòng)轉(zhuǎn)換為AppC鏡像。這一設(shè)計(jì)在Docker基礎(chǔ)資源如此豐富的當(dāng)下,真的是很貼心。操作起來也非常簡單,只需要在Docker的標(biāo)準(zhǔn)鏡像路徑前面加上docker://
前綴即可。
不過,頗具諷刺意味的是,由于Docker鏡像本來是沒有簽名驗(yàn)證機(jī)制的,因此下載任何Docker鏡像時(shí),都必須使用--insecure-skip-verify
參數(shù)。仿佛時(shí)刻在提醒用戶:這個(gè)鏡像可能是不安全的!
例如,下載Docker官方倉庫的CentOS鏡像:
$ sudo rkt --insecure-skip-verify fetch docker://centos rkt: fetching image from docker://centos Downloading layer: 6941bfcbbfca7f4f48becd38f2639157042b5cf9ab8c080f1d8b6d047380ecfc Downloading layer: 41459f052977938b824dd011e1f2bec2cb4d133dfc7e1aa0e90f7c5d337ca9c4 Downloading layer: fd44297e2ddb050ec4fa9752b7a4e3a8439061991886e2091e7c1f007c906d75 sha512-94b712e21c2f88aebcbe67b7e97911c9
直接通過哈希值試運(yùn)行容器,注意加上--interactive
選項(xiàng):
$ sudo rkt run --interactive sha512-94b712e21c2f88aebcbe67b7e97911c9ed3be062f976cefcebed8baab826ed32 [root@rkt-0ff47941-3934-4dcd-9b9d-3db558f62cd9 /]#
同樣的,按三下Ctrl+]
則會(huì)退出容器。
對于需要登錄的Docker倉庫,Rkt也提供了下載鏡像的解決辦法。首先需要在/etc/rkt/auth.d/
目錄下添加一個(gè)用戶名命名的配置文件。
$ sudo cat /etc/rkt/auth.d/myuser.json { "rktKind": "dockerAuth", "rktVersion": "v1", "registries": ["quay.io"], "credentials": { "user": "myuser", "password": "sekr3tstuff" } }
然后就可以執(zhí)行fetch了。很方便有木有。
$ sudo rkt --insecure-skip-verify fetch docker://quay.io/myuser/privateapp rkt: fetching image from docker://quay.io/myuser/privateapp Downloading layer: cf2616975b4a3cba083ca99bc3f0bf25f5f528c3c52be1596b30f60b0b1c37ff Downloading layer: 6ce2e90b0bc7224de3db1f0d646fe8e2c4dd37f1793928287f6074bc451a57ea ....
通過rkt help
命令可以查看到Rkt的更多操作和參數(shù),其中的一些功能還在開發(fā)中,具體的進(jìn)度可以查閱官方文檔。
$ rkt help ... COMMANDS: enter Enter the namespaces of an app within a rkt pod fetch Fetch image(s) and store them in the local cache gc Garbage-collect rkt pods no longer in use help Show a list of commands or help for one command install Set up rkt data directories with correct permissions list List pods metadata-service Run metadata service prepare Prepare to run image(s) in a pod in rkt run Run image(s) in a pod in rkt run-prepared Run a prepared application pod in rkt status Check the status of a rkt pod trust Trust a key for image verification version Print the version and exit GLOBAL OPTIONS: --debug=false Print out more debug information to stderr --dir=/var/lib/rkt rkt data directory --help=false Print usage information and exit --insecure-skip-verify=false skip image or key verification --local-config=/etc/rkt local configuration directory --system-config=/usr/lib/rkt system configuration directory
“怎么在64位Ubuntu中安裝Rkt”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。