摘要:在被納入后,與之爭日趨白熱化。一如微軟曾經(jīng)試圖通過在中安裝來排擠,現(xiàn)在正在嘗試將融入到,以此來打擊,,和。如同微軟確確實實提升了的性能。瀏覽器突出了微軟的優(yōu)勢,所以他們在年內(nèi)都沒有繼續(xù)開發(fā)了。
在 Swarm 被納入 Docker 1.12后,Swarm 與 K8S 之爭日趨白熱化。本文作者 Adriaan de Jonge 身為 Xebia CTO ,專精 DevOps 及持續(xù)交付,曾為 Docker 搖旗吶喊三年的老司機,如今開始易幟。
現(xiàn)在即使是最酷的產(chǎn)品也綁定于某個特定供應商。不管在過去的三年里,我曾多么熱衷 Docker,但是現(xiàn)在,綁定的供應商開始動搖 Docker 在我心中的地位了。而目前他們兩者之間的競爭還在持續(xù)。又或許在這個過程中會出現(xiàn)一個更好的選擇也說不定。這篇文章就是帶領(lǐng)大家來了解一下 Core OS 的 rkt(讀音按照“rock-it”來),以及告訴你為什么從現(xiàn)在開始要了解 rkt。
Docker 怎么了?如果你跟我經(jīng)歷相似,你可能因為對 Docker 充滿熱情而被它的一些缺點蒙蔽了眼睛。不要誤解我,我并不是說 Docker 不好。我的意思是它并沒有那么完美。所以接下來讓我們來看一下它的一些不足之處吧。
Docker 越來越像以前的 Microsoft一旦一家公司意識到它有著自己的壟斷權(quán),他們就會開始做出壟斷行為。一如微軟曾經(jīng)試圖通過在 windows 中安裝 Internet Explorer 來排擠 Netscape,現(xiàn)在 Docker 正在嘗試將 Swarm 融入到 DockerCore,以此來打擊 Kubernetes,Mesos,Marathon 和 Nomad。
Docker 確實有簡化 Swarm,使它輕松被廣大 Docker 用戶接受的優(yōu)點。如同微軟確確實實提升了 Internet Explorer6.0的性能。MSIE6瀏覽器突出了微軟的優(yōu)勢,所以他們在5年內(nèi)都沒有繼續(xù)開發(fā)了。
想象一下 Docker 跟 Swarm 結(jié)合的結(jié)果是什么……想象一下你的下一個任務就是移動到 Docker:當需要選擇一個最好的調(diào)整程序時,在你選擇 Kubernetes,Mesos/Marathon,Nomad 之前,你首先要理清楚的就是 Swarm 的不足之處是在哪里。已經(jīng)有了 Swarm,那么為什么在這個基礎(chǔ)上還要安裝其他的調(diào)度程序呢?
我希望 Docker 能夠提升 Swarm 的性能,在修改這一點上,希望 Docker 做得比微軟(修改 MISE)要好。但是即使是現(xiàn)在,Kubernetes 在很多方面也都是領(lǐng)先于 Swarm 的。隨著 Kubernetes 的持續(xù)開發(fā),Swarm 已經(jīng)遠遠落在后面。雖然 Docker 能夠讓人輕松使用調(diào)度程序,但是在我看來,他們還是應該跟 Docker 核心分開。
“Docker 的架構(gòu)從基礎(chǔ)上來看就是有瑕疵的”Docker 的核心就是 Daemon 程序,這個程序是 Docker 開始運行的起點。Docker 可執(zhí)行文件僅僅只是一個 REST 代理,這個代理要求發(fā)請求給 Docker daemon 來完成它的工作。Docker 的評論家指出,這很不符合 Linux 的方式。
它的痛點在于你是否使用類似 systemd 這樣的初始化系統(tǒng)。因為 systemd 并不是針對 Docker 設計的,所以當你嘗試開啟一個 Docker 程序的時候,你其實也就是開啟了一個 Docker 代理程序,而這個代理程序向 Docker daemon 請求開啟真正的 Docker 容器。在這里還是有一個風險的,就是當 Docker 容器還在運行的時候,Docker 代理運行失敗了。在這樣的情況下,systemd 得出結(jié)論,程序已經(jīng)停止,并且重啟 Docker 代理——于是創(chuàng)建第二個容器(是的,你還是可以繼續(xù)處理工作,但是已經(jīng)是無關(guān)緊要的了)。
大概一年之前,我把 systemd 當成是一個簡單的 Docker 調(diào)整程序來調(diào)查。我遇到了同樣的危機,或者說將 Docker 和 systemd 結(jié)合的問題。那時候,我覺得這些是 systemd 的原因,而不是 Docker 的缺點。我那時候還想,會不會 systemd 并不是針對“Docker 本地”來設計的。
現(xiàn)在,我才了解到,可能 Docker 才是那些問題的癥結(jié)所在,而不是 systemd 的問題。就像上文中提到的,Docker 并不符合 Linux 的風格,而也正因為如此,Linux 工具跟 Docker 也協(xié)作得不是很好。所以是誰錯了呢?是新來的 Docker,還是已經(jīng)存在了多年的 Linux 工具呢?CoreOS 的 CEO,Alex Polvi說:“Docker 的架構(gòu)從基礎(chǔ)上就有瑕疵。”
Docker 創(chuàng)建程序,陷在了第二個階段Docker 最好的功能之一就是 Dockerfiles 的引入,你可以在構(gòu)建 Docker 鏡像時保持版本控制。這里唯一的問題是在 Docker 的路標中 Dockerfile 語法凍結(jié)很長時間了。這就意味著在過去的一年半以來 Dockerfile 格式并沒有依據(jù)社區(qū)的良好建議而進化。
當然,在某種程度上,我們需要一個穩(wěn)定的格式,但是只有當格式完全成熟的時候。在這里舉個例子,就是 Dockerfile 缺乏的地方,考慮到 Kelsey Hightower 在他博客《12 Fractured Apps》中提到的:“記住,我們要運送artifact,而不是編譯環(huán)境。”
事實就是,Dockerfile 格式并不能很好地支持這個區(qū)別。考慮到要構(gòu)建一個可執(zhí)行的 Golang:可執(zhí)行的結(jié)果可能只有兩百萬字節(jié)大小,但是創(chuàng)建的環(huán)境有幾百兆字節(jié)。當然,你也可以在本地系統(tǒng)上構(gòu)建鏡像。你無法利用 Docker Hub 中的自動化構(gòu)建環(huán)境通過一個簡單的 Dockerfile 優(yōu)雅的構(gòu)建出一個小的 Golang 鏡像。社區(qū)有個關(guān)于擴展 Dockerfile 格式的提議就能很好的支持上述原理,但是由于 Dockerfile 格式的凍結(jié)該提議也被擱置了好幾年。
那么,rkt 是如何緩解這個狀況的?簡而言之,rkt 現(xiàn)在給 Docker 提供了更好的解決辦法。它擁有一套更加 Linux 的架構(gòu)。這個強勁的對手會保持自己的壟斷作風。
具體一點的答案就是:2014年年底,Core OS 宣布,這個有競爭力的容器平臺 Rocket(后來簡寫并改名成 rkt)的誕生。雖然 rkt 在發(fā)布之后最初幾周里得到了很高的關(guān)注度,但是后來卻銷聲匿跡了。Core OS 還是將 rkt 作為 Docker 的可替代工具來開發(fā),后來在2016年2月 rkt1.0版本發(fā)布的時候才回歸大眾視野。
現(xiàn)在 Docker 宣布在 Docker Engine1.12中已經(jīng)包含了 Swarm,那么是時候正視 rkt,讓它作為 Docker 的可執(zhí)行方案了。那在未來它會替代 Docker 嗎?從 Docker 切換到 rkt 難度大嗎?
讓我們來看一看 rkt 尋找答案吧。
rkt 能夠運行 Docker 鏡像假設現(xiàn)在你想要用 rkt 來替代你的 staging 以及產(chǎn)品系統(tǒng),同時又想讓你所有的開發(fā)系統(tǒng)都繼續(xù)運行......在這個案例中,你可以只在你的運行系統(tǒng)上將 Docker 替換成 rkt。但嚴格來說,這并不是一個隨隨便便的替換。畢竟,架構(gòu)是不一樣的——但是我們會努力往一樣的方向發(fā)展的。另一方面,為了在 rkt 上運行 Docker 容器而去學習新的命令行指令也不會太難。
在你最愛的云提供商上打開 Core OS 實例,并打出以下代碼:
或者用你最愛的 Docker 鏡像來替代 nginx。在底層,rkt 將 Docker 轉(zhuǎn)換到ApplicationContainer(appc)格式。
這也就意味著你不需要 Docker 來運行 Docker 鏡像了。而且也意味著你可以重新使用 Docker 創(chuàng)建的東西,在這個過程中不需要忍受遷移帶來的傷痛——而不是學習 rkt 的命令行語法。
讓我們來一睹命令行的單個部分:
如果你沒有忽略這部分,那么rkt就會拒絕啟動你的鏡像,因為它找不到簽名(.asc file)來確認 Docker 鏡像的完整性。rkt 默認設置下是安全創(chuàng)建的。在這個例子中,這也就意味著你可以通過提供合適的簽名來省去一些命令的輸入。
就比如在 Docker 中,你需要明確地暴露端口到外部。不像 Docker,rkt 端口已經(jīng)被命名,而不是標記數(shù)字。如果這是一個原生的 rkt 鏡像(或者需要精確的appc),那么它讀起來很可能是這樣的:
然而,既然 Docker 沒有命名的端口,那么被暴露的端口就會被自動命名為
鏡像期望存儲在默認的 Docker 倉庫中(Docker Hub)。除了這個例子,還有個更長的 URL 指向另一個 Docker 倉庫(docker://)或者包含鏡像的通常的 web 網(wǎng)站(https://),但是之后你就不再運行 Docker 鏡像了。
Rkt 有著更加簡單的架構(gòu)在 rkt 中是沒有 daemon 進程的。Rkt 命令行工具做了所有的工作。來看從CoreOS 網(wǎng)頁借鑒的圖片:
跟 Docker 不同,如果你使用 systemd 來啟動 rkt容器,你實際上就是在監(jiān)控容器進程,而不是監(jiān)控代理程序,然后由代理程序連接到 daemon,并由 daemon(直接或者間接——依賴于你的 Docker 版本)來啟動容器。
另一方面,你不能這么寫:
像 Docker 代理一樣 daemon 化進程。而且必須要運行一個初始系統(tǒng)來 daemonize 進程。比如,你可以這樣運行:
同樣,你無法從遠程機器(比如 Docker 代理)運行 rkt 命令行。再有,你也可以將它作為安全功能考慮。
Rkt 為鏡像遵從開放標準現(xiàn)在,rkt 允許你使用 Application Container(appc)或者 Docker 鏡像。在不遠的將來,Open Container Initiative(OCI)格式將會被加入,我們會朝那個方向走的。
容器鏡像擁有開放標準的好處就是,它允許開源社區(qū)提供多種創(chuàng)建鏡像的方法,不僅僅局限于 Dockerfile 格式。
構(gòu)建 appc 鏡像的默認方式就是使用命令行工具,叫做 acbuild。說實話,喜歡 acbuild,還是喜歡 Dockerfile 格式,這真的只是個人口味問題。
好處就在于它天生就跟 Linux 原則距離更近。
而最大的好處就是開放格式允許可替代的構(gòu)建機制。比如,考慮到全能創(chuàng)建工具 dgr 或者 Golang 指定創(chuàng)建工具 goaci。
一旦 OCI 格式可用,就會有更多可能,但是現(xiàn)在,我們還是需要等待。
Rkt:我們到達目的地了嗎?如果你現(xiàn)在就想要開始使用 rkt,那么你在使用道路上會有一些磕絆。雖說你可以在磕磕絆絆之中找到方向,但是不得不承認的是,在我寫這篇文章的時候(也就是現(xiàn)在),說 rkt 一切都已經(jīng)準備妥當還為時過早。不過,我相信,只是時間問題。
OCI 鏡像格式還沒有準備好就像在上文中提到過的那樣,rkt 支持 Docker 鏡像格式,而且跟 Docker 倉庫互相溝通聯(lián)系。如果你能夠堅持使用 Docker 鏡像格式,那么相信它,它會運行得很好。
但是,如果你是個吹毛求疵的人——像我似的——你就沒辦法容忍在使用 Docker 的時候,你還無法使用命名的端口。所以,你就會想要使用 appc 容器。appc 容器是可以自由使用的。
但是你要怎么上傳 appc 容器給 Core OS 解決方案到 Docker Hub——quay.io?我自己是還沒有找到這樣的方法。
關(guān)于 appc 格式最好的一點就是,它并不是跟特定的 Docker 倉庫相聯(lián)系。反而,你可以在普通 http 服務器上,或者是在本地文件系統(tǒng)宿主鏡像。你可以豐富包含元標簽的 HTML 文件的原數(shù)據(jù)。
一旦 OCI 鏡像格式達到,rkt 才有可能真正 take off,變得足夠成熟,準備足夠充分來被接受,作為每個人心中的標準——包括 Docker。
Nomad&Kubernetes 還沒有完全成熟為了在產(chǎn)品中運行容器,在某種程度上,你需要一個調(diào)度程序來控制運行什么程序,在哪里運行。目前,Kubernetes 和 Nomad 都支持 rkt。但是這種支持并沒有大家期望得那樣成熟。
Kubernetes 支持 rkt 是從積極開發(fā)的狀況下來說的。它有最小文檔以及一系列已經(jīng)知道了解的問題。Nomad 支持標記試驗,但是不支持動態(tài)端口。
對于其它平臺來說就不那么輕便好在 rkt 不僅僅支持 CoreOS。你可以在多個平臺上,比如分布式 Linux,Debian,Ubuntu 以及 Fedora 上安裝 rkt。
如果你想在你的 Apple/Windows 開發(fā)機上運行 rkt,你當然可以在像 virtualBox 這樣的虛擬層運行。但是,這些設備沒有 Docker 的工具盒那么好用——特別是最新的 Docker Mac/Windows 測試版,這也就給了你一種 native 的感覺。要承認的是,這可能就是 rkt 架構(gòu)上的缺點,在這點上,可執(zhí)行的 rkt 已經(jīng)做了所有的工作,而不只是作為一個 REST 代理。
如果你想要在非 Linux 機器上開發(fā),最好的辦法就是仍然在本地用 Docker 鏡像進行處理,并且在你轉(zhuǎn)到 staging 和生產(chǎn)的時候,要將這些轉(zhuǎn)化為 appc 鏡像。
結(jié)論雖然這么說還很早,但是 rkt 現(xiàn)在已經(jīng)變成 Docker 的一個可執(zhí)行方案。如果你不需要 Kubernetes,Nomad 的動態(tài)功能,以及更多像 systemd,fleet 這樣的靜態(tài)選項,來滿足你的調(diào)度準則,那么你現(xiàn)在就可以將你的 staging 和產(chǎn)品服務器轉(zhuǎn)移到 rkt 了。
相信再有多一點的時間,Docker 和其它容器平臺間會有真正的互操作性,以 OCI 鏡像的形式出現(xiàn)。同時,允許 Kubernetes 和 Nomad 支持 rkt 的發(fā)展,然后 Docker 會跟 rkt 容器平臺會一樣可交換。
那現(xiàn)在有必要摒棄 Docker 嗎?不,沒有必要。除了這篇文章中提到的一些 Docker 的缺點,Docker 還是個有著很多開發(fā)工具,調(diào)度程序,編排的巨大生態(tài)系統(tǒng)創(chuàng)新平臺。重要的是,我們要有足夠多的選項。現(xiàn)在 Docker 有很多的競爭對手來保持清醒。
原文鏈接
保護知識產(chǎn)權(quán),轉(zhuǎn)載聯(lián)系我們哦。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26723.html
摘要:代碼分析參考博客源碼分析下載源碼可以從上下載編譯環(huán)境代碼下載到任意目錄,這里是設置環(huán)境變量,這里為這個目錄名很重要,的包都是以這個為基礎(chǔ)的鏈接到源碼目錄即可通過編譯 [TOC] minikube代碼分析 參考博客: minikube 源碼分析 下載 minikube源碼可以從github上下載: git clone git@github.com:kubernetes/minikube....
摘要:在這一假設之下,是一個新奇的觀點編排才是容器生態(tài)的中心,而引擎就我們所知,只是一個開發(fā)工具。是特有的概念,但容器生態(tài)系統(tǒng)必須采用這個概念。 showImg(https://segmentfault.com/img/remote/1460000007157260?w=640&h=480); 開源項目 CRI-O ,其前身為 OCID ,官方簡介是 OCI-based implementa...
摘要:自那以后,已經(jīng)增加了個開源項目。該項目由監(jiān)管,于年初加入。但是,指的是谷歌實現(xiàn)的遠程程序調(diào)用,它利用了和協(xié)議緩沖區(qū)。事實上,來自的流行鍵值存儲和谷歌自己的都是最后一個值得關(guān)注的項目是也稱為,一個容器運行時。 自2015年成立以來,云原生計算基金會(CNCF)已經(jīng)成為開源生態(tài)系統(tǒng)中最重要的推動者之一,特別是當涉及到影響容器和其他云原生技術(shù)的工具時。CNCF成立的目的是促進和組織與大型行業(yè)...
摘要:器運行時是執(zhí)行容器并在節(jié)點上管理容器鏡像的軟件,目前,最廣為人知的容器運行時是,但在生態(tài)系統(tǒng)中還有其他容器運行時軟件,比如和。從理論上說,可以使用任何實現(xiàn)的容器運行時管理容器和容器鏡像。積極解決用戶報告的任何測試失敗和其他問題。 showImg(https://segmentfault.com/img/remote/1460000011960140?w=720&h=400); 器運行時...
摘要:容器包的大小和完整性使得團隊成員能夠在幾秒鐘內(nèi)部署完整的環(huán)境。由的前安全主管美國總統(tǒng)執(zhí)行辦公室網(wǎng)絡安全高級總監(jiān)聯(lián)合創(chuàng)立的,目前正在準備類似的容器安全產(chǎn)品。在年,在美國召開了兩個大型會議和個小型會議。 軟件容器技術(shù)影響著從開發(fā)人員、測試人員、運維人員到分析人員的IT團隊中的每一個人,它不像虛擬化一樣只是系統(tǒng)管理員的工具。容器包的大小和完整性使得團隊成員能夠在幾秒鐘內(nèi)部署完整的環(huán)境。 容器...
閱讀 1176·2021-11-23 10:10
閱讀 1499·2021-09-30 09:47
閱讀 887·2021-09-27 14:02
閱讀 2967·2019-08-30 15:45
閱讀 3019·2019-08-30 14:11
閱讀 3609·2019-08-29 14:05
閱讀 1819·2019-08-29 13:51
閱讀 2206·2019-08-29 11:33