基於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,至此整個搭建過程完畢~