1. 程式人生 > 其它 >基於Docker搭建私有映象倉庫

基於Docker搭建私有映象倉庫

參考資料:
https://www.cnblogs.com/niceyoo/p/13058238.html

通常我們在docker中拉取的映象都是在docker hub線上儲存庫中獲取的,這個線上儲存庫裡的docker映象可以由任何使用者釋出和使用,顯然這在某些場景下是不適用的,比如某些互金的隱私專案,或者是公司完全處於內網狀態不能訪問外網,再或者你想個性化定製某些配置等等等,所以這就需要用到私有儲存庫了,今天我們就基於registry映象搭建屬於我們自己的私有倉庫。

1、安裝指令

docker pull registry
預設拉取最新版:

2、配置私有倉庫地址

vim /etc/docker/daemon.json


輸入如下引數,注意修改為自己的ip地址:

"insecure-registries": ["10.211.55.4:5000"]
注:
5000是容器內的埠

:wq 儲存退出,然後我們重啟啟動一下 docker

systemctl restart docker

3、建立容器(必須建立)

docker run -d -p 5000:5000 --name registry docker.io/registry
前面5000是對外的埠,後面5000是容器內的埠
部分引數說明:

-d:讓容器在後臺執行
-p:指定容器內部使用的網路埠對映到我們使用的主機上
--name:指定容器建立的名稱

4、重新載入配置

sudo systemctl daemon-reload


然後瀏覽器訪問:http://10.211.55.4:5000/v2/_catalog

如果訪問不到,嘗試關閉防火牆:

systemctl stop firewalld
如果還是訪問不不到,可以重啟一下docker

sudo systemctl restart docker
然後重新執行一下容器。

或者檢視下對外的埠是否有開放

5、驗證上傳映象到私有倉庫

我們使用HelloWorld映象進行測試,首先先拉取一下:
如果本身有映象就無需拉取
docker pull hello-world

拉取之後我們看一下映象名稱及版本:

至此我們就有了一個 hello-world映象,接下來我們使用 push 指令將映象推送到剛剛搭建的registry中:

標記hello-world該映象需要推送到私有倉庫
docker tag hello-world:latest 127.0.0.1:5000/hello-world:latest

通過push指令推送到私有倉庫
docker push 127.0.0.1:5000/hello-world:latest

注會存在下面問題:
報錯:Get https://18.167.119.109:8087/v2/: http: server gave HTTP response to HTTPS client

原因:
出現這問題的原因是:Docker自從1.3.X之後docker registry互動預設使用的是HTTPS,但是搭建私有映象預設使用的是HTTP服務,所以與私有映象交時出現以上錯誤。

這個報錯是在本地上傳私有映象的時候遇到的報錯:
解決辦法是:在docker server啟動的時候,增加啟動引數,預設使用HTTP訪問:
vim /usr/lib/systemd/system/docker.service
在12行後面增加 --insecure-registry ip:5000

修改好後重啟docker 服務

systemctl daemon-reload

systemctl restart docker

注:如果重啟不了,再修改回來原來配置
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

重啟docker服務後,將容器重啟

docker start $(docker ps -aq)

再來訪問:http://10.211.55.4:5000/v2/_catalog

我們可以看到私有倉庫目錄已經有剛剛推送上去的 hello-world 映象了。

6、驗證從私有倉庫下載映象
驗證完了上傳,我們再來測試一下下載映象:

格式如下:

docker pull 127.0.0.1:5000/映象名稱:映象版本號

以hello-world為例:

docker pull 127.0.0.1:5000/hello-world

到這可能有的小夥伴就有疑惑了,你這通過ip能拉取嗎,我看你一直用的127.0.0.1,畢竟私有倉庫搭建完是要給別人用的嘛~

那麼我們就測試一下:

docker pull 10.211.55.4:5000/hello-world:latest

如上圖所示,通過ip也是可以拉取成功的,但是在這再額外補充一下,有的小夥伴可能提示如下:

Trying to pull repository 10.211.55.4:5000/hello-world ...
Get https://10.211.55.4:5000/v1/_ping: http: server gave HTTP response to HTTPS client
這種顯然是拉取失敗了,提示大致就是,嘗試從https上拉取,但是返回的是http響應,如何解決呢?

我們可以通過如下進行處理一下,xxx修改為自己的ip地址:

echo '{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }' > /etc/docker/daemon.json
其實如果你是按上我上邊這些步驟下來是不會有問題的,在步驟2中配置私有倉庫地址時,其實我們已經配置了insecure-registries,但是配置後我們需要重啟啟動一下docker才可以生效,畢竟是配置了系統檔案嘛~

ok,至此整個搭建過程完畢~