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

解釋一下參數: -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:3075
cp /certs/local.registry.docker.com.crt  /etc/docker/certs.d/local.registry.docker.com\:3075/

windows配置私有倉庫

在然後,登錄到私有倉庫 

在在然後,吧我們剛纔的hello world項目push到我們的本地倉庫 docker tag imageid imagename:給鏡像打個tag,然後push這個tag到本地倉庫。

在在在然後,把我們的私有倉庫的hello world跑起來

在在在在然後,在文章的最後,我們在裝一個私有倉庫web ui瀏覽工具(hyper/docker-registry-web):

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

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容器編排和自動構建部署。

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