溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

發(fā)布時(shí)間:2021-12-10 16:45:04 來(lái)源:億速云 閱讀:170 作者:柒染 欄目:大數(shù)據(jù)

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

DockerHub 為我們提供了很多官方鏡像和個(gè)人上傳的鏡像,我們可以下載機(jī)構(gòu)或個(gè)人提供的鏡像,也可以上傳我們自己的本地鏡像,但缺點(diǎn)是:

  • 由于網(wǎng)絡(luò)的原因,從 DockerHub 下載和上傳鏡像速度可能會(huì)比較慢;

  • 在生產(chǎn)上使用的 Docker 鏡像可能包含我們的代碼、配置信息等,不想被外部人員獲取,只允許內(nèi)網(wǎng)的開(kāi)發(fā)人員下載。

為了解決以上問(wèn)題,Docker 官方提供了一個(gè)叫做 registry 的鏡像用于搭建本地私有倉(cāng)庫(kù)使用。在內(nèi)部網(wǎng)絡(luò)搭建的 Docker 私有倉(cāng)庫(kù)可以使內(nèi)網(wǎng)人員下載、上傳都非??焖伲皇芡饩W(wǎng)帶寬等因素的影響,同時(shí)不在內(nèi)網(wǎng)的人員也無(wú)法下載我們的鏡像,并且私有倉(cāng)庫(kù)也支持配置倉(cāng)庫(kù)認(rèn)證功能。

拉取私有倉(cāng)庫(kù)鏡像

  拉取私有倉(cāng)庫(kù)鏡像。

docker pull registry

修改配置

  修改 daemon.json 文件。

vi /etc/docker/daemon.json

  添加以下內(nèi)容,用于讓 Docker 信任私有倉(cāng)庫(kù)地址,保存退出。

{
    "insecure-registries": ["192.168.10.10:5000"]
}

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

  重新加載配置信息及重啟 Docker 服務(wù)。

# 重新加載某個(gè)服務(wù)的配置文件
sudo systemctl daemon-reload
# 重新啟動(dòng) docker
sudo systemctl restart docker

創(chuàng)建私有倉(cāng)庫(kù)容器

  創(chuàng)建私有倉(cāng)庫(kù)容器。

docker run -di --name registry -p 5000:5000 -v /mydata/docker_registry:/var/lib/registry registry
  • -d:后臺(tái)運(yùn)行容器;

  • --name:為創(chuàng)建的容器命名;

  • -p:表示端口映射,前者是宿主機(jī)端口,后者是容器內(nèi)的映射端口??梢允褂枚鄠€(gè) -p 做多個(gè)端口映射;

  • -v:將容器內(nèi) /var/lib/registry 目錄下的數(shù)據(jù)掛載至宿主機(jī) /mydata/docker_registry 目錄下;

  打開(kāi)瀏覽器輸入:http://192.168.10.10:5000/v2/_catalog 看到 {"repositories":[]} 表示私有倉(cāng)庫(kù)搭建成功并且內(nèi)容為空。

推送鏡像至私有倉(cāng)庫(kù)

  先給鏡像設(shè)置標(biāo)簽 docker tag local-image:tagname new-repo:tagname;

  再將鏡像推送至私有倉(cāng)庫(kù) 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

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

  打開(kāi)瀏覽器輸入:http://192.168.10.10:5000/v2/_catalog 可以看到私有倉(cāng)庫(kù)中已上傳的鏡像。

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

  由于我們做了目錄掛載,因此可以在宿主機(jī) /mydata/docker_registry/docker/registry/v2/repositories 目錄下查看。

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

配置私有倉(cāng)庫(kù)認(rèn)證

  私有倉(cāng)庫(kù)已經(jīng)搭建好了,要確保私有倉(cāng)庫(kù)的安全性,還需要一個(gè)安全認(rèn)證證書(shū),防止發(fā)生意想不到的事情。所以需要在搭建私有倉(cāng)庫(kù)的 Docker 主機(jī)上先生成自簽名證書(shū)。

  創(chuàng)建證書(shū)存儲(chǔ)目錄。

mkdir -p /usr/local/registry/certs

  生成自簽名證書(shū)命令。

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)建證書(shū)簽名請(qǐng)求等功能;

  • -newkey:創(chuàng)建 CSR 證書(shū)簽名文件和 RSA 私鑰文件;

  • rsa:2048:指定創(chuàng)建的 RSA 私鑰長(zhǎng)度為 2048;

  • -nodes:對(duì)私鑰不進(jìn)行加密;

  • -sha256:使用 SHA256 算法;

  • -keyout:創(chuàng)建的私鑰文件名稱及位置;

  • -x509:自簽發(fā)證書(shū)格式;

  • -days:證書(shū)有效期;

  • -out:指定 CSR 輸出文件名稱及位置;

生成自簽名證書(shū)

  通過(guò) openssl 先生成自簽名證書(shū),運(yùn)行命令以后需要填寫(xiě)一些證書(shū)信息,里面最關(guān)鍵的部分是:Common Name (eg, your name or your server's hostname) []:192.168.10.10,這里填寫(xiě)的是私有倉(cāng)庫(kù)的地址。

[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

生成鑒權(quán)密碼文件

# 創(chuàng)建存儲(chǔ)鑒權(quán)密碼文件目錄
mkdir -p /usr/local/registry/auth
# 如果沒(méi)有 htpasswd 功能需要安裝 httpd
yum install -y httpd
# 創(chuàng)建用戶和密碼
htpasswd -Bbn root 1234 > /usr/local/registry/auth/htpasswd

htpasswd 是 apache http 的基本認(rèn)證文件,使用 htpasswd 命令可以生成用戶及密碼文件。

創(chuàng)建私有倉(cāng)庫(kù)容器

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

推送鏡像至私有倉(cāng)庫(kù)失敗

  先給鏡像設(shè)置標(biāo)簽 docker tag local-image:tagname new-repo:tagname;

  再將鏡像推送至私有倉(cāng)庫(kù) 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 鏡像肯定會(huì)失敗,并且出現(xiàn) no basic auth credentials 的錯(cuò)誤,這是因?yàn)槲覀儧](méi)有進(jìn)行登錄認(rèn)證。

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

登錄賬號(hào)

  通過(guò) docker login 命令輸入賬號(hào)密碼登錄私有倉(cāng)庫(kù)。

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

推送鏡像至私有倉(cāng)庫(kù)成功

  再次 push 鏡像,發(fā)現(xiàn)已經(jīng)可以推送成功了。

如何進(jìn)行Docker私有鏡像倉(cāng)庫(kù)的搭建及認(rèn)證

退出賬號(hào)

  通過(guò) docker logout 命令退出賬號(hào)。

[root@localhost ~]# docker logout 192.168.10.10
Removing login credentials for 192.168.10.10

私有鏡像倉(cāng)庫(kù)的搭建還可以通過(guò) Harbor 實(shí)現(xiàn),Harbor 是由 VMware 公司開(kāi)源的企業(yè)級(jí)的 Docker Registry 管理項(xiàng)目,它包括權(quán)限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊(cè)、鏡像復(fù)制和中文支持等功能。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI