Docker Registry私仓搭建
方式1:绕过https证书
Ø 匿名模式
sudo docker run -d --name=docker-hub-nossl --restart=always -p 5000:5000 registry:2.6.2
Ø 密码认证模式
# 创建registry docker容器:(仓库服务器)
sudo mkdir -p /mnt/registry/auth
# 创建仓库管理员账户口令(dochubacc/dochubpass)
sudo docker run --entrypoint htpasswd registry:2.6.2 -Bbn dochubacc dochubpass | sudo tee /mnt/registry/auth/htpasswd
# 启动私仓服务
sudo docker run -d -p 5000:5000 --restart=always --name docker-hub-nossl \
-v /mnt/registry:/var/lib/registry \
-v /mnt/registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2.6.2
参数说明:
- —restart=always:在容器退出时总是重启容器(包括关机后重启),需要更改重启策略后才能停止容器{docker update —restart=no docker-hub-nossl}。
-v /mnt/registry:/var/lib/registry:表示将容器内默认的挂载点与宿主机建立同步,以防止容器损坏丢失镜像,可以从本地{/mnt/registry/docker/registry/v2/repositories}目录查看。
Ø 私仓登记
绕过Registry的HTTPS证书支持(客户机),其过程为:(1)尝试HTTPS;(2)如果HTTPS连接可达但是证书不可用,忽略证书错误;(3)如果HTTPS连接不可用,使用HTTP。注意:daemon.json **是Docker的配置文件,默认是没有的,需要我们手动创建。**
sudo vi /etc/docker/daemon.json
配置如下:
{
"insecure-registries": ["192.168.0.101:5000"]
}
重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
方式2:配置SSL支持https证书
Ø 生成证书
自签或者购买证书,此处使用自签SSL证书。
# 创建存放证书目录并进入该目录
sudo mkdir -p /mnt/registry/certs && cd /mnt/registry/certs
# 生成证书
sudo openssl req -x509 -days 3650 -subj '/CN=192.168.0.101:5000/' \
-nodes -newkey rsa:2048 -keyout domain.key -out domain.crt
参数说明:
—x509:表示一种自签发证书格式。
- -days:证书有效期。
Ø 生成用户名和密码
# 创建registry docker进程:(仓库服务器执行)
sudo mkdir -p /mnt/registry/auth && cd /mnt/registry/auth
sudo docker run --entrypoint htpasswd registry:2.6.2 -Bbn dochubacc dochubpass | sudo tee /mnt/registry/auth/htpasswd
Ø 启动私仓服务
sudo docker run -d -p 5000:5000 --restart=always --name docker-hub-ssl \
-v /mnt/registry:/var/lib/registry \
-v /mnt/registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v /mnt/registry/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2.6.2
Ø 配置私仓访问接口
完成私仓服务启动后,还需要在搭建私仓的宿主机上配置供其他机器访问的接口,具体指令如下:
sudo mkdir -p /etc/docker/certs.d/192.168.0.101:5000
sudo cp /mnt/registry/certs/domain.crt /etc/docker/certs.d/192.168.0.101:5000
Ø 私仓登记
同方式1,略。使用Docker私仓
方式1:绕过https证书
Ø 登录私仓
sudo docker login 192.168.0.101:5000
sudo docker logout
Ø 查看私库上的镜像
# 匿名模式
curl -XGET http://192.168.0.101:5000/v2/_catalog
# 密码认证模式
curl -u "dochubacc:dochubpass" -XGET http://192.168.0.101:5000/v2/_catalog
Ø 查看镜像标签
# 匿名模式
curl -XGET http://192.168.0.101:5000/v2/busybox/tags/list
# 密码认证模式
curl -u "dochubacc:dochubpass" -XGET http://192.168.0.101:5000/v2/busybox/tags/list
Ø 上传镜像到私仓
# 给镜像打标签(镜像名字规范:{仓库地址:端口/镜像名字:版本})
sudo docker tag busybox:latest 192.168.0.101:5000/busybox:1.0.0
# 上传打标签后的镜像到仓库(需要先登录私仓)
sudo docker push 192.168.0.101:5000/busybox:1.0.0
Ø 从私仓下载镜像
# 下载镜像时如果不指定tag将会把该镜像的所有tags都下载下来
sudo docker pull 192.168.0.101:5000/busybox:1.0.0
方式2:配置SSL支持https证书
Ø 登录私仓
sudo docker login 192.168.0.101:5000
sudo docker logout
Ø 查看私库上的镜像
curl -k --cert /mnt/registry/certs/domain.crt --key /mnt/registry/certs/domain.key -u "dochubacc:dochubpass" https://192.168.0.101:5000/v2/_catalog
Ø 查看镜像标签
curl -k --cert /mnt/registry/certs/domain.crt --key /mnt/registry/certs/domain.key -u "dochubacc:dochubpass" https://192.168.0.101:5000/v2/busybox/tags/list
Ø 上传镜像到私仓
# 给镜像打标签(镜像名字规范:{仓库地址:端口/镜像名字:版本})
sudo docker tag busybox:latest 192.168.0.101:5000/busybox:1.0.0
# 上传打标签后的镜像到仓库(需要先登录私仓)
sudo docker push 192.168.0.101:5000/busybox:1.0.0
Ø 从私仓下载镜像
# 下载镜像时如果不指定tag将会把该镜像的所有tags都下载下来
sudo docker pull 192.168.0.101:5000/busybox:1.0.0