您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么在64位Ubuntu中安裝Rkt”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
作為一個年輕的應用容器新秀,開源的Rkt并不是一個人在戰斗,在它的背后支撐的是一支儼然有序的龐大社區力量。
Rkt項目最初的發起者是CoreOS公司。
CoreOS公司與其核心產品CoreOS操作系統
是實至名歸的最早一批Docker企業級用戶,伴隨著Docker從最初的0.1版本一直走到正式發布的1.0版本。起初兩者相互促進,合作甚好。然而,隨著Docker在容器界一家獨大的趨勢越來越明顯,其周邊的生態逐漸的從單純的圍繞構建容器化應用服務,發展成了自上而下的集群規范體系,甚至部分取代了操作系統的服務進程調度工作。這種臃腫而受Docker單方面控制的容器規范,是CoreOS系統所不待見的,他們想要一個更加開放而中立的容器標準。
2014年12月,CoreOS公布了自己的容器計劃,并在幾個月后結合社區中的容器實踐,著手制定新的開放應用容器規范,Rkt則作為此規范中的一個具體實現而繼續發展。
AppC的全稱是“Application Container Specification(標準應用容器規范)”,這個規范的制定不是為了服務于特定的Linux系統環境,其初衷在于制定一組不依賴于具體平臺、技術、操作系統和編程語言的容器虛擬化規范,解除已經初露端倪的企業容器產品互不兼容、各自封閉發展的危機,防止更多技術壁壘的產生。
正在制定中的AppC容器規范設計目標包括:
組件式工具:用于下載、部署和運行虛擬容器環境的操作工具應該相互獨立、互不依賴且可被替換。
鏡像安全性:鏡像在因特網下載傳輸時應當使用加密協議,容器工具應當內置驗證機制,以拒絕不安全來源的鏡像。
操作去中心化:鏡像分發應該支持可擴展的傳輸協議,未來允許引入P2P,甚至BitTorrent協議來提升鏡像分發效率,且容器使用前不應需要登錄特定的鏡像倉庫。
開放性標準:容器鏡像的格式與元數據定義應該由社區設立統一協商制定,使得符合這一規范的不同容器產品能夠共享鏡像文件。
為了確保規范的開放并兼顧多方利益,CoreOS作為規范的倡導者、參與者和實施者,但并不會成為其唯一的制定者。
目前已經在遵循AppC的開源應用容器除了Rkt,還有FreeDBSD平臺的容器Jet Pack和Linux平臺通過C++實現的容器Nose Cone。更好的通用性,更小的入侵性,以及更高的開放性,正是由于這些AppC規范的獨具匠心,使得它在Docker如日中天之時,恰逢其時的給業界帶來一陣清風,引發許多技術玩家和企業的駐足和思考。
且不論AppC的未來發展究竟會如何,遠水不解近渴,既然Rkt容器本身是開源免費的,何不自己動手嘗試一番。
作為開放式容器標準的樣板項目,Rkt自然不會只能用在CoreOS的自家系統里。與Docker相似,Rkt雖然也被預裝在了CoreOS系統中,但其他的任何Linux發行版都可以安裝并使用它。在接下來的部分里,我們將以比較常見的64位Ubuntu系統為例,演示Rkt的安裝和使用方法。
事實上,在任何Intel架構的64位Linux中,安裝Rkt都簡單到極致。這得益于Golang語言原生的靜態編譯方式,幾乎所有編譯過的Golang程序都可以下載即運行,而不需要安裝額外依賴。
從GitHub網站可以直接下載到打包好的Rkt的二進制文件,目前最新的版本是v0.5.4。Rkt只提供了64位的編譯版本,雖然通過自行編譯源代碼的方式也能夠得到32位的可執行文件,但在32位系統上運行Rkt是不被官方推薦和支持的。
wget https://github.com/coreos/rkt/releases/download/v0.5.4/rkt-v0.5.4.tar.gz
下載后得到一個壓縮文件。然后,恩,解壓它。
tar xzvf rkt-v0.5.4.tar.gz
將解壓后得到的文件統統放到系統的可執行目錄里面,安裝就算完成了。
sudo cp rkt-v0.5.4/* /usr/local/bin/
接下來,試在命令行下執行不帶任何參數的rkt version
命令,可以看到程序返回了Rkt工具和AppC標準的版本信息,說明Rkt已經正確的安裝了。
$ rkt version rkt version 0.5.4 appc version 0.5.1+git
工欲善其事,必先利其器。在前面安裝Rkt時,我們還沒來得及多看一眼,就直接將解壓后的文件一股腦兒丟進了系統目錄里。這種部署方式雖然方便,但也實在簡單粗暴。現在安裝完了,至少還是得回頭瞅瞅這個目錄里到底提供了哪些東西。
不過,這一瞅簡直讓人失望,偌大一個壓縮包,里面就這么倆文件。
$ ls rkt-v0.5.4 rkt stage1.aci
第一個文件剛剛已經試過了,它是Rkt容器的主程序,所有操作容器的命令都會通過這個命令作為入口。而第二個文件是個非常巧妙的設計。首先它的aci
后綴已經表明了它的身份,是一個標準的AppC鏡像。如果將這個鏡像解包就會看到里面包含的是一套完整的systemd運行環境,其實它的作用,是為Rkt提供了可替換的容器虛擬化實現組件。
Rkt容器默認是采用基于systemd-nspawn
命令的機制來處理與內核cgroup和namespace相關操作的,而這個部分正是提供整個容器虛擬化能力的核心環節。Rkt通過將這部分的功能分離到一個可以快速外掛和替換的容器中,從而支持擴展其他的虛擬化實現方式(官方的舉例是比如novm
或qemu-kvm
),并能快速的在這些實現間切換使用。具體來說,只在運行容器時指定--stage1-image
參數,設置成其他符合要求的虛擬化實現的鏡像地址即可。
此外,AppC規范還提供了一套用于制作和轉換“符合AppC容器標準的”鏡像的工具,這部分內容將會在系列的下篇中進行詳述。
在目前階段的Rkt還必須通過root用戶來執行大多數的命令,不過未來也計劃支持如Docker那樣使用普通用戶運行。在運行Rkt命令時如果出現“permission denied”的錯誤,請檢查是否忘記了sudo。
使用Docker的用戶,大多比較習慣在網上隨便找到一個鏡像地址,就直接pull下來使用。因此,即便Docker官方發現了一些惡意鏡像的發布者,也無法有效的阻止這些鏡像在網絡的傳播。
AppC規范中,特別強調了鏡像的安全性
。為此,在默認情況下,所有鏡像在下載和運行前,都必須明確的添加鏡像發布者的簽名信任,以確保鏡像的來源不會被偽造。下面的命令將從官方倉庫中獲取前綴為“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顯示了簽名在本地保存的位置。查看文件的內容就會發現,這個簽名實際上是一個標準的GunPG簽名公鑰。GunPG是著名RSA非對稱加密算法PGP的開源實現,關于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
命令可以獲取遠程的鏡像,和Docker的pull命令類似。下面這個命令會從CoreOS的GitHub倉庫中下載預裝了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
值得一提的是,如果用戶在上一步中沒有添加簽名信任,則鏡像在下載完成后會由于無法正確的驗證來源,而被直接丟棄(不會進入Rkt的本地倉庫)。并提示鏡像沒有簽名,或鏡像的簽名沒有被信任。
$ sudo rkt fetch coreos.com/etcd:v2.0.9 ... Downloading ACI: [=============================================] 3.79 MB/3.79 MB openpgp: signature made by unknown entity
有的時候,用戶確實希望下載或導入一個沒有簽名認證的鏡像。可以明確的使用--insecure-skip-verify
參數來告訴Rkt不要驗證鏡像的來源。
$ 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
下載完成的鏡像會被存儲在本地的/var/lib/rkt/cas/blob/sha512/
倉庫目錄中,具體的命名規則是將鏡像SHA512哈希值的前兩位作為目錄名,并以完成的SHA512哈希值作為鏡像的文件名。例如剛剛下載的Etcd鏡像哈希值為:sha512-91e98d7f1679a097c878203c9659f2a2,它存儲的路徑如下:
$ tree /var/lib/rkt/cas/blob/sha512/ /var/lib/rkt/cas/blob/sha512/ └── 91 └── sha512-91e98d7f1679a097c878203c9659f2a26ae394656b3147963324c61fa3832f15
目前Rkt還沒有提供一個命令能夠快速列出本地倉庫里所有鏡像名字的方法。這看起來是一個比較匪夷所思的缺失功能。
運行Rkt容器的命令是rkt run
,可以通過幾種方式指定容器使用的鏡像。
最常用,也是最方便的方法是使用標準的鏡像的命名。比如例子中的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
或者直接指定鏡像文件的完整地址,這個地址可以是本地文件,也可以是網絡文件,比如這樣:
$ 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
使用時可以根據具體情況,哪種方便就用哪種。容器啟動后就會自動運行鏡像制作時指定的入口程序,連續按Ctrl+]
組合鍵3次則會退出當前容器。
通過--help
參數可以顯示rkt run
命令的可用選項。
$ 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
比較常用的選項有:
--volume
外掛分區,類似于Docker的-v
參數
--port
暴露容器中的端口,類似于Docker的-p
參數
--interactive
啟用交互模式,類似于Docker的-i
加上-t
參數的效果
--set-env
向容器里添加環境變量,類似于Docker的-e
參數
對于經常在使用Docker的用戶,有兩點值得注意的Rkt與Docker運行鏡像時不同的地方:
目前還沒有與Docker的-d
參數相當的運行選項,要后臺運行鏡像先將就用nohup
和&
吧。
在任意容器中連續按Ctrl+]
組合鍵3次,都會結束當前容器,不論是否啟用了交互模式。
Rkt導入本地鏡像的命令和下載遠程鏡像是一樣的,同樣使用rkt fetch
。需要留意的是,即便是導入本地鏡像,Rkt仍然會強制驗證簽名(除非指定--insecure-skip-verify
參數)。
$ 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
默認的簽名文件應該和鏡像在同一目錄下,并且文件名應為鏡像名加后綴.asc
。如果簽名文件的位置或名字與此規范不符,則可以用--signature
指定。例如:
sudo rkt run image.aci --signature sign.asc
Rkt支持直接下載Docker鏡像,并自動轉換為AppC鏡像。這一設計在Docker基礎資源如此豐富的當下,真的是很貼心。操作起來也非常簡單,只需要在Docker的標準鏡像路徑前面加上docker://
前綴即可。
不過,頗具諷刺意味的是,由于Docker鏡像本來是沒有簽名驗證機制的,因此下載任何Docker鏡像時,都必須使用--insecure-skip-verify
參數。仿佛時刻在提醒用戶:這個鏡像可能是不安全的!
例如,下載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
直接通過哈希值試運行容器,注意加上--interactive
選項:
$ sudo rkt run --interactive sha512-94b712e21c2f88aebcbe67b7e97911c9ed3be062f976cefcebed8baab826ed32 [root@rkt-0ff47941-3934-4dcd-9b9d-3db558f62cd9 /]#
同樣的,按三下Ctrl+]
則會退出容器。
對于需要登錄的Docker倉庫,Rkt也提供了下載鏡像的解決辦法。首先需要在/etc/rkt/auth.d/
目錄下添加一個用戶名命名的配置文件。
$ sudo cat /etc/rkt/auth.d/myuser.json { "rktKind": "dockerAuth", "rktVersion": "v1", "registries": ["quay.io"], "credentials": { "user": "myuser", "password": "sekr3tstuff" } }
然后就可以執行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的更多操作和參數,其中的一些功能還在開發中,具體的進度可以查閱官方文檔。
$ 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”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。