使用場(chǎng)景
- 內(nèi)部網(wǎng)絡(luò),無(wú)法訪問(wèn) Docker Hub
- 控制 image 的存儲(chǔ)方式和存儲(chǔ)位置
- 控制 image 的部署流程
- 內(nèi)部開發(fā)流程需要集成控制 image 的部署和存儲(chǔ)
應(yīng)用邏輯示意圖:
?
安裝 Registry 服務(wù)
概要
Docker Registry 在 docker hub 的名稱是 registry。v1 版本的源碼地址 github.com/docker/docker-registry 已經(jīng)廢棄,v2 版本源碼地址在 github.com/docker/distribution,對(duì)應(yīng)的 API 是 Docker Registry HTTP API V2。
以下安裝沒有使用 HTTPS 方式,啟用 HTTPS 相關(guān)的證書配置參考這個(gè)文檔:
官方文檔參考:
最簡(jiǎn)安裝(啟動(dòng))
docker run -d -p 5000:5000 --name registry registry:2
以上命令未使用用戶名密碼登錄策略。
啟用登錄密碼
生成密碼
登錄密碼可以通過(guò) host 的文件傳入,以下命令調(diào)用容器的 htpasswd
命令生成密碼文件:
mkdir auth
docker run --entrypoint htpasswd registry:2 \
-Bbn <USER_NAME> <PASSWORD> > auth/auth.htpasswd
啟用密碼
通過(guò) –volume 參數(shù)傳入密碼文件:
docker run -d -p 5000:5000 --restart=always --name registry \
--volume `PWD`/auth:/auth \
--env "REGISTRY_AUTH=htpasswd" \
--env "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
--env REGISTRY_AUTH_HTPASSWD_PATH=/auth/auth.htpasswd \
registry:2
修改鏡像存儲(chǔ)
默認(rèn)鏡像數(shù)據(jù)存儲(chǔ)在 Docker Volume 中,可以通過(guò) bind mount 進(jìn)行修改,參數(shù)信息參考 Volume文檔。下面的例子將本機(jī)目錄 PWD
/images 綁定到容器的 /var/lib/registry
docker run -d -p 5000:5000 \
--name auth-registry \
-v `PWD`/images:/var/lib/registry \
-e SQLALCHEMY_INDEX_DATABASE=sqlite:////opt/docker-image/docker-registry.db \
-e STORAGE_PATH=/opt/docker-image \
--restart=always \
docker.onestch.com:5000/admin/registry:0.1
默認(rèn)的存儲(chǔ)引擎為本地文件系統(tǒng),可以修改文件的存儲(chǔ)引擎為 Amazon S3 bucket、Google Cloud Platform 或其他引擎,可以通過(guò)配置 config.yml 的方式修改存儲(chǔ)配置,更多信息參考 Docker Registry 存儲(chǔ)配置文檔。
停止服務(wù)
停止 registry 容器并清理運(yùn)行數(shù)據(jù)
docker stop registry && \
docker rm -v registry
驗(yàn)證
查看容器信息
docker ps --no-trunc
查看全部配置信息或部分信息
docker inspect <CONTAINER_ID>
docker inspect <CONTAINER_ID> | grep -C3 -e "Volumes\":"
docker inspect <CONTAINER_ID> | grep -C2 Binds
docker inspect -f '{{ .Mounts }}' <CONTAINER_ID>
查看映射的詳細(xì)信息
docker volume inspect 4496b0a257b966052ef8d0743014a4f63fc9924251c8de0df0e9c70fde4c45e6
發(fā)布鏡像
登錄服務(wù)
如果安裝(啟動(dòng))的 registry 服務(wù)需要登錄訪問(wèn)時(shí),執(zhí)行:
docker login <REGISTRY_HOST>:<REGISTRY_PORT>
輸入安裝時(shí)設(shè)定的用戶名密碼。
目標(biāo)地址
使用 docker tag 設(shè)定鏡像的目標(biāo)地址,鏡像的目標(biāo)地址包括三部分
<HOST_NAME>[:<HOST_PORT>]/<IMAGE_NAME>:<IMAGE_VERSION>
HOST_NAME : HOST_PORT
目標(biāo) registry 服務(wù)地址,缺省時(shí)使用官方 docker hub 的地址 registry-1.docker.io,且不允許包含下劃線
IMAGE_NAME 發(fā)布目標(biāo)鏡像名稱
IMAGE_VERSION 發(fā)布目標(biāo)鏡像版本
例如:repo.company.com:3456/myapp:0.1
發(fā)布鏡像
發(fā)布的鏡像文件可以從 docker hub 中 Pull 或者本地使用 Dockerfile build 獲得
Pull
docker pull registry
Build
docker build -t docker.onestch.com:5000/admin/registry:0.1 .
首先需要對(duì)鏡像 tag 設(shè)定目標(biāo)倉(cāng)庫(kù),如果 build 的時(shí)候已經(jīng)設(shè)置了目標(biāo)地址,可以不用進(jìn)行 tag 操作
docker tag registry:latest docker.onestch.com:5000/admin/registry:0.1
然后 Push
docker push docker.onestch.com:5000/admin/registry:0.1
驗(yàn)證
重新從私有倉(cāng)庫(kù)中獲取鏡像
docker pull localhost:5000/admin/registry:0.1
0.1: Pulling from admin/registry
Digest: sha256:d738e358b6910d3a53c9c7ff7bbb5eac490ab7a9b12ffb4c1c27f2c53aae9275
Status: Image is up to date for localhost:5000/admin/registry:0.1
安裝 Registry UI
選擇 registry ui,可選的有 atcol/docker-registry-ui、hyper/docker-registry-web、konradkleine/docker-registry-frontend等
安裝運(yùn)行
針對(duì) hyper/docker-registry-web,使用 BASIC 認(rèn)證,未使用 HTTPS的情況
docker run -it -p 8080:8080 \
--rm \
--name registry-web \
--link auth-registry \
-e REGISTRY_URL=http://auth-registry:5000/v2 \
-e REGISTRY_AUTH_ENABLED=false \
-e REGISTRY_BASIC_AUTH=YWRtaW46MTIzNDU2 \
-e REGISTRY_NAME=docker.onestch.com:5000 hyper/docker-registry-web
命令中 auth-registry
是自定的 registry 鏡像。
使用 HTTPS 時(shí)需要傳入 /config/auth.key 文件,或自定義 config.xml 配置,例如:
docker run -it -p 8080:8080 –name registry-web \
–link auth-registry \
-v $(pwd)/config.yml:/conf/config.yml:ro \
hyper/docker-registry-web
管理界面
建立了 registry 服務(wù)后,對(duì) registry 的管理界面在本機(jī)的訪問(wèn)地址是http://localhost:8080,一般 ui 服務(wù)會(huì)和 registry 服務(wù)同樣運(yùn)行在私有網(wǎng)絡(luò),所以我們可以發(fā)布 registry ui 到 registry 服務(wù)器再運(yùn)行。
docker tag docker.io/hyper/docker-registry-web docker.onestch.com:5000/admin/docker-registry-web
docker push docker.onestch.com:5000/admin/docker-registry-web
查看 UI 界面如下圖
?