中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在64位Ubuntu中安裝Rkt

發布時間:2021-12-27 09:09:27 來源:億速云 閱讀:120 作者:iii 欄目:云計算

本篇內容介紹了“怎么在64位Ubuntu中安裝Rkt”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Rkt的前世今生

作為一個年輕的應用容器新秀,開源的Rkt并不是一個人在戰斗,在它的背后支撐的是一支儼然有序的龐大社區力量。

誕生背景

Rkt項目最初的發起者是CoreOS公司。

CoreOS公司與其核心產品CoreOS操作系統是實至名歸的最早一批Docker企業級用戶,伴隨著Docker從最初的0.1版本一直走到正式發布的1.0版本。起初兩者相互促進,合作甚好。然而,隨著Docker在容器界一家獨大的趨勢越來越明顯,其周邊的生態逐漸的從單純的圍繞構建容器化應用服務,發展成了自上而下的集群規范體系,甚至部分取代了操作系統的服務進程調度工作。這種臃腫而受Docker單方面控制的容器規范,是CoreOS系統所不待見的,他們想要一個更加開放而中立的容器標準。

2014年12月,CoreOS公布了自己的容器計劃,并在幾個月后結合社區中的容器實踐,著手制定新的開放應用容器規范,Rkt則作為此規范中的一個具體實現而繼續發展。

AppC標準應用容器規范

AppC的全稱是“Application Container Specification(標準應用容器規范)”,這個規范的制定不是為了服務于特定的Linux系統環境,其初衷在于制定一組不依賴于具體平臺、技術、操作系統和編程語言的容器虛擬化規范,解除已經初露端倪的企業容器產品互不兼容、各自封閉發展的危機,防止更多技術壁壘的產生。

正在制定中的AppC容器規范設計目標包括:

  • 組件式工具:用于下載、部署和運行虛擬容器環境的操作工具應該相互獨立、互不依賴且可被替換。

  • 鏡像安全性:鏡像在因特網下載傳輸時應當使用加密協議,容器工具應當內置驗證機制,以拒絕不安全來源的鏡像。

  • 操作去中心化:鏡像分發應該支持可擴展的傳輸協議,未來允許引入P2P,甚至BitTorrent協議來提升鏡像分發效率,且容器使用前不應需要登錄特定的鏡像倉庫。

  • 開放性標準:容器鏡像的格式與元數據定義應該由社區設立統一協商制定,使得符合這一規范的不同容器產品能夠共享鏡像文件。

為了確保規范的開放并兼顧多方利益,CoreOS作為規范的倡導者、參與者和實施者,但并不會成為其唯一的制定者。

目前已經在遵循AppC的開源應用容器除了Rkt,還有FreeDBSD平臺的容器Jet Pack和Linux平臺通過C++實現的容器Nose Cone。更好的通用性,更小的入侵性,以及更高的開放性,正是由于這些AppC規范的獨具匠心,使得它在Docker如日中天之時,恰逢其時的給業界帶來一陣清風,引發許多技術玩家和企業的駐足和思考。

Rkt容器使用嘗鮮

且不論AppC的未來發展究竟會如何,遠水不解近渴,既然Rkt容器本身是開源免費的,何不自己動手嘗試一番。

作為開放式容器標準的樣板項目,Rkt自然不會只能用在CoreOS的自家系統里。與Docker相似,Rkt雖然也被預裝在了CoreOS系統中,但其他的任何Linux發行版都可以安裝并使用它。在接下來的部分里,我們將以比較常見的64位Ubuntu系統為例,演示Rkt的安裝和使用方法。

在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工具的組成

工欲善其事,必先利其器。在前面安裝Rkt時,我們還沒來得及多看一眼,就直接將解壓后的文件一股腦兒丟進了系統目錄里。這種部署方式雖然方便,但也實在簡單粗暴。現在安裝完了,至少還是得回頭瞅瞅這個目錄里到底提供了哪些東西。

不過,這一瞅簡直讓人失望,偌大一個壓縮包,里面就這么倆文件。

$ ls rkt-v0.5.4
rkt  stage1.aci

第一個文件剛剛已經試過了,它是Rkt容器的主程序,所有操作容器的命令都會通過這個命令作為入口。而第二個文件是個非常巧妙的設計。首先它的aci后綴已經表明了它的身份,是一個標準的AppC鏡像。如果將這個鏡像解包就會看到里面包含的是一套完整的systemd運行環境,其實它的作用,是為Rkt提供了可替換的容器虛擬化實現組件。

Rkt容器默認是采用基于systemd-nspawn命令的機制來處理與內核cgroup和namespace相關操作的,而這個部分正是提供整個容器虛擬化能力的核心環節。Rkt通過將這部分的功能分離到一個可以快速外掛和替換的容器中,從而支持擴展其他的虛擬化實現方式(官方的舉例是比如novmqemu-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

下載Docker倉庫的鏡像

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”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

错那县| 林州市| 垦利县| 敦煌市| 霍林郭勒市| 临汾市| 兴隆县| 乐山市| 无锡市| 同仁县| 儋州市| 侯马市| 巴东县| 吉林市| 三门峡市| 浏阳市| 合阳县| 福海县| 周至县| 岳阳市| 博罗县| 开平市| 平舆县| 柘城县| 新昌县| 新泰市| 松原市| 根河市| 镇远县| 沂源县| 米泉市| 漯河市| 武安市| 远安县| 丹东市| 名山县| 通化县| 临桂县| 邯郸县| 县级市| 平遥县|