Docker官方提供了公有的registry:Docker Hub闯传,企業(yè)內(nèi)部可自建私有倉庫忧换。常見的可以有2種方式:docker-registry或基于gitlab
【registry方式】
1. openssl生成證書
openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry-test.key -x509 -days 365 -out registry-test.crt
輸入相應的國家/省/市/公司等,例如:
Issuer: C=cn, ST=gd, L=gz, O=xj, OU=xj, CN=xj.com emailAddress=123@xj.com
注意 CN 設置為相應域名载荔,如: xj.com
2. 本機docker認證
在 /etc/docker/certs.d 下創(chuàng)建目錄:xj.com:1234,然后把.crt文件(僅該文件即可,key可以不用)COPY到目錄下
3. 重啟DOCKER Daemon
systemctl restart docker
4. 創(chuàng)建加密文件
htpasswd -bc htpasswd user 123456? ----目前使用不起作用掀泳,后續(xù)再跟進
htpasswd -cB htpasswd user1? ----創(chuàng)建htpasswd文件,測試OK
htpasswd -B htpasswd user2? ---在htpasswd文件中追加用戶西轩,測試OK
5. 部署registry
1) docker pull registry:2
2) 通過docker run或docker-compose啟動员舵,其中可設置認證方式/加密文件路徑/證書key/證書等
docker run啟動:
docker run? -d? -p 1234:5000? --restart=always? --name myregistry \
? -v /home/apps/aa/common/conf/registry/auth:/auth \
? -e? "REGISTRY_AUTH=htpasswd" \
? -e? "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
? -e? REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
? -v /home/apps/aa/common/conf/registry/certs:/certs \
? -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/aa.crt \
? -e REGISTRY_HTTP_TLS_KEY=/certs/aa.key \
? registry:2
6. 部署WebUI
兩個 web ui,一個是 docker-registry-frontend藕畔,另一個是 hyper/docker-registry-web马僻。
這兩個 ui 功能差不多,只需任選其一就可以了注服。截止目前韭邓,docker-registry-frontend 的功能還不完善,沒有刪除鏡像的功能溶弟,只能瀏覽女淑。后一個同時具備 刪除和瀏覽 的功能。
1)docker-registry-frontend方式
參考registry-frontend.yml 辜御,啟動后鸭你,必須使用https://xj.com:8443 進行訪問,目前只能查看擒权,不能修改袱巨,刪除。
官網(wǎng):https://github.com/kwk/docker-registry-frontend
2)docker-registry-web方式
docker run -d -p 8080:8080 --name registry-web \
? ? ? ? ? -e REGISTRY_AUTH_ENABLED=false \
? ? ? ? ? -e REGISTRY_READONLY=false \
? ? ? ? ? -e REGISTRY_URL=https://xj.com:1234/v2 \
? ? ? ? ? -e REGISTRY_TRUST_ANY_SSL=true \
? ? ? ? ? -e REGISTRY_NAME=xj.com:1234 hyper/docker-registry-web
3. docker使用registry認證
1) 上述registry設置了登陸認證:用戶名/密碼+證書碳抄。那么訪問的各機器的 /etc/docker/certs.d 目錄下需有對應registry的證書+使用密碼登陸愉老,客戶端機器不需要重啟docker。
2) docker login -u username -p password xj.com:1234 //上面已設置證書纳鼎,用戶名/密碼是上面生成的 user1/123456
3) docker push xj.com:134/aa-html/aa-projectname? //用戶username需有該registry所關(guān)聯(lián)項目aa-html/aa-projectname的push權(quán)限俺夕,例如hello用戶沒有該項目的權(quán)限那么無法push。
注意:
1. 若證書過期贱鄙,直接上上面步驟替換證書劝贸,并重啟registry即可。
2. 主機上的CA.crt證書和私有倉庫上的CA.crt證書不匹配
Error response from daemon: Get https://xj.com:1234/v1/users/: x509: certificate signed by unknown authority
3. docker push時逗宁,image名稱必須以xj.com:1234開頭映九,否則會報錯:denied: requested access to the resource is denied。 如:
docker tag consul xj.com:1234/consul:1.0.0
docker login -u user -p 123456 xj.com:1234
docker push xj.com:1234/consul:1.0.0
【gitlab方式】
1. openssl生成證書
同上
2. 本機docker認證
同上
3. 重啟DOCKER Daemon
同上
4. gitlab(安裝在/var/opt目錄下)本身自帶了 registry 的插件瞎颗,在安裝后件甥,會自動有對應的配置捌议,內(nèi)部通過nginx啟動,相應目錄:/var/opt/gitlab/nginx和/var/opt/gitlab/registry引有。/nginx/conf下有對應的配置文件 gitlab-registry.conf瓣颅,里面有監(jiān)聽端口/ssl的配置等,可參考 gitlab-registry.conf
5. 替換.conf中ssl配置的路徑中的證書譬正,并賦權(quán)限600宫补,如 /etc/gitlab/ssl 下
6. 重啟nginx-registry
7. 設置某個項目使用registry
8. web頁面中刪除tag,也僅僅是刪除索引曾我,未真正刪除數(shù)據(jù)