首页 > 技术文章 > 部署 Docker Registry 并配置认证登录

chen2ha 2021-05-15 21:34 原文

 

 

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"]}

推荐阅读