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

Registry 使用Go語言編寫,在性能和安全性上做了很多優化,重新設計了鏡像的存儲格式。

如果需要安裝registry ,只需下載最新的registry鏡像即可,應該說此類倉庫搭建只能用于測試學習之用,不能用于生產環境。

生產環境中,請使用 nexus或harbor之類的可以用來構建docker鏡像倉庫軟件!


一、實驗環境

兩臺裝有Docker的CentOS7.2虛擬機

虛擬機1:192.168.112.132 用作測試機

虛擬機2:192.168.112.136 用作私有倉庫

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


二、搭建私有倉庫

首先在136機器上下載registry鏡像

# docker pull registry


用鏡像啟動一個容器

# docker run -d -p 5000:5000 registry

默認情況下,會將倉庫存放于容器內的/tmp/registry目錄下,這樣如果容器被刪除,則存放于容器中的鏡像也會丟失,所以我們一般情況下會指定本地一個目錄掛載到容器內的/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

相關參數說明:

-p? --publish? 端口映射

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

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

--restart=always? 創建容器,設置為隨docker啟動

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

三、實驗測試

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

# docker pull busybox

給鏡像打tag,tag不加版本號,默認是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

因為Docker從1.3.X之后,與docker registry交互默認使用的是https,然而此處搭建的私有倉庫只提供http服務,所以當與私有倉庫交互時就會報上面的錯誤。

為了解決這個問題需要在啟動docker server時增加啟動參數為默認使用http訪問。

修改docker啟動配置文件(此處是修改132機器的配置)在其中增加"--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的啟動參數

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

# dockerd? --insecure-registry 192.168.112.136:5000

2.如果用systemctl啟動,修改服務的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

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

# docker? push 192.168.112.136:5000/busybox:v1

可以看到鏡像已經push到私有倉庫中去了。


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

# docker? pull192.168.112.136:5000/busybox


到此就搭建好了Docker私有倉庫,上面搭建的倉庫是不需要認證的,我們可以結合nginx和https實現認證和加密功能。

四、參考

Authenticate proxy with nginx

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

透過 nginx 反向代理docker 私有 registry

http://www.lxweimin.com/p/265f228a0471

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容