Docker倉庫管理實戰(zhàn):公共與私有倉庫
核心內(nèi)容
- Docker公共倉庫與私有倉庫的概述。
- 公共倉庫(Docker hub)登入與登出命令使用詳解。
- 如何搭建一個簡單的私有倉庫。
- 如何在搭建的私有倉庫內(nèi),實現(xiàn)私有鏡像的查詢、上傳、下載。
公共倉庫與私有倉庫
Docker 鏡像倉庫是存儲和管理 Docker 鏡像的地方。它可以是公共或私有的,并且提供了一個集中式的地方來分享、存儲和管理 Docker 鏡像。這有點像github和gitlab,只不過github和gitlab是一個代碼托管平臺,在平臺上托管的是代碼,這里托管是各種的鏡像。
下面是公共鏡像倉庫和私有鏡像倉庫兩種倉庫類型的典型代表:
- Docker Hub:Docker Hub 是 Docker 公司提供的官方鏡像倉庫,包含了數(shù)量龐大的公共鏡像,用戶可以通過 Docker Hub 在云端存儲和分享自己的鏡像。你可以在 Docker Hub 上找到各種開源軟件的官方和社區(qū)維護(hù)的鏡像,也可以自己創(chuàng)建賬號并上傳自己的鏡像。
- Harbor:Harbor 是一個開源的企業(yè)級 Docker 鏡像倉庫服務(wù),提供了安全、可信賴的鏡像存儲和管理功能。它支持多種存儲后端,并提供了靈活的訪問控制和權(quán)限管理功能,適用于企業(yè)內(nèi)部使用。
這些鏡像倉庫都提供了豐富的功能和服務(wù),可以滿足不同場景下的需求。如果用戶想要根據(jù)自己的需求選擇合適的鏡像倉庫服務(wù)來存儲和管理 Docker 鏡像,那么公共鏡像倉庫與私有鏡像倉庫的區(qū)別是需要提前了解清楚的:
訪問權(quán)限
- 公共鏡像倉庫:公共鏡像倉庫是開放的,任何人都可以訪問其中的鏡像,無需進(jìn)行身份驗證或付費。用戶可以通過搜索功能找到并下載公共倉庫中的鏡像。
- 私有鏡像倉庫:私有鏡像倉庫是受限的,只有授權(quán)的用戶才能訪問其中的鏡像。通常需要進(jìn)行身份驗證,并且可能需要付費訂閱才能訪問。私有倉庫適用于存儲和分享組織內(nèi)部使用的敏感或?qū)S械溺R像。
安全性
- 公共鏡像倉庫:公共鏡像倉庫中的鏡像可能來自各種來源,包括社區(qū)貢獻(xiàn)者和官方維護(hù)者。盡管大多數(shù)鏡像都是安全的,但用戶應(yīng)該注意安全漏洞和惡意代碼的可能性。
- 私有鏡像倉庫:私有鏡像倉庫受到組織內(nèi)部的管控和監(jiān)管,可以更好地控制鏡像的來源和內(nèi)容,提高了安全性。
定制化和擴(kuò)展性
- 公共鏡像倉庫:公共鏡像倉庫通常包含了大量常用的鏡像,用戶可以快速獲取和使用。然而,由于是公開的,用戶可能無法定制和擴(kuò)展其中的鏡像。
- 私有鏡像倉庫:私有鏡像倉庫可以根據(jù)組織的需求定制和擴(kuò)展鏡像,滿足特定的業(yè)務(wù)需求。用戶可以根據(jù)自己的需求創(chuàng)建和管理自己的鏡像,并對其進(jìn)行定制和擴(kuò)展。
成本
- 公共鏡像倉庫:公共鏡像倉庫通常是免費的,用戶可以免費訪問其中的鏡像并使用。
- 私有鏡像倉庫:私有鏡像倉庫可能需要付費訂閱才能訪問和使用。成本取決于提供商和訂閱計劃的具體定價。
登入鏡像倉庫
docker login 命令用于登錄到 Docker Hub 或其他 Docker鏡像倉庫服務(wù)。登錄成功后,可以通過 Docker客戶端來推送(push)或拉取(pull)鏡像到該鏡像倉庫。
基本語法
docker login [OPTIONS] [SERVER]
各部分的含義如下:
- OPTIONS:可選參數(shù),用于指定一些額外的選項和配置。
- SERVER:要登錄的 Docker鏡像倉庫服務(wù)的地址。如果不提供該參數(shù),默認(rèn)將登錄到 Docker Hub。
其中OPTIONS部分常見的選項主要是兩個:
- -u, --username:用戶名
- -p, --password:密碼
使用示例
登錄到 Docker Hub:
docker login
圖片
這會進(jìn)入一個交互式對話中,提示你輸入用戶名和密碼。輸入正確的用戶名和密碼即可成功登入;
如果你想通過命令行提供用戶名和密碼,可以使用 -u 和 -p 選項:
docker login -u USERNAME -p PASSWORD
如果要登錄到私有的鏡像倉庫服務(wù),需要提供相應(yīng)的私有鏡像倉庫服務(wù)地址,REGISTRY_URL為私有倉庫服務(wù)的地址:
docker login REGISTRY_URL
登錄成功后,將會在終端中看到登錄成功的提示信息,并且 Docker 客戶端將會在后續(xù)的操作中使用你提供的憑據(jù)來與鏡像倉庫服務(wù)端進(jìn)行通信。
請注意,登錄到 Docker Registry 時,密碼會以明文形式傳輸,因此請確保在安全的環(huán)境中使用 docker login 命令,并避免在公共場所或非安全的網(wǎng)絡(luò)中使用該命令。
登出鏡像倉庫
docker logout 命令用于注銷當(dāng)前登錄的 Docker 用戶,從 Docker Hub 或其他 Docker鏡像倉庫服務(wù)中退出登錄狀態(tài)。
基本語法
docker logout [SERVER]
其中,SERVER 參數(shù)是可選的,用于指定要注銷登錄的 Docker Registry 的地址。如果不提供該參數(shù),默認(rèn)將注銷當(dāng)前登錄的 Docker Hub 賬號。
使用示例
注銷當(dāng)前登錄的 Docker Hub 賬號:
docker logout
如果你當(dāng)前已經(jīng)登錄到私有的 Docker Registry,可以提供相應(yīng)的 Registry 地址來注銷登錄狀態(tài):
docker logout REGISTRY_URL
執(zhí)行命令后,你將會看到注銷成功的提示信息,并且 Docker客戶端將不再使用之前提供的憑據(jù)來與 Registry 進(jìn)行通信。
私有倉庫管理
在開源的企業(yè)級Docker私有倉庫工具中,Harbo是一個典型代表,相對比較流行,而Docker 官方也提供了一種開源鏡像倉庫工具 Docker Registry,相較于Harbor,Docker Registry在功能的豐富性上要差一些。下面是兩者在功能性上的一些區(qū)別:
功能擴(kuò)展
- Docker Registry:Docker Registry 是 Docker 公司提供的開源鏡像倉庫服務(wù),提供了基本的鏡像存儲和傳輸功能。它可以作為 Docker Engine 的一部分運行,并提供了基于 HTTP API 的標(biāo)準(zhǔn)接口。
- Harbor:Harbor 是一個由 VMware 發(fā)起的開源企業(yè)級 Docker Registry 服務(wù),構(gòu)建在 Docker Registry 2.0 之上,提供了更豐富的功能和更高級的特性。除了基本的鏡像存儲和傳輸功能外,Harbor 還提供了許多高級功能,如安全掃描、RBAC 權(quán)限控制、鏡像復(fù)制和同步、鏡像簽名等。
安全性和權(quán)限控制
- Docker Registry:Docker Registry 提供了基本的身份驗證功能,但在權(quán)限控制方面相對較弱。它缺乏對鏡像內(nèi)容的安全掃描和審計功能。
- Harbor:Harbor 提供了更強(qiáng)大的安全性和權(quán)限控制功能。它支持基于角色的訪問控制(RBAC)、LDAP/AD 集成、鏡像內(nèi)容的漏洞掃描和安全審計,以及鏡像簽名和驗證等功能,能夠幫助用戶更好地管理和保護(hù)鏡像內(nèi)容的安全性。
鏡像復(fù)制和同步
- Docker Registry:Docker Registry 本身不提供鏡像復(fù)制和同步功能,需要用戶自行實現(xiàn)。
- Harbor:Harbor 支持鏡像復(fù)制和同步功能,可以在多個 Harbor 實例之間同步鏡像,以實現(xiàn)高可用性和災(zāi)備備份。
多租戶支持:
- Docker Registry:Docker Registry 不提供原生的多租戶支持,所有用戶和倉庫都在同一個命名空間下。
- Harbor:Harbor 提供了多租戶支持,可以在不同的項目或組織之間劃分不同的權(quán)限和訪問控制策略,確保各個租戶之間的隔離和安全性。
總的來說,Harbor 在 Docker Registry 的基礎(chǔ)上提供了更多的高級功能和安全性控制,適用于更復(fù)雜的企業(yè)級應(yīng)用場景。
如果在實際工作應(yīng)用中,絕對更推薦Harbor。而這篇這里主要是想和大家分享一下私有鏡像倉庫管理中一些基礎(chǔ)功能、通用操作。因此,這里我采用了Docker官方的開源鏡像倉庫服務(wù)Docker Registry。在后面會單獨來介紹把Harbor安裝、使用的詳細(xì)方法。
安裝 Docker Registry:
直接使用docker run命令,從Docker Hub中拉取Docker Registry鏡像并運行容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:latest
這將在服務(wù)器上啟動一個 Docker Registry 容器,監(jiān)聽在默認(rèn)端口 5000 上,并且在容器退出時自動重啟,確保 Docker Registry 服務(wù)始終可用。
給本地鏡像打上遠(yuǎn)程倉庫的標(biāo)簽:
docker tag myimage your-registry/myimage:latest
將鏡像推送到遠(yuǎn)程倉庫:
docker push your-registry/myimage:latest
這樣,myimage 鏡像的 latest 版本就會被推送到了名為 your-registry 的私有倉庫中。
如果想使用私有倉庫中的鏡像:
docker pull your-registry/myimage:latest