一文教會你如何高效地搭建Docker私有倉庫
前言
Docker 倉庫用于保存 Docker 鏡像,分為公有倉庫與私有倉庫。
公有倉庫就是 Docker Hub 一類供所有 Docker 用戶使用的 Docker 倉庫。
私有倉庫是指由個人或企業(yè)搭建的 Docker 倉庫,供其自身使用,是非公開的。
本篇文章將對 Docker 私有倉庫及其相關內(nèi)容進行詳解。
1. 私有倉庫
Docker 鏡像通常保存在 Docker Hub,Docker Hub 是目前最大的 Docker 鏡像公有倉庫,由 Docker 官方人員進行維護,其中的鏡像可供所有用戶下載使用。
在生產(chǎn)環(huán)境中,通常公司會構(gòu)建一些符合公司業(yè)務需求的鏡像,這些鏡像因為是商業(yè)機密而不得上傳至 Docker Hub,只能供公司內(nèi)部人員使用。
此時就需要在內(nèi)網(wǎng)搭建一個 Docker 私有倉庫,來存儲公司內(nèi)部的鏡像,并確保內(nèi)部人員可以不受網(wǎng)絡限制,快速地拉取或上傳鏡像。
鏡像為 Docker 容器的運行基礎,容器是鏡像的具體運行實例,鏡像倉庫為鏡像提供了可靠的存儲空間,鏡像可以從公有或私有倉庫拉取,如圖所示??
2. 搭建私有倉庫
環(huán)境部署
私有鏡像倉庫在企業(yè)中占有較高的使用率,因此私有鏡像倉庫搭建技術(shù)顯得尤為重要。
下面通過示例講述私有鏡像倉庫的搭建方式與過程。
本節(jié)需要用到兩臺服務器,一個作為私有鏡像倉庫,另一個作為使用私有鏡像倉庫的 Docker 客戶機。
此處以 CentOS 系統(tǒng)為例,安裝并啟動 Docker,服務器信息如表所示。
自建倉庫
Docker Hub 為用戶提供了完美的倉庫鏡像,本示例將使用 Docker Hub 中的倉庫鏡像運行私有倉庫。
首先從 Docker Hub 中拉取倉庫鏡像,示例代碼如下:
以上示例成功拉取了 Docker 倉庫的鏡像。
下面將倉庫鏡像運行成為容器,示例代碼如下:
以上示例將倉庫鏡像運行成了倉庫容器,并映射了宿主機的 5000 端口,供 Docker 鏡像的上傳與下載。
其中,--restart=always
表示容器停止時自動重啟,這條參數(shù)常用于生產(chǎn)環(huán)境中。
下面將鏡像上傳至剛剛創(chuàng)建的鏡像倉庫中,示例代碼如下:
以上示例拉取了一個 BusyBox 鏡像,并為其添加了 tag 標識,在嘗試將鏡像推送至私有倉庫時,發(fā)生了報錯。
這是因為 Docker 默認支持 HTTPS(Hyper Text Transfer Protocol Secure,安全超文本傳輸協(xié)議),命令行中使用的是 HTTP(Hyper Text Transfer Protocol,超文本傳輸協(xié)議)。
修改 Docker 的啟動參數(shù),使之允許以 HTTP 工作,示例代碼如下:
以上示例修改了 Docker 配置文件中的啟動參數(shù),并重啟Docker。
下面接著嘗試將鏡像推送至私有倉庫,示例代碼如下:
以上示例成功將鏡像推送到私有倉庫。
如果想在其他宿主機上使用該倉庫,只需要修改配置文件,重啟 Docker 服務。
下面通過另外一臺服務器拉取私有倉庫中的鏡像,先修改 Docker 配置文件,再重新讀取并重新啟動 Docker,最后拉取鏡像,示例代碼如下:
以上示例成功從私有倉庫下載了 BusyBox 鏡像。
如此,一個簡單的私有倉庫就搭建好了,但安全系數(shù)較低,鏡像保存在容器中,容器被刪除后,私有倉庫以及倉庫中的鏡像也會一并刪除,數(shù)據(jù)無法保存。
3. 使用 TLS 證書
生成證書
想讓倉庫對外提供服務,就需要配置用戶認可的 TLS(Transport Layer Security,傳輸層安全)證書,否則倉庫將無法正常使用。
目前很多代理商可以提供權(quán)威的證書,用戶可以自行選擇。
下面演示自行生成 TLS 證書的方式及過程。
(1)使用 Openssl 工具生成私人證書文件。(暫不演示)
(2)創(chuàng)建帶有 TSL 認證的倉庫容器,示例代碼如下:
上述示例運行了一個被命名為 registry-TLS 的容器,并通過 REGISTRY_HTTP_TLS_CERTIFICATE 和 REGISTRY_HTTP_TLS_KEY 兩個參數(shù)啟用倉庫的證書支持。
(3)在每一臺 Docker 客戶端宿主機上配置域名解析,使宿主機可以解析域名 “registry.Docker.com”,并在宿主機中創(chuàng)建名稱與域名名稱相同的目錄,示例代碼如下:
(4)將證書 damain.crt 復制到要使用倉庫的 Docker 宿主機,并放到 /etc/Docker/certs.d/registry.Docker.com:5000/
目錄下,示例代碼如下:
(5)Docker-1 是倉庫的宿主機,下面使用 Docker-2 推送鏡像到私有倉庫,示例代碼如下:
以上示例成功將 Docker-2 中的鏡像推送至私有倉庫,并通過 -k 選項關閉 curl 對證書的驗證。
注意,默認情況下,證書只支持基于域名訪問,要使其支持 IP 地址訪問,需要修改配置文件 Openssl.cnf。
在 CentOS7 系統(tǒng)中,文件所在位置是 /etc/pki/tls/Openssl.cnf
。
在文件中的 [ v3_ca ]
部分添加 subjectAltName 選項,示例代碼如下:
保存退出后,重新生成證書即可使用。
基本身份驗證
企業(yè)創(chuàng)建私有鏡像倉庫時,為防止信息泄露,通常會為倉庫添加訪問限制。
實現(xiàn)訪問限制的最簡單的方法是基本身份驗證,下面通過本機基本身份驗證,為倉庫添加訪問限制。
(1)創(chuàng)建用戶密碼文件,示例代碼如下:
以上示例創(chuàng)建了用戶密碼文件 testuser 與 testpassword。
(2)運行倉庫容器,并指定 TLS 證書與身份驗證目錄,示例代碼如下:
(3)嘗試推送鏡像,示例代碼如下:
以上示例中,鏡像推送失敗,原因是沒有基本身份驗證憑據(jù)。
(4)通過用戶名與密碼登錄,示例代碼如下:
(5)登錄之后,再次推送鏡像,示例代碼如下:
以上示例在登錄之后成功推送鏡像到私有倉庫。
4. Nginx 反向代理倉庫
使用 Nginx 代理可以實現(xiàn)倉庫的認證功能。
簡而言之,就是將 Nginx 服務器作為私有倉庫的代理使用,如圖所示??
(1)私有倉庫的搭建采用前文中的方式,首先在 Docker-1 中安裝Nginx,并修改其配置文件。
(2)然后通過 OpenSSL 工具生成私鑰和證書,示例代碼如下:
(3)使用 htpasswd 工具生成用戶賬戶,并設置密碼,示例代碼如下:
(4)啟動 Nginx 服務,示例代碼如下:
(5)訪問測試
使用瀏覽器訪問 https://192.168.56.146:443,出現(xiàn)登錄界面,如圖所示。
輸入正確的賬號密碼即可訪問倉庫。
(6)在 Docker-2 登錄倉庫,并推送鏡像到倉庫,示例代碼如下:
以上示例在宿主機 Docker-2 中進行域名修改及證書復制之后,將鏡像成功推送至 Docker-1 的鏡像私有倉庫。
5. 可視化私有倉庫
私有倉庫雖然搭建十分簡便但使用起來還是不夠方便,用戶不能直觀地看到倉庫中的資源情況。
本節(jié)將部署基礎的 UI(User Interface,用戶界面)工具,使用戶可以在 Web 界面直觀地看到倉庫中的鏡像以及鏡像的版本等信息。
私有倉庫的可視化需要 UI 工具 hyper/Docker-registry-web 來支持實現(xiàn),如此可提高倉庫的可讀性。
(1)同樣采用拉取鏡像的方式運行 hyper/Docker-registry-web,示例代碼如下:
(2)啟動 hyper/Docker-registry-web 工具并連接私有倉庫,示例代碼如下:
以上示例啟動了 hyper/Docker-registry-web 工具并連接了私有倉庫,此時已經(jīng)可以通過訪問 IP 地址與端口號查看私有倉庫的信息。
其中,--link
設置要連接的倉庫容器,-e
設置環(huán)境變量。
(3)拉取任意鏡像到私有倉庫中,示例代碼如下:
使用瀏覽器訪問私有倉庫,查看鏡像信息,如圖所示。
查看鏡像的標簽、大小、構(gòu)建歷史等信息,如圖所示??
??
總結(jié)
本文章詳細介紹了如何搭建 Docker 私有倉庫,如何通過配置證書為倉庫添加安全級別與身份驗證,如何使用 Nginx 代理倉庫。
相信大家已經(jīng)通過本文章的學習已經(jīng)熟練掌握了鏡像私有倉庫的相關知識,并能夠搭建出企業(yè)級的私有倉庫。
到此這篇關于如何高效地搭建Docker私有倉庫的文章就介紹到這了,更多相關Docker私有倉庫搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
CentOS 7.2 下安裝 Docker 1.12.3 版的詳細方法
這篇文章主要介紹了CentOS 7.2 安裝 Docker 1.12.3 版的相關資料,本文分步驟給大家介紹了CentOS 7.2 下安裝 Docker 1.12.3 版的詳細方法,需要的朋友可以參考下2016-11-11基于spring-boot和docker-java實現(xiàn)對docker容器的動態(tài)管理和監(jiān)控功能[附完整源碼下載]
Docker 是一個開源的應用容器引擎,和傳統(tǒng)的虛擬機技術(shù)相比,Docker 容器性能開銷極低,因此也廣受開發(fā)者喜愛。這篇文章主要介紹了基于spring-boot和docker-java實現(xiàn)對docker容器的動態(tài)管理和監(jiān)控 ,需要的朋友可以參考下2019-06-06docker?環(huán)境搭建、docker?與容器常用指令大全(推薦)
這篇文章主要介紹了docker?環(huán)境搭建、docker?與容器常用指令大全,主要包括docker容器操作命令匯總,文中介紹需要注意的是如果想要刪除一個容器,需要先停止該容器且如果鏡像中有運行狀態(tài)的容器,也是無法刪除容器的,需要的朋友可以參考下2022-06-06如何使用docker創(chuàng)建minio鏡像并上傳文件并提供demo
這篇文章主要介紹了使用docker創(chuàng)建minio鏡像并上傳文件,提供demo,minio還是很方便的,從部署到使用,都可以非??焖俚拇罱?而且比較穩(wěn)定,需要的朋友可以參考下2023-09-09Docker aufs存儲驅(qū)動layer、diff、mnt目錄的區(qū)別介紹
這篇文章主要介紹了Docker aufs存儲驅(qū)動layer、diff、mnt目錄的區(qū)別,需要的朋友可以參考下2017-04-04