部署 Docker Registry 并配置认证登录
文章目录
Docker Registry 需要 Docker 版本高于等于 1.6.0
Registry是一个无状态、高度可扩展的服务器侧应用程序,用于存储和允许您分发Docker镜像
内网环境下,可以使用 Docker Registry 来解决k8s集群的镜像拉取问题,当然,公网情况下, Docker Registry 私密性更高,比共有仓库更适合
如果需要 Docker Registry 开启认证功能,可以直接看
配置 Docker Registry 认证
搭建 Docker Registry
创建本地映射目录
这个目录可以自定义,根据自身实际磁盘空间情况进行创建,将容器内的文件映射到本地,以此来达到持久化的效果
# mkdir /var/lib/registry
启动 Docker Registry
docker命令中,冒号前面的为本地路径或端口,冒号后面的为容器内部的路径或端口
-p
:将本地5000端口映射给容器内的5000端口(Docker Registry默认端口),本地端口可以自定义,只要是空闲的端口即可
--restart
:容器的重启策略
--name
:启动的容器名称
-v
:将本地目录映射到容器内的/var/lib/registry目录
-d
:将容器放到后台运行
registry
:镜像名,不加tag,默认拉取latest,如果本地不存在,启动容器前,会自动拉取
# docker run -p 5000:5000 \
--restart=always \
--name registry \
-v /var/lib/registry:/var/lib/registry \
-d registry
配置 Docker Registry
# vim /etc/docker/daemon.json
注意json语法格式
如果重启docker失败,日志有如下输出,表示
daemon.json
文件的格式有错误,注意最后是否需要加上逗号
unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair
"insecure-registries": ["ip:端口"]
重启docker
# systemctl daemon-reload
# systemctl restart docker
配置 Docker Registry 认证
创建 Docker Registry 认证文件目录
# mkdir /var/lib/registry_auth
创建 Docker Registry 认证文件
使用 Apache 的 htpasswd 来创建加密文件
# yum install -y httpd-tools
# htpasswd -Bbn admin admin > /var/lib/registry_auth/htpasswd
启动带认证的 Docker Registry
REGISTRY_AUTH=htpasswd
# 以 htpasswd 的方式认证
REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
# 注册认证
REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
# 认证的用户密码
# docker run -p 5000:5000 \
--restart=always \
--name registry \
-v /var/lib/registry:/var/lib/registry \
-v /var/lib/registry_auth/:/auth/ \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-d registry
配置 Docker Registry
# vim /etc/docker/daemon.json
注意json语法格式
如果重启docker失败,日志有如下输出,表示
daemon.json
文件的格式有错误,注意最后是否需要加上逗号
unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair
"insecure-registries": ["ip:端口"]
重启docker
# systemctl daemon-reload
# systemctl restart docker
登录 Docker Registry
- 登录可以是免交互式,也可以是交互式的
docker login -u 用户名 -p 密码 ip:端口
# 一般不建议使用明文密码
docker login -u 用户名 -p ip:端口
# 不输入密码,回车后,使用交互式输入密码(输入的密码不会显示)
docker login ip:端口
# 不输入密码和用户名,回车后,使用交互式输入用户名和密码(输入的密码不会显示)
# docker login ip:端口
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
退出登录
# docker logout ip:端口
测试 Docker Registry
给镜像打上 Docker Registry 的仓库标签
# docker tag centos:7 ip:端口/centos:7
将新打标签的镜像上传镜像到仓库
# docker push ip:端口/centos:7
查看镜像,可以看到我们上传的 centos 7 这个镜像了
# curl ip:端口/v2/_catalog -u admin
Enter host password for user 'admin':
{"repositories":["centos"]}
查看镜像包含的tag
需要先使用
_catalog
查看镜像的名称
# curl ip:端口/v2/centos/tags/list -u admin
Enter host password for user 'admin':
{"name":"centos","tags":["8","7","7.1"]}
需要先使用_catalog
查看镜像的名称
# curl ip:端口/v2/centos/tags/list -u admin
Enter host password for user 'admin':
{"name":"centos","tags":["8","7","7.1"]}