1.啟動一個registry容器
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registrt:/var/lib/registry registry
命令解讀:
--restart=always
一旦docker 重啟,就自動拉起容器
-v /opt/registrt:/var/lib/registry
數(shù)據(jù)卷掛載
2.測試registry狀態(tài)
由于使用的是云服務(wù)器,地址為服務(wù)器的地址+端口
若使用的是虛擬機,請使用虛擬機地址+端口
http://180.76.150.201:5000/v2/_catalog
可以查看到{"repositories": []} 表示現(xiàn)在倉庫中,沒有鏡像images
3.修改 docker配置文件??
vim?/etc/docker/daemon.json
加入如下參數(shù)(registry的地址以及端口):
,"insecure-registries": ["172.17.0.1:5000"]
注意:
參數(shù)間需用 “? , ” 進行分隔
"registry-mirrors": ["https://8m3kgh6j.mirror.aliyuncs.com"] 為配置的阿里云docker加速器的參數(shù),若未配置加速器可忽略
4.重啟docker服務(wù)
systemctl restart docker
5.推送鏡像到registry吧!
鏡像名稱由 repository + tag 兩部分組成,默認(rèn)為latest
repository 的完整格式為:[registry-host]:[port]/[username]/xxx
5.1先給鏡像打個標(biāo)簽,使之與registry 相匹配,例如如下的centos鏡像
docker tag centos_dockerfile_ssh?172.17.0.1:5000/white/centos_ssh:v1
注意:tag 專門用于標(biāo)記本地鏡像,將其歸入某一倉庫。
新鏡像如下:
5.2 push推送鏡像
鏡像標(biāo)簽打好了,就可以開始push鏡像到registry:
docker push??172.17.0.1:5000/white/centos_ssh
顯示如下結(jié)果pushed就是上傳成功了,
6.驗證成果
6.1? web測試是否上傳成功,還是之前的訪問網(wǎng)址,現(xiàn)在可以發(fā)現(xiàn)鏡像已經(jīng)在registry里了
http://180.76.150.201:5000/v2/_catalog
6.2 可以在linux的如下位置看到上傳的鏡像:
[root@instance-x0nj9foj white]# pwd
/opt/registrt/docker/registry/v2/repositories/white
[root@instance-x0nj9foj white]# ls
centos_ssh
/opt/registrt為“”第1步“”設(shè)置的本地掛載目錄
7.測試從本地registry拉取鏡像
7.1.刪除本地鏡像
docker image rm -f $(docker image ls -a -q)
7.2.docker pull? 本地鏡像
# docker pull 172.17.0.1:5000/white/centos_ssh:v1
7.3.查看是否拉取成功
docker images ls
8.registry安全加固
由于docker registry 采用的是http協(xié)議訪問,所以可以從http方面考慮,設(shè)定registry的密碼
8.1 安裝http工具包并生成秘鑰:
yum install httpd-tools -y
生成秘鑰目錄和密碼:
mkdir /opt/registry-auth/ -p?
htpasswd -Bbn white 123 > /opt/registry-auth/htpasswd
用戶名:white
密碼:123
查看生成的秘鑰:
[root@instance-x0nj9foj registry-auth]# cat htpasswd
white:$2y$05$QKDiWqvpqxgm1WvKniHG3.W14CpqnUW9dNoz.EQ.c1OXpsTrIgbW.
[root@instance-x0nj9foj registry-auth]# pwd
/opt/registry-auth
8.2 重新啟動帶有秘鑰功能的registry容器
首先刪除之前沒有密碼的registry
docker rm -f? 'docker ps -aq'
創(chuàng)建帶秘鑰的registry
-e為配置環(huán)境變量
docker run -d -p 5000:5000 -v?/opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
8.3 push測試:
docker image ls選擇一個鏡像
將鏡像tag一下
docker tag?172.17.0.1:5000/white/centos_ssh:v1 172.17.0.1:5000/white/centos_ssh_pwd:v1
8.3.1.錯誤的流程
上傳鏡像到registry
docker push 172.17.0.1:5000/white/centos_ssh_pwd:v1
回顯為 no basic auth credentials
因為已經(jīng)開啟了密碼驗證,所以上傳失敗
8.3.2.正確的流程
1.需要先登錄經(jīng)常倉庫
docker login 172.17.0.1:5000
[root@instance-x0nj9foj opt]# docker login 172.17.0.1:5000? ? ? ? ?#輸入registry的地址
Username: white? ? ? ? #輸入這是的用戶名
Password:?123? ? ? ? ? ? ? ?#輸入設(shè)置的密碼
Login Succeeded? ? ? ?#回顯succeeded表示登錄成功
2.上傳鏡像
docker push 172.17.0.1:5000/white/centos_ssh_pwd:v1