阿里云 ECS 免费搭建 需认证的私有 Docker 仓库

目录

  • 一、Docker 安装和配置
  • 二、需认证私有 Docker 仓库搭建步骤
    • 2.1 第一步:在服务器上,拉取registry镜像
    • 2.2 第二步:创建存放认证用户和密码文件夹
    • 2.3 第三步:创建密码验证文件
    • 2.2 第四步:指定认证配置并启动registry仓库
  • 三、需认证的私有仓库上传与下载

一、Docker 安装和配置

这里服务器系统以 Ubuntu 为例,CentOS,MacOS等系统请移步:《其他系统Docker安装教程》

  • ubuntu 系统安装 Docker 命令:

    sudo apt-get install -y docker.io
    
  • 配置对外开放IP:0.0.0.0,执行下面命令,按图修改

    vim /lib/systemd/system/docker.service 
    

    修改内容如下图:
    阿里云 ECS 免费搭建 需认证的私有 Docker 仓库_第1张图片
    修改配置后,执行下面两条命令重启 Docker 服务

    systemctl daemon-reload 
    service docker restart
    
  • 配置阿里云 Docker 镜像源
    详情请参考☞:【Docker镜像加速】之 阿里云 解决 docker pull 镜像速度慢的问题

    vim /etc/docker/daemon.json
    

    新增以下内容,如图所示:

    {
    	"registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"]	# 配置阿里云加速器
    }
    

    每次修改配置后,记得重启 Docker 服务

    systemctl daemon-reload 
    service docker restart
    

二、需认证私有 Docker 仓库搭建步骤

2.1 第一步:在服务器上,拉取registry镜像

  • 拉取命令如下,如图

    docker pull registry
    

    阿里云 ECS 免费搭建 需认证的私有 Docker 仓库_第2张图片

2.2 第二步:创建存放认证用户和密码文件夹

  • 创建目录命令如下
    mkdir /my_registry/auth -p
    

2.3 第三步:创建密码验证文件

  • 创建认证文件命令如下

    docker run --entrypoint htpasswd registry -Bbn USERNAME PASSWORD > /my_registry/auth/htpasswd
    

2.2 第四步:指定认证配置并启动registry仓库

  • 启动 registry 容器,命令如下

    docker run -d -p 8888:5000 --restart=always --name my_registry \
    			-v /my_registry/registry:/var/lib/registry \
    			-v /my_registry/auth:/auth \
    			-e "REGISTRY_AUTH=htpasswd" \
    			-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    			-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
    			registry
    

    注意: registry 内部对外开放端口是5000,默认情况下,镜像存放在容器的/var/lib/registry目录下(官网 Dockerfile 中可以查看),这样如果容器被删除,则存放于容器中的镜像也会丢失。

  • 测试搭建的仓库是否需要认证
    在浏览器中直接输入服务器IP:8888/v2/_catalog,在弹窗里输入用户名和密码登录后,即可查看当前搭建仓库中存放的镜像列表(注意服务器需开启端口8888入站规则),如图:
    阿里云 ECS 免费搭建 需认证的私有 Docker 仓库_第3张图片

三、需认证的私有仓库上传与下载

  • 登录私有仓库
    docker login -u username -p password 服务器IP:端口
    阿里云 ECS 免费搭建 需认证的私有 Docker 仓库_第4张图片

  • 登录后方可上传镜像
    利用 docker tag 命令给需要上传的镜像打标签
    docker tag IMAGE_ID 服务器IP:端口/IMAGE_NAME
    利用 docker push 上传刚刚 tag 的镜像
    docker push 服务器IP:端口/IMAGE_NAME
    注意: 如果push出现类似https的错误,请在/etc/docker/daemon.json文件里添加"insecure-registries":["服务器IP:端口"],重新尝试;
    阿里云 ECS 免费搭建 需认证的私有 Docker 仓库_第5张图片

  • 登录后方可下载镜像
    拉取私有仓库镜像命令如下:
    docker pull 服务器IP:端口/IMAGE_NAME

  • 删除镜像步骤

  1. 查询镜像名称:
    curl <仓库地址>/v2/_catalog
    curl -XGET http://127.0.0.1:8888/v2/_catalog
    # 返回响应
    {"repositories":["python3"]}
    
  2. 查询镜像tag(版本):
    curl <仓库地址>/v2/<镜像名>/tags/list
    curl  http://127.0.0.1:8888/v2/python3/tags/list
    # 返回响应
    {"name":"python3","tags":["latest"]}
    
  3. 查询镜像digest_hash: 注意 Docker-Content-Digest 的值
    curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET <仓库地址>/v2/<镜像名>/manifests/
    curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET  http://127.0.0.1:8888/v2/python3/manifests/latest
    # 返回响应
    HTTP/1.1 200 OK
    Content-Length: 527
    Content-Type: application/vnd.docker.distribution.manifest.v2+json
    Docker-Content-Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
    Docker-Distribution-Api-Version: registry/2.0
    Etag: "sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649"
    X-Content-Type-Options: nosniff
    Date: Fri, 19 Jul 2020 19:09:44 GMT
    
  4. 删除镜像API:
    curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash,即上面查询的sha256值>"
    curl -I -XDELETE http://127.0.0.1:8888/v2/python3/manifests/sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
    # 返回响应
    HTTP/1.1 202 Accepted
    Docker-Distribution-Api-Version: registry/2.0
    X-Content-Type-Options: nosniff
    Date: Fri, 19 Jul 2020 19:10:56 GMT
    Content-Length: 0
    
  • 操作完毕后,退出登录
    docker logout 服务器IP:端口

你可能感兴趣的:(Docker)