【Docker Registry】用docker registry 鏡像搭建私有測試倉庫

Registry 使用Go語言編寫,在性能和安全性上做了很多優(yōu)化,重新設(shè)計(jì)了鏡像的存儲格式。

如果需要安裝registry ,只需下載最新的registry鏡像即可,應(yīng)該說此類倉庫搭建只能用于測試學(xué)習(xí)之用,不能用于生產(chǎn)環(huán)境。

生產(chǎn)環(huán)境中,請使用 nexus或harbor之類的可以用來構(gòu)建docker鏡像倉庫軟件!


一、實(shí)驗(yàn)環(huán)境

兩臺裝有Docker的CentOS7.2虛擬機(jī)

虛擬機(jī)1:192.168.112.132 用作測試機(jī)

虛擬機(jī)2:192.168.112.136 用作私有倉庫

此處我們準(zhǔn)備了兩個虛擬機(jī),分別都安裝了Docker,其中132機(jī)器用作開發(fā)機(jī),136機(jī)器用作registry私有倉庫機(jī)器。環(huán)境準(zhǔn)備好之后接下來我們就開始搭建私有鏡像倉庫。


二、搭建私有倉庫

首先在136機(jī)器上下載registry鏡像

# docker pull registry


用鏡像啟動一個容器

# docker run -d -p 5000:5000 registry

默認(rèn)情況下,會將倉庫存放于容器內(nèi)的/tmp/registry目錄下,這樣如果容器被刪除,則存放于容器中的鏡像也會丟失,所以我們一般情況下會指定本地一個目錄掛載到容器內(nèi)的/tmp/registry下。

# docker run -d? -p 5000:5000? ? --privileged=true? --restart=always --name=docker_registry? -v /opt/data/registry:/tmp/registry? registry


可以看到我們啟動了一個容器,地址為:192.168.112.136:5000

相關(guān)參數(shù)說明:

-p? --publish? 端口映射

-v /opt/registry:/tmp/registry? 默認(rèn)情況下,會將倉庫存放于容器內(nèi)的/tmp/registry目錄下,指定本地目錄掛載到容器

--privileged=true? CentOS7中的安全模塊selinux把權(quán)限禁掉了,參數(shù)給容器加特權(quán)。不加上傳鏡像會報權(quán)限錯誤(OSError: [Errno 13] Permission denied: '/tmp/registry/repositories/liibrary')或者(Received unexpected HTTP status: 500 Internal Server Error)錯誤

--restart=always? 創(chuàng)建容器,設(shè)置為隨docker啟動

--name? ? 容器名,此處為倉庫名

三、實(shí)驗(yàn)測試

將一個本地鏡像push到私有倉庫中,首先在132機(jī)器下pull一個比較小的鏡像來測試(此處使用的是busybox)

# docker pull busybox

給鏡像打tag,tag不加版本號,默認(rèn)是latest

#? docker tag busybox? 192.168.112.136:5000/busybox

tag 加上特定的版本號v1

#? docker tag? busybox? ? 192.168.112.136:5000/busybox:v1

將打了tag的鏡像上傳到私有倉庫

# docker? push? 192.168.112.136:5000/busybox

# docker? push? 192.168.112.136:5000/busybox:v1


可以看到push失敗,具體錯誤如下:

Error: Invalid registry endpoint https://192.168.112.136:5000/v1/: Get https://192.168.112.136:5000/v1/_ping: dial tcp 192.168.112.136:5000: connection refused.

If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.112.136:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.112.136:5000/ca.crt

因?yàn)镈ocker從1.3.X之后,與docker registry交互默認(rèn)使用的是https,然而此處搭建的私有倉庫只提供http服務(wù),所以當(dāng)與私有倉庫交互時就會報上面的錯誤。

為了解決這個問題需要在啟動docker server時增加啟動參數(shù)為默認(rèn)使用http訪問。

修改docker啟動配置文件(此處是修改132機(jī)器的配置)在其中增加"--insecure-registry 192.168.112.136:5000"

方法一:

修改Docker配置文件

# vim /etc/default/docker

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 192.168.112.136:5000"

方法二:

通過修改daemon配置文件 /etc/docker/daemon.json

# vim? ? /etc/docker/daemon.json


如果是多個倉庫



方法三:

修改docker的啟動參數(shù)

1. 如果是命令行啟動,添加參數(shù)? --insecure-registry 192.168.112.136:5000

# dockerd? --insecure-registry 192.168.112.136:5000

2.如果用systemctl啟動,修改服務(wù)的service文件

# vim? /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd? --insecure-registry 192.168.112.136:5000


無論使用那種方式,要使得配置生效,都需要重啟docker

# systemctl? restart docker

# docker info

重啟完之后我們再次運(yùn)行推送命令,把本地鏡像推送到私有服務(wù)器上

# docker? push 192.168.112.136:5000/busybox:v1

可以看到鏡像已經(jīng)push到私有倉庫中去了。


我們刪除本地鏡像,然后從私有倉庫中pull下來該鏡像。

# docker? pull192.168.112.136:5000/busybox


到此就搭建好了Docker私有倉庫,上面搭建的倉庫是不需要認(rèn)證的,我們可以結(jié)合nginx和https實(shí)現(xiàn)認(rèn)證和加密功能。

四、參考

Authenticate proxy with nginx

https://docs.docker.com/registry/recipes/nginx

透過 nginx 反向代理docker 私有 registry

http://www.itdecent.cn/p/265f228a0471

https://blog.csdn.net/wanglei_storage/article/details/51444432

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容