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
数据卷挂载
2.测试registry状态
由于使用的是云服务器,地址为服务器的地址+端口
若使用的是虚拟机,请使用虚拟机地址+端口
http://180.76.150.201:5000/v2/_catalog
可以查看到{"repositories": []} 表示现在仓库中,没有镜像images
3.修改 docker配置文件
vim /etc/docker/daemon.json
加入如下参数(registry的地址以及端口):
,"insecure-registries": ["172.17.0.1:5000"]
注意:
参数间需用 “ , ” 进行分隔
"registry-mirrors": ["https://8m3kgh6j.mirror.aliyuncs.com"] 为配置的阿里云docker加速器的参数,若未配置加速器可忽略
4.重启docker服务
systemctl restart docker
5.推送镜像到registry吧!
镜像名称由 repository + tag 两部分组成,默认为latest
repository 的完整格式为:[registry-host]:[port]/[username]/xxx
5.1先给镜像打个标签,使之与registry 相匹配,例如如下的centos镜像
docker tag centos_dockerfile_ssh 172.17.0.1:5000/white/centos_ssh:v1
注意:tag 专门用于标记本地镜像,将其归入某一仓库。
新镜像如下:
5.2 push推送镜像
镜像标签打好了,就可以开始push镜像到registry:
docker push 172.17.0.1:5000/white/centos_ssh
显示如下结果pushed就是上传成功了,
6.验证成果
6.1 web测试是否上传成功,还是之前的访问网址,现在可以发现镜像已经在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步“”设置的本地挂载目录
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协议访问,所以可以从http方面考虑,设定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'
创建带秘钥的registry
-e为配置环境变量
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
因为已经开启了密码验证,所以上传失败
8.3.2.正确的流程
1.需要先登录经常仓库
docker login 172.17.0.1:5000
[root@instance-x0nj9foj opt]# docker login 172.17.0.1:5000 #输入registry的地址
Username: white #输入这是的用户名
Password: 123 #输入设置的密码
Login Succeeded #回显succeeded表示登录成功
2.上传镜像
docker push 172.17.0.1:5000/white/centos_ssh_pwd:v1