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