docker搭建私有倉庫

我們來搭建我們自己的私有倉庫,比較,如果真的要在生產環境使用的話,這是必須的。
首先,我們來準備一下搭建私有倉庫所需要的信息。

#先吧私有倉庫down下來,這需要一點時間,剛好這中間的時間,我們可以準備一下其他的東西docker pull registry

緊接着,registry需要https運行環境,所以來生成我們自己的證書(簡單說明一下,目前的registry版本是2,之前的1是支持非ssl的,docker在0.9以下。)
先交代一下環境:物理機是win10,使用hyper-v 虛擬一個cenots(ip:192.168.50.2)作爲我們的docker host。使用內部網絡,物理機共享本地網絡方式連接上網。私有倉庫使用域名local.registry.docker.com,端口:3075。

#創建證書文件夾mkdir certs#創建registry登錄用戶配置文件文件夾mkdir auth#生成我們的ssl證書openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/local.registry.docker.com.key -x509 -days 365 -out /certs/local.registry.docker.com.crt#創建一個我們的private registry用戶,admin admin 就是賬號和密碼了。docker run --entrypoint htpasswd registry:2 -Bbn admin admin > /auth/htpasswd

網絡環境還不錯的情況下,這個時候pull registry應該也已經完成了。那......
然後,把我們的 私有倉庫跑起來先

docker run -dit -p 3075:5000 --restart=always --name hub \
  -v /auth:/auth \  -e "REGISTRY_AUTH=htpasswd" \  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v /certs:/certs \  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/local.registry.docker.com.crt \  -e REGISTRY_HTTP_TLS_KEY=/certs/local.registry.docker.com.key \
  registry:2

161654-20170621130448320-1383951194.png
解釋一下參數:
-d:表示容器後臺運行
-p:端口映射
--restart=always:可以理解爲開機啓動。開機:就是啓動docker客戶端拉。
--name registry:給容器取一個名字,方便識別和記憶
-v:掛在本地文件到容器中。命令格式:hostdir:cdir[:rw|ro] 主機目錄:容器目錄[:讀寫權限]
-v pwd/auth:/auth:掛在本地的密碼文件夾
-v pwd/certs:/certs:掛在本地的ssl證書文件夾

-e:設置環境變量參數
-e REGISTRY_AUTH:驗證方式
-e REGISTRY_AUTH_HTPASSWD_REALM:驗證域名
-e REGISTRY_AUTH_HTPASSWD_PATH:密碼文件路徑
-e REGISTRY_HTTP_TLS_CERTIFICATE:ssl證書文件路徑
-e REGISTRY_HTTP_TLS_KEY:ssl證書文件路徑
最後的registry則是鏡像的名字了。具體參數什麼的,可以參考registry官方文檔地址
centos docker客戶端配置私有倉庫信任

#在每個安裝docker客戶端的機器上執行。將前面搭建私有倉庫創建的ssl證書copy到/etc/docker/certs.d/[倉庫地址],如果不走這一步,就會收到下下下圖的這種錯誤 x509.......mkdir -p /etc/docker/certs.d/local.registry.docker.com:3075cp /certs/local.registry.docker.com.crt  /etc/docker/certs.d/local.registry.docker.com\:3075/

windows配置私有倉庫
161654-20170621152640413-852558909.png
在然後,登錄到私有倉庫
161654-20170621155844179-121738813.png
161654-20170621155904366-611970333.png

在在然後,吧我們剛纔的hello world項目push到我們的本地倉庫
docker tag imageid imagename:給鏡像打個tag,然後push這個tag到本地倉庫。
161654-20170621160242398-1352596039.png
在在在然後,把我們的私有倉庫的hello world跑起來
161654-20170621153505273-1853021875.png

在在在在然後,在文章的最後,我們在裝一個私有倉庫web ui瀏覽工具(hyper/docker-registry-web):
161654-20170621153609820-445420848.png
本來想安裝一個web ui管理工具:konradkleine/docker-registry-frontend,但是......,奈何......啓動提示 no mpm loaded 錯誤。詳見問題描述及解決辦法https://github.com/kwk/docker-registry-frontend/issues/88。不想折騰了,索性安裝另外一個web ui 瀏覽工具
話說web ui還是有好幾個的,排在最前面的3個ui鏡像,第一個安裝有錯誤,要特殊處理,那我們就安裝第二個好了......
161654-20170621160223866-1362917089.png

docker run -dit -p 8899:8080 --restart=always --name registry-web-manager --link registry -e REGISTRY\_BASIC\_AUTH="YWRtaW46YWRtaW4=" -e REGISTRY\_TRUST\_ANY\_SSL=true -e REGISTRY\_URL=https://local.registry.docker.com:3075/v2/ -e REGISTRY\_NAME=https://local.registry.docker.com:3075 --add-host local.registry.docker.com:192.168.50.2 hyper/docker-registry-web

安裝腳本參數解釋
--link registry:容器之間建立聯繫,個人猜測,起始不需要,因爲沒用到.......
-e REGISTRY_BASIC_AUTH:連接到私有倉庫的賬號密碼base64結果(base64(username:password))。所以爲什麼倉庫爲什麼要選擇htpasswd驗證方式了。
-e REGISTRY_TRUST_ANY_SSL:忽略ssl錯誤,因爲我們用的是自簽名的ssl證書
-e REGISTRY_URL:倉庫訪問地址
-e REGISTRY_NAME:倉庫名
--add-host local.registry.docker.com:192.168.50.2:增加一條本地host。指示對我們local.registry.docker.com的訪問解析到我們的docker host機器上,這樣,在我們的web ui容器中訪問我們的私有倉庫地址時,才能正確解析。
這幾天的學習和折騰就暫時到這裏了,後續在研究一下docker-compose容器編排和自動構建部署。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章