14.Docker registry搭建私人镜像仓库

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


上传成功
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容