Docker筆記之七:Registry

猛禽大叔發表於2018-08-23

(前六篇見:

自建倉庫

之前說過,我們可以直接從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了。

相關文章