緊接上一篇鏡像釋出到官方之後,我們來搭建我們自己的私有倉庫,比較,如果真的要在生産環境使用的話,這是必須的。
首先,我們來準備一下搭建私有倉庫所需要的資訊。
#先吧私有倉庫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:挂在本地的密碼檔案夾
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容器編排和自動建構部署。