文章目录
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"]}