如何進行Docker私有鏡像倉庫的搭建及認證,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
公司主營業(yè)務(wù):成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出田家庵免費做網(wǎng)站回饋大家。
DockerHub 為我們提供了很多官方鏡像和個人上傳的鏡像,我們可以下載機構(gòu)或個人提供的鏡像,也可以上傳我們自己的本地鏡像,但缺點是:
由于網(wǎng)絡(luò)的原因,從 DockerHub 下載和上傳鏡像速度可能會比較慢;
在生產(chǎn)上使用的 Docker 鏡像可能包含我們的代碼、配置信息等,不想被外部人員獲取,只允許內(nèi)網(wǎng)的開發(fā)人員下載。
為了解決以上問題,Docker 官方提供了一個叫做 registry
的鏡像用于搭建本地私有倉庫使用。在內(nèi)部網(wǎng)絡(luò)搭建的 Docker 私有倉庫可以使內(nèi)網(wǎng)人員下載、上傳都非??焖?,不受外網(wǎng)帶寬等因素的影響,同時不在內(nèi)網(wǎng)的人員也無法下載我們的鏡像,并且私有倉庫也支持配置倉庫認證功能。
拉取私有倉庫鏡像。
docker pull registry
修改 daemon.json 文件。
vi /etc/docker/daemon.json
添加以下內(nèi)容,用于讓 Docker 信任私有倉庫地址,保存退出。
{ "insecure-registries": ["192.168.10.10:5000"] }
重新加載配置信息及重啟 Docker 服務(wù)。
# 重新加載某個服務(wù)的配置文件 sudo systemctl daemon-reload # 重新啟動 docker sudo systemctl restart docker
創(chuàng)建私有倉庫容器。
docker run -di --name registry -p 5000:5000 -v /mydata/docker_registry:/var/lib/registry registry
-d
:后臺運行容器;
--name
:為創(chuàng)建的容器命名;
-p
:表示端口映射,前者是宿主機端口,后者是容器內(nèi)的映射端口??梢允褂枚鄠€ -p 做多個端口映射;
-v
:將容器內(nèi) /var/lib/registry
目錄下的數(shù)據(jù)掛載至宿主機 /mydata/docker_registry
目錄下;
打開瀏覽器輸入:http://192.168.10.10:5000/v2/_catalog 看到 {"repositories":[]}
表示私有倉庫搭建成功并且內(nèi)容為空。
先給鏡像設(shè)置標簽 docker tag local-image:tagname new-repo:tagname
;
再將鏡像推送至私有倉庫 docker push new-repo:tagname
。
docker tag hello-world:latest 192.168.10.10:5000/test-hello-world:1.0.0 docker push 192.168.10.10:5000/test-hello-world:1.0.0
打開瀏覽器輸入:http://192.168.10.10:5000/v2/_catalog 可以看到私有倉庫中已上傳的鏡像。
由于我們做了目錄掛載,因此可以在宿主機 /mydata/docker_registry/docker/registry/v2/repositories
目錄下查看。
私有倉庫已經(jīng)搭建好了,要確保私有倉庫的安全性,還需要一個安全認證證書,防止發(fā)生意想不到的事情。所以需要在搭建私有倉庫的 Docker 主機上先生成自簽名證書。
創(chuàng)建證書存儲目錄。
mkdir -p /usr/local/registry/certs
生成自簽名證書命令。
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt
openssl req
:創(chuàng)建證書簽名請求等功能;
-newkey
:創(chuàng)建 CSR 證書簽名文件和 RSA 私鑰文件;
rsa:2048
:指定創(chuàng)建的 RSA 私鑰長度為 2048;
-nodes
:對私鑰不進行加密;
-sha256
:使用 SHA256 算法;
-keyout
:創(chuàng)建的私鑰文件名稱及位置;
-x509
:自簽發(fā)證書格式;
-days
:證書有效期;
-out
:指定 CSR 輸出文件名稱及位置;
通過 openssl 先生成自簽名證書,運行命令以后需要填寫一些證書信息,里面最關(guān)鍵的部分是:Common Name (eg, your name or your server's hostname) []:192.168.10.10
,這里填寫的是私有倉庫的地址。
[root@localhost ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt Generating a 2048 bit RSA private key .......................+++ .........................+++ writing new private key to '/usr/local/registry/certs/domain.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:SH Locality Name (eg, city) [Default City]:SH Organization Name (eg, company) [Default Company Ltd]:mrhelloworld Organizational Unit Name (eg, section) []:mrhelloworld Common Name (eg, your name or your server's hostname) []:192.168.10.10 Email Address []:mrhelloworld@126.com
# 創(chuàng)建存儲鑒權(quán)密碼文件目錄 mkdir -p /usr/local/registry/auth # 如果沒有 htpasswd 功能需要安裝 httpd yum install -y httpd # 創(chuàng)建用戶和密碼 htpasswd -Bbn root 1234 > /usr/local/registry/auth/htpasswd
htpasswd 是 apache http 的基本認證文件,使用 htpasswd 命令可以生成用戶及密碼文件。
docker run -di --name registry -p 5000:5000 \ -v /mydata/docker_registry:/var/lib/registry \ -v /usr/local/registry/certs:/certs \ -v /usr/local/registry/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry
先給鏡像設(shè)置標簽 docker tag local-image:tagname new-repo:tagname
;
再將鏡像推送至私有倉庫 docker push new-repo:tagname
。
docker tag hello-world:latest 192.168.10.10:5000/test-hello-world:1.0.0 docker push 192.168.10.10:5000/test-hello-world:1.0.0
如果直接 push 鏡像肯定會失敗,并且出現(xiàn) no basic auth credentials
的錯誤,這是因為我們沒有進行登錄認證。
通過 docker login
命令輸入賬號密碼登錄私有倉庫。
再次 push 鏡像,發(fā)現(xiàn)已經(jīng)可以推送成功了。
通過 docker logout
命令退出賬號。
[root@localhost ~]# docker logout 192.168.10.10 Removing login credentials for 192.168.10.10
私有鏡像倉庫的搭建還可以通過 Harbor 實現(xiàn),Harbor 是由 VMware 公司開源的企業(yè)級的 Docker Registry 管理項目,它包括權(quán)限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊、鏡像復(fù)制和中文支持等功能。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。