在2013年誕生的開源Docker引擎促使容器化成為實(shí)現(xiàn)云應(yīng)用程序開發(fā)流程現(xiàn)代化的第一步。在Docker引擎出現(xiàn)之前,用戶必須為特定的計(jì)算機(jī)/硬件配置應(yīng)用程序。但這種方法的缺點(diǎn)是,將應(yīng)用程序和數(shù)據(jù)從一臺(tái)服務(wù)器移動(dòng)到另一臺(tái)服務(wù)器可能會(huì)很耗時(shí)。
但是,隨著Docker Registry的推出,管理和組織容器注冊(cè)表的長(zhǎng)期挑戰(zhàn)得到了解決。事實(shí)上,Docker Registry迅速成為了軟件行業(yè)的標(biāo)準(zhǔn)。如今,Docker Registry幫助很多企業(yè)通過(guò)其軟件開發(fā)過(guò)程在一個(gè)中心位置收集、存儲(chǔ)和交付不同階段的容器鏡像。
本文概述了人們需要了解的容器注冊(cè)表核心功能,以幫助選擇適合軟件開發(fā)需求的容器注冊(cè)表。
什么是容器注冊(cè)表?
容器注冊(cè)表是一個(gè)高度可擴(kuò)展的服務(wù)器端應(yīng)用程序,它允許持續(xù)集成(CI)/持續(xù)交付(CD)系統(tǒng)、開發(fā)人員和測(cè)試人員存儲(chǔ)在應(yīng)用程序開發(fā)期間創(chuàng)建的圖像。存儲(chǔ)在容器注冊(cè)表中的映像用于Kubernetes、DevOps和基于容器的應(yīng)用程序開發(fā)。其示例包括Docker Hub、Amazon ECR和Azure。
如何選擇合適的容器注冊(cè)表?
在選擇容器注冊(cè)表時(shí),市場(chǎng)并不缺乏一些教學(xué)法選擇,這可能使選擇合適的容器注冊(cè)表成為一項(xiàng)艱巨的任務(wù)。但是,在用戶開始選擇之前,需要事先考慮的核心問(wèn)題:
- 除了容器映像之外,還想承載其他工件嗎?一些容器注冊(cè)表支持其他類型的文件,例如Java、Node.js甚至Python包。另一方面,有些只支持容器鏡像。
- 需要額外的安全性嗎?只有少數(shù)容器注冊(cè)表提供的功能更安全,每當(dāng)用戶將圖像推送到注冊(cè)表時(shí)會(huì)進(jìn)行漏洞掃描。
- 應(yīng)該使用本地還是托管容器注冊(cè)表?
如果用戶決定從一個(gè)容器遷移到另一個(gè)容器,則任務(wù)相對(duì)容易。
可用的容器注冊(cè)表有哪些?
1.AWS彈性容器注冊(cè)表(AWS ECR)
AWS ECR可以配置為支持私有和公共Docker注冊(cè)表。這些注冊(cè)表可與AWS IAM一起使用,以控制用戶的訪問(wèn)級(jí)別、服務(wù)和應(yīng)用程序。在本質(zhì)上,可以定義哪些用戶可以訪問(wèn)受保護(hù)的容器映像。
AWS ECR還配備了漏洞圖像掃描功能,使其成為DevSecOps的基本功能。這是因?yàn)樗褂肅lair的公共漏洞和暴露(CVE)數(shù)據(jù)庫(kù)來(lái)評(píng)估所發(fā)現(xiàn)問(wèn)題的嚴(yán)重性。AWS ECR的另一個(gè)重要功能是不可變圖像標(biāo)簽。在啟用之后,這一功能可確保將映像推送到容器注冊(cè)表之后,任何人都無(wú)法覆蓋該映像。
2.Azure容器注冊(cè)表(ACR)
微軟公司的Azure容器注冊(cè)表基于Docker Registry 2.0,其中身份驗(yàn)證由Azure RBAC管理。Azure的容器注冊(cè)表具有大多數(shù)競(jìng)爭(zhēng)對(duì)手尚未提供的功能,例如:
- 自動(dòng)清除舊圖像。
- 未標(biāo)記清單的保留策略。
- 內(nèi)容信任。
需要注意的是,內(nèi)容信任是基于Docker創(chuàng)建的一個(gè)概念,它允許用戶對(duì)推送到Azure容器注冊(cè)表的圖像進(jìn)行簽名。
在本質(zhì)上,可能使用圖像的應(yīng)用程序/用戶將其客戶端配置為僅提取簽名的圖像。同時(shí),Docker客戶端可以驗(yàn)證圖像的完整性,從而確保圖像已經(jīng)發(fā)布,并且在發(fā)布后未被修改。除了托管Docker容器映像之外,Azure容器注冊(cè)表還支持OCI映像、OCI工件和Helm圖表。
而在定價(jià)信息方面,微軟公司使用分層系統(tǒng)的方式有所不同。
3.Docker Hub容器注冊(cè)表
Docker Hub可能是當(dāng)前最流行的容器注冊(cè)表,因?yàn)樗悄J(rèn)的Docker存儲(chǔ)庫(kù)。它充當(dāng)公共容器映像的市場(chǎng),如果決定公開分發(fā)映像,它是最佳選擇。有趣的是,Docker Hub的免費(fèi)選項(xiàng)在一段時(shí)間內(nèi)非常有吸引力,直到一些用戶開始用來(lái)挖掘具有自動(dòng)構(gòu)建功能的加密貨幣。
因此,開發(fā)商對(duì)Docker的pull/push鏡像設(shè)置了一些限制,并重新思考如何通過(guò)Docker Hub獲利。用戶需要了解有關(guān)速率限制更改的更多信息,以及向Docker Hub自動(dòng)構(gòu)建的轉(zhuǎn)變。避免Docker的拉/取圖像速率限制的一種方法是使用緩存代理。
在定價(jià)方面,層級(jí)系統(tǒng)允許用戶通過(guò)付費(fèi)計(jì)劃解鎖某些特定功能。但是,總體成本不會(huì)像使用AWS ECR或微軟的Azure容器注冊(cè)表(ACR) 等其他一些解決方案那樣有效。
4.GitHub軟件包注冊(cè)表
2019年5月,GitHub推出了軟件包注冊(cè)解決方案。由于其解決方案的成功,他們?cè)?020年9月發(fā)布了對(duì)容器鏡像的支持,并首先作為測(cè)試選項(xiàng)。GitHub容器注冊(cè)表的一個(gè)令人關(guān)注的方面是它提供了無(wú)縫體驗(yàn),尤其是對(duì)開發(fā)人員而言?;旧希矸蒡?yàn)證是使用個(gè)人訪問(wèn)令牌管理的。
另一種選擇是使用公共存儲(chǔ)庫(kù),盡管在這種情況下,企業(yè)需要其用戶使用GitHub用戶帳戶進(jìn)行身份驗(yàn)證??傮w而言,GitHub軟件包注冊(cè)表肯定不是包含最多功能的容器注冊(cè)表。但是,如果打算使用GitHub Actions,其定價(jià)更具競(jìng)爭(zhēng)力,因?yàn)椴恍枰獮槿肟诟顿M(fèi)。
5.GitLab容器注冊(cè)表
GitLab有自己的容器注冊(cè)表,可以免費(fèi)使用,并支持Docker容器映像以及Helm Chart(仍處于測(cè)試階段)。如果使用GitLab的自托管版本或通過(guò)基于云的GitLab,它可以是自托管的。GitLab容器注冊(cè)表的一大特色是它的清理策略,它可以刪除匹配某個(gè)正則表達(dá)式模式的標(biāo)簽。
或者,用戶可以嘗試采用GitLab Package Registry,它也是免費(fèi)的,并且支持Composer、Conan、Generic、Maven、npm、NuGet、PyPI和RubyGem。毫無(wú)疑問(wèn),如果已經(jīng)將GitLab用于項(xiàng)目存儲(chǔ)庫(kù),這是一個(gè)很好的選擇。
6.谷歌容器注冊(cè)表(GAR)
谷歌容器注冊(cè)表(GAR)在以前是值得推薦的選項(xiàng),但自從2021年夏季以來(lái),谷歌公司一直要求他們的客戶過(guò)渡到谷歌容器注冊(cè)表(GAR),因?yàn)镚CR只接收關(guān)鍵的安全修復(fù)程序。從本質(zhì)上來(lái)說(shuō),GAR是他們處理容器鏡像和非容器工件(例如Maven、npm、Python、Apt甚至Yum包)的新方法。
首先,GAR可以輕松地與持續(xù)集成(CI)/持續(xù)交付(CD)管道集成,以簡(jiǎn)化容器的構(gòu)建和部署。此外,它還提供掃描圖像中的漏洞,用戶可以人工啟用。
7.Harbor容器注冊(cè)表
Harbour創(chuàng)建于2014年,并于2016年轉(zhuǎn)為開源模型,并無(wú)疑是VMware公司最成功的開源項(xiàng)目之一。Harbor是一個(gè)容器注冊(cè)表,需要用戶自行安裝、配置和管理。使用其Docker容器易于部署,可以將其與任何支持Docker的Linux發(fā)行版一起使用。需要注意的是,還可以在Kubernetes集群上使用Helm Chart部署Harbor。
Harbor容器注冊(cè)表還支持希望從容器注冊(cè)表中獲得的大多數(shù)功能,例如:
- 漏洞掃描
- 垃圾收集
- 跨區(qū)域復(fù)制
- 內(nèi)容信任
總的來(lái)說(shuō),如果計(jì)劃托管容器注冊(cè)表,這是一個(gè)不錯(cuò)的選擇。
8.Red Hat Quay
Quay最初創(chuàng)建于2012年,在過(guò)去幾年中發(fā)生了重大變化。首先,這個(gè)容器注冊(cè)表在2014年被CoreOS公司收購(gòu),后來(lái)在2018年被Red Hat收購(gòu)。
而理解Quay、Project Quay或Red Hat Quay之間的區(qū)別可能會(huì)非常令人困惑。以下簡(jiǎn)要介紹每一項(xiàng)的含義:
- Project Quay:它是一個(gè)獨(dú)立容器注冊(cè)表,是Red Hat Quay的開源發(fā)行版,可與Sonatype Nexus Repository OSS或Harbor相媲美。
- Red Hat Quay.io:托管在Red Hat云平臺(tái)上的企業(yè)解決方案,按私有存儲(chǔ)庫(kù)的數(shù)量定價(jià)。但是其公共存儲(chǔ)庫(kù)仍然是免費(fèi)的。
- Red Hat Quay:用于私有云部署的企業(yè)容器注冊(cè)表,可以通過(guò)Red Hat OpenShift由內(nèi)置運(yùn)營(yíng)者獲得。
在本質(zhì)上,Quay為不同的環(huán)境提供了多種產(chǎn)品,都具有豐富的功能,例如安全掃描(使用Clair)、存儲(chǔ)庫(kù)鏡像、審計(jì)日志等。
9.Sonatype Nexus Repository OSS
與Harbor類似,Nexus Repository是另一種自托管容器注冊(cè)表解決方案,也支持其他語(yǔ)言包。Sonatype有一個(gè)Docker映像,可在基礎(chǔ)設(shè)施中輕松部署。這個(gè)容器注冊(cè)表提供了它的Nexus Repository的專業(yè)版和一些額外的功能。
如果希望自托管包/容器注冊(cè)表,這可能是一個(gè)不錯(cuò)的選擇,因?yàn)樗峁┝撕w許多場(chǎng)景的豐富文檔。
9種容器注冊(cè)表的比較
結(jié)論
總而言之,需要考慮的關(guān)鍵因素是網(wǎng)絡(luò)就近部署,因?yàn)樗鼘?duì)于在使用容器注冊(cè)表時(shí)最大限度地降低成本和延遲至關(guān)重要。
最后,建議企業(yè)使用他們的云計(jì)算提供商提供的容器注冊(cè)表。例如,如果其基礎(chǔ)設(shè)施完全基于AWS云平臺(tái),建議使用AWS ECR。
這是因?yàn)樗性朴?jì)算資源共享一個(gè)共同的身份驗(yàn)證模型,并且圖像將被更快地提取,因?yàn)樗鼈儾恍枰獜牟煌脑破脚_(tái)之間移動(dòng)。
原文標(biāo)題:How to Choose a Container Registry: The Top 9 Picks,作者:Florian Pialoux