Docker Registry私仓搭建

方式1:绕过https证书

Ø 匿名模式

  1. sudo docker run -d --name=docker-hub-nossl --restart=always -p 5000:5000 registry:2.6.2

Ø 密码认证模式

  1. # 创建registry docker容器:(仓库服务器)
  2. sudo mkdir -p /mnt/registry/auth
  3. # 创建仓库管理员账户口令(dochubacc/dochubpass)
  4. sudo docker run --entrypoint htpasswd registry:2.6.2 -Bbn dochubacc dochubpass | sudo tee /mnt/registry/auth/htpasswd
  5. # 启动私仓服务
  6. sudo docker run -d -p 5000:5000 --restart=always --name docker-hub-nossl \
  7. -v /mnt/registry:/var/lib/registry \
  8. -v /mnt/registry/auth:/auth \
  9. -e "REGISTRY_AUTH=htpasswd" \
  10. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  11. -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  12. 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的配置文件,默认是没有的,需要我们手动创建。**

    1. sudo vi /etc/docker/daemon.json

    配置如下:

    1. {
    2. "insecure-registries": ["192.168.0.101:5000"]
    3. }

    重启服务:

    1. sudo systemctl daemon-reload
    2. sudo systemctl restart docker

    方式2:配置SSL支持https证书

    Ø 生成证书

    自签或者购买证书,此处使用自签SSL证书。

    1. # 创建存放证书目录并进入该目录
    2. sudo mkdir -p /mnt/registry/certs && cd /mnt/registry/certs
    3. # 生成证书
    4. sudo openssl req -x509 -days 3650 -subj '/CN=192.168.0.101:5000/' \
    5. -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt

    参数说明:

  • —x509:表示一种自签发证书格式。

  • -days:证书有效期。

    Ø 生成用户名和密码

    1. # 创建registry docker进程:(仓库服务器执行)
    2. sudo mkdir -p /mnt/registry/auth && cd /mnt/registry/auth
    3. sudo docker run --entrypoint htpasswd registry:2.6.2 -Bbn dochubacc dochubpass | sudo tee /mnt/registry/auth/htpasswd

    Ø 启动私仓服务

    1. sudo docker run -d -p 5000:5000 --restart=always --name docker-hub-ssl \
    2. -v /mnt/registry:/var/lib/registry \
    3. -v /mnt/registry/auth:/auth \
    4. -e "REGISTRY_AUTH=htpasswd" \
    5. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    6. -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    7. -v /mnt/registry/certs:/certs \
    8. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    9. -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    10. registry:2.6.2

    Ø 配置私仓访问接口

    完成私仓服务启动后,还需要在搭建私仓的宿主机上配置供其他机器访问的接口,具体指令如下:
    1. sudo mkdir -p /etc/docker/certs.d/192.168.0.101:5000
    2. sudo cp /mnt/registry/certs/domain.crt /etc/docker/certs.d/192.168.0.101:5000

    Ø 私仓登记

    同方式1,略。

    使用Docker私仓

    方式1:绕过https证书

    Ø 登录私仓

    1. sudo docker login 192.168.0.101:5000
    2. sudo docker logout

    Ø 查看私库上的镜像

    1. # 匿名模式
    2. curl -XGET http://192.168.0.101:5000/v2/_catalog
    3. # 密码认证模式
    4. curl -u "dochubacc:dochubpass" -XGET http://192.168.0.101:5000/v2/_catalog

    Ø 查看镜像标签

    1. # 匿名模式
    2. curl -XGET http://192.168.0.101:5000/v2/busybox/tags/list
    3. # 密码认证模式
    4. curl -u "dochubacc:dochubpass" -XGET http://192.168.0.101:5000/v2/busybox/tags/list

    Ø 上传镜像到私仓

    1. # 给镜像打标签(镜像名字规范:{仓库地址:端口/镜像名字:版本})
    2. sudo docker tag busybox:latest 192.168.0.101:5000/busybox:1.0.0
    3. # 上传打标签后的镜像到仓库(需要先登录私仓)
    4. sudo docker push 192.168.0.101:5000/busybox:1.0.0

    Ø 从私仓下载镜像

    1. # 下载镜像时如果不指定tag将会把该镜像的所有tags都下载下来
    2. sudo docker pull 192.168.0.101:5000/busybox:1.0.0

    方式2:配置SSL支持https证书

    Ø 登录私仓

    1. sudo docker login 192.168.0.101:5000
    2. sudo docker logout

    Ø 查看私库上的镜像

    1. 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

    Ø 查看镜像标签

    1. 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

    Ø 上传镜像到私仓

    1. # 给镜像打标签(镜像名字规范:{仓库地址:端口/镜像名字:版本})
    2. sudo docker tag busybox:latest 192.168.0.101:5000/busybox:1.0.0
    3. # 上传打标签后的镜像到仓库(需要先登录私仓)
    4. sudo docker push 192.168.0.101:5000/busybox:1.0.0

    Ø 从私仓下载镜像

    1. # 下载镜像时如果不指定tag将会把该镜像的所有tags都下载下来
    2. sudo docker pull 192.168.0.101:5000/busybox:1.0.0