(前六篇見:
自建倉庫
之前說過,我們可以直接從dockerhub上抓取別人做好的image,也可以把自己做的image上傳去共享。
但是如果要做一些自己用的image呢?那就需要自建registry。
官方的registry本身做成了一個image,所以安裝使用非常簡單:
docker pull registry
docker run -d -p 5000:5000 --name registry registry:2
複製程式碼
這樣你就有了一個 localhost:5000 的本地registry,如果要開放出去用的話,則必須使用https,簡單的方法就是用nginx做一層反向代理,加上https支援即可。
# 上傳一個image
docker tag image_name localhost:5000/image_name
docker push localhost:5000/image_name
# 下拉一個image
docker pull localhost:5000/image_name
複製程式碼
如果是經過https代理,則把localhost:5000
換成相應的域名即可。
加上使用者許可權控制
預設的registry服務是開放的,可供任何人訪問,這顯然不是通常自建倉庫想要的,所以需要加上使用者許可權管理。
一個基本的使用者系統類似於web server的basic auth。
先建立一個htpasswd檔案,記錄使用者資訊:
mkdir /var/auth
docker run --entrypoint htpasswd registry -Bbn <username> <password> >> /var/auth/auth_reg
複製程式碼
其中/var/auth/auth_reg
是用於儲存使用者資訊的檔案。<username>
和<password>
則是要建立的使用者名稱和密碼。
然後這樣啟動registry即可:
docker run -d -p 5000:5000 --restart=always -v /var/auth:/var/auth
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/var/auth/auth_reg \
registry
複製程式碼
現在就不能直接push和pull了,需要先登入一下:
docker login localhost:5000
複製程式碼
輸入使用者名稱密碼,之後登入資訊會被儲存在~/.docker/config.json
裡,並且會有一個安全警告,建議使用更安全的儲存方式,比如Mac OS的keychain。
因為登入資訊已經儲存,所以後就可以直接push和pull了。