文章目錄
Docker Registry 需要 Docker 版本高於等於 1.6.0
Registry是一個無狀態、高度可擴展的服務器側應用程序,用於存儲和允許您分發Docker鏡像
內網環境下,可以使用 Docker Registry 來解決k8s集群的鏡像拉取問題,當然,公網情況下, Docker Registry 私密性更高,比共有倉庫更適合
如果需要 Docker Registry 開啟認證功能,可以直接看
配置 Docker Registry 認證
搭建 Docker Registry
創建本地映射目錄
這個目錄可以自定義,根據自身實際磁盤空間情況進行創建,將容器內的文件映射到本地,以此來達到持久化的效果
# mkdir /var/lib/registry
啟動 Docker Registry
docker命令中,冒號前面的為本地路徑或端口,冒號后面的為容器內部的路徑或端口
-p
:將本地5000端口映射給容器內的5000端口(Docker Registry默認端口),本地端口可以自定義,只要是空閑的端口即可
--restart
:容器的重啟策略
--name
:啟動的容器名稱
-v
:將本地目錄映射到容器內的/var/lib/registry目錄
-d
:將容器放到后台運行
registry
:鏡像名,不加tag,默認拉取latest,如果本地不存在,啟動容器前,會自動拉取
# docker run -p 5000:5000 \
--restart=always \
--name registry \
-v /var/lib/registry:/var/lib/registry \
-d registry
配置 Docker Registry
# vim /etc/docker/daemon.json
注意json語法格式
如果重啟docker失敗,日志有如下輸出,表示
daemon.json
文件的格式有錯誤,注意最后是否需要加上逗號
unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair
"insecure-registries": ["ip:端口"]
重啟docker
# systemctl daemon-reload
# systemctl restart docker
配置 Docker Registry 認證
創建 Docker Registry 認證文件目錄
# mkdir /var/lib/registry_auth
創建 Docker Registry 認證文件
使用 Apache 的 htpasswd 來創建加密文件
# yum install -y httpd-tools
# htpasswd -Bbn admin admin > /var/lib/registry_auth/htpasswd
啟動帶認證的 Docker Registry
REGISTRY_AUTH=htpasswd
# 以 htpasswd 的方式認證
REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
# 注冊認證
REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
# 認證的用戶密碼
# docker run -p 5000:5000 \
--restart=always \
--name registry \
-v /var/lib/registry:/var/lib/registry \
-v /var/lib/registry_auth/:/auth/ \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-d registry
配置 Docker Registry
# vim /etc/docker/daemon.json
注意json語法格式
如果重啟docker失敗,日志有如下輸出,表示
daemon.json
文件的格式有錯誤,注意最后是否需要加上逗號
unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair
"insecure-registries": ["ip:端口"]
重啟docker
# systemctl daemon-reload
# systemctl restart docker
登錄 Docker Registry
- 登錄可以是免交互式,也可以是交互式的
docker login -u 用戶名 -p 密碼 ip:端口
# 一般不建議使用明文密碼
docker login -u 用戶名 -p ip:端口
# 不輸入密碼,回車后,使用交互式輸入密碼(輸入的密碼不會顯示)
docker login ip:端口
# 不輸入密碼和用戶名,回車后,使用交互式輸入用戶名和密碼(輸入的密碼不會顯示)
# docker login ip:端口
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
退出登錄
# docker logout ip:端口
測試 Docker Registry
給鏡像打上 Docker Registry 的倉庫標簽
# docker tag centos:7 ip:端口/centos:7
將新打標簽的鏡像上傳鏡像到倉庫
# docker push ip:端口/centos:7
查看鏡像,可以看到我們上傳的 centos 7 這個鏡像了
# curl ip:端口/v2/_catalog -u admin
Enter host password for user 'admin':
{"repositories":["centos"]}
查看鏡像包含的tag
需要先使用
_catalog
查看鏡像的名稱
# curl ip:端口/v2/centos/tags/list -u admin
Enter host password for user 'admin':
{"name":"centos","tags":["8","7","7.1"]}
需要先使用_catalog
查看鏡像的名稱
# curl ip:端口/v2/centos/tags/list -u admin
Enter host password for user 'admin':
{"name":"centos","tags":["8","7","7.1"]}