Docker 公有仓库使用、Docker 私有仓库(Registry)使用总结

Docker 公有仓库使用、Docker 私有仓库(Registry)使用总结

围绕 Docker 公有仓库的使用展开,详细介绍了 Docker Hub 和阿里云容器镜像服务这两大主流公有仓库的操作流程,旨在帮助用户掌握镜像上传、管理等核心技能

一、课程核心目标

明确 Docker 公有仓库的概念与实际应用方法,使学习者能够独立完成将本地 Docker 镜像上传至公有仓库,并进行基础管理操作

二、Docker Hub 公有仓库

Docker Hub 是 Docker 公司维护的公共 Registry,支持用户将镜像保存到免费的 repository,若需保障镜像隐私,可购买私有 repository。其具体使用步骤如下:

  1. 账号注册:访问https://hub.docker.com/,按照页面提示填写 Docker ID、Email、Password 等信息完成注册
  2. 登录操作 :在 Docker host 上执行命令[root@docker ~]# docker login,随后输入注册时的用户名和密码(示例密码为 cy@redhat),登录成功会提示 "Login Succeeded",但需注意密码会以未加密形式存储在/root/.docker/config.json中,可配置凭证助手消除该风险
  3. 镜像重命名 :为区分不同用户的同名镜像,需按 "username/xxx:tag" 格式,使用docker tag命令重命名镜像。例如,将centos:7重命名为cyisbug/centos:7,执行命令[root@docker ~]# docker tag centos:7 cyisbug/centos:7,重命名后可通过docker images命令查看镜像信息
  4. 镜像上传 :通过docker push命令将本地重命名后的镜像上传至 Docker Hub,如上传cyisbug/centos:7的命令为[root@docker ~]# docker push cyisbug/centos:7
  5. 镜像管理:登录https://hub.docker.com/,在 "Public Repository" 中可查看已上传的镜像,若需删除镜像,仅能通过 web 界面操作

三、阿里云公有仓库

阿里云容器镜像服务提供镜像加速器和免费镜像仓库,使用流程如下:

  1. 仓库创建 :访问https://cr.console.aliyun.com/cn-hangzhou/instances/repositories登录阿里云控制台,创建镜像仓库,示例中命名空间为`cygalaxy`,仓库名称为`edu`,镜像将上传至`cygalaxy/edu`
  2. 登录与镜像操作:
    • 登录阿里云仓库:在 Docker host 上执行[root@docker ~]# docker login --username=cyisbug registry.cn-hangzhou.aliyuncs.com,输入密码(示例密码为 redhat)完成登录
    • 镜像重命名:按阿里云仓库格式要求,使用docker tag命令将centos:7重命名为registry.cn-hangzhou.aliyuncs.com/cygalaxy/edu:centos7,命令为[root@docker ~]# docker tag centos:7 registry.cn-hangzhou.aliyuncs.com/cygalaxy/edu:centos7
    • 镜像上传:执行[root@docker ~]# docker push registry.cn-hangzhou.aliyuncs.com/cygalaxy/edu:centos7,将镜像上传至阿里云仓库,可通过docker images查看镜像信息
  3. 镜像查看与删除:在阿里云控制台的 edu 仓库中,可查看已上传镜像的版本、状态、大小、最近更新时间等信息,删除镜像同样需在 web 管理界面操作

具体示例:

复制代码
[root@docker ~]# docker login --username=nick0393369363 crpi-0y2wp1i9qy1jlucg.cn-shanghai.personal.cr.aliyuncs.com
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
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
kod          v1        ff95586a781b   20 hours ago   676MB
saolei       v1        2bca7894c30c   23 hours ago   716MB
nginx        v1        ae77d7a79c65   24 hours ago   536MB
sycentos     7         74d5027f7c62   39 hours ago   204MB
syubuntu     v1        c24052f699a9   39 hours ago   146MB
centossy     7         4d740ad40a41   39 hours ago   228MB
luoqi        v1        f72f60e820dc   39 hours ago   204MB
nginx        latest    07ccdb783875   2 days ago     160MB
httpd        latest    2416cb32cb59   2 months ago   117MB
centos       7         eeb6ee3f44bd   4 years ago    204MB
[root@docker ~]# docker tag httpd:latest crpi-0y2wp1i9qy1jlucg.cn-shanghai.personal.cr.aliyuncs.com/sygalaxy/luoqi:httpd
[root@docker ~]# docker images
REPOSITORY                                                                  TAG       IMAGE ID       CREATED        SIZE
kod                                                                         v1        ff95586a781b   20 hours ago   676MB
saolei                                                                      v1        2bca7894c30c   23 hours ago   716MB
nginx                                                                       v1        ae77d7a79c65   24 hours ago   536MB
sycentos                                                                    7         74d5027f7c62   39 hours ago   204MB
syubuntu                                                                    v1        c24052f699a9   39 hours ago   146MB
centossy                                                                    7         4d740ad40a41   39 hours ago   228MB
luoqi                                                                       v1        f72f60e820dc   39 hours ago   204MB
nginx                                                                       latest    07ccdb783875   2 days ago     160MB
crpi-0y2wp1i9qy1jlucg.cn-shanghai.personal.cr.aliyuncs.com/sygalaxy/luoqi   httpd     2416cb32cb59   2 months ago   117MB
httpd                                                                       latest    2416cb32cb59   2 months ago   117MB
centos                                                                      7         eeb6ee3f44bd   4 years ago    204MB
[root@docker ~]# docker push crpi-0y2wp1i9qy1jlucg.cn-shanghai.personal.cr.aliyuncs.com/sygalaxy/luoqi:httpd
The push refers to repository [crpi-0y2wp1i9qy1jlucg.cn-shanghai.personal.cr.aliyuncs.com/sygalaxy/luoqi]
d454a00187b1: Pushed 
0e34cd3adc60: Pushed 
d7664d7d8c3f: Pushed 
5f70bf18a086: Pushed 
7efe7270f90c: Pushed 
1d46119d249f: Pushed 
httpd: digest: sha256:5b81c69bf03ca93033113c769559b902e06fafceecfbf7ed73e21fe4aa106c29 size: 1572

四、核心要点总结

  1. Docker Hub 是 Docker 公司维护的公共 Registry,支持用户存储镜像至免费或付费(私有)repository
  2. 在 Docker host 上,通过docker login命令可登录 Docker Hub 或阿里云等公有仓库
  3. 利用docker push命令能够将本地镜像上传至对应的公有仓库,上传前需按仓库要求格式完成镜像重命名

Docker 私有仓库(Registry)使用

本文聚焦 Docker 私有仓库的搭建与使用,详细讲解基于 Docker 官方registry镜像搭建本地私有仓库的完整流程,解决企业项目镜像不便存储于公有仓库的问题,帮助用户掌握私有仓库的镜像上传、配置等核心操作

一、课程核心目标

理解 Docker 私有仓库的意义,掌握基于官方registry镜像搭建本地私有仓库的方法,能够完成镜像上传、仓库配置等操作,实现企业内部镜像的安全管理

二、Docker 私有仓库(Registry)核心概念

Docker 默认从公有仓库(如registry.hub.docker.com)拉取镜像,但企业项目镜像因安全性、私密性需求,不宜存储于公有仓库。Docker 官方提供registry镜像,支持用户搭建本地私有仓库,用于内部镜像的存储与管理

三、私有仓库搭建与镜像上传步骤

(一)下载registry镜像并启动仓库容器

  1. 拉取registry镜像:在 Docker host 上执行命令,获取官方

    复制代码
    registry

    镜像(以 2 版本为例),命令如下:

    plaintext 复制代码
    [root@docker ~]# docker pull registry:2

    执行后会显示镜像拉取进度,最终提示 "Status: Downloaded newer image for registry:2",表示镜像拉取成功

  2. 启动仓库容器:通过

    复制代码
    docker run

    命令启动容器,配置端口映射、自动重启等参数,命令如下:

    plaintext 复制代码
    [root@docker ~]# docker run -d -p 5000:5000 --restart always --name cyregistry registry:2
    • -d:后台运行容器;

    • -p 5000:5000:将容器的 5000 端口映射到宿主机的 5000 端口,用于仓库通信;

    • --restart always:使容器随 Docker host 启动而自动启动,保障仓库持续可用;

    复制代码
      --name cyregistry

    :为容器命名为 "cyregistry",便于后续管理。

    执行后会返回容器 ID(如

    复制代码
      d18f87724be3938876705f6c8d48f7c0c2ce377aae3b3c947b491588536cc9ec

    表示容器启动成功

(二)镜像重命名与上传配置

  1. 镜像重命名:私有仓库要求镜像名格式为

    复制代码
    ip:port/xxx:tag
    
    ip

    为仓库所在主机 IP,

    复制代码
    port

    为端口,默认 5000),需使用

    复制代码
    docker tag

    命令修改镜像名。例如,将

    复制代码
    centos:7

    镜像重命名为符合格式的名称,命令如下:

    plaintext 复制代码
    [root@docker ~]# docker tag centos:7 172.25.0.100:5000/centos:7

    执行后通过

    复制代码
    docker images

    命令可查看重命名后的镜像,示例结果中会显示

    复制代码
    172.25.0.100:5000/centos 7 eeb6ee3f44bd 9 months ago 204MB
  2. 配置私有仓库地址:需在 Docker 配置文件中添加私有仓库为 "非安全仓库",避免 HTTPS 验证报错:

    • 编辑配置文件:执行

      复制代码
      [root@docker ~]# vim /etc/docker/daemon.json

      ,在文件中添加私有仓库地址,示例配置如下:

      json 复制代码
      {
      "registry-mirrors": ["https://14lrk6zd.mirror.aliyuncs.com"],
      "insecure-registries": ["172.25.0.100:5000"]
      }
      • registry-mirrors:配置镜像加速器(如阿里云加速器),提升镜像拉取速度
      • insecure-registries:指定私有仓库地址(172.25.0.100:5000),标记为非安全仓库
    • 重启 Docker 服务:配置生效需重启 Docker,命令如下:

      plaintext 复制代码
      [root@docker ~]# systemctl restart docker

(三)镜像上传与仓库验证

  1. 上传镜像到私有仓库:使用

    复制代码
    docker push

    命令将重命名后的镜像上传至私有仓库,命令如下:

    plaintext 复制代码
    [root@docker ~]# docker push 172.25.0.100:5000/centos:7

    执行后会显示镜像推送进度,最终提示 "digest: sha256:... size: 529",表示上传成功

  2. 验证仓库中的镜像:通过

    复制代码
    curl

    命令访问私有仓库 API,查看仓库中的镜像列表,命令如下:

    plaintext 复制代码
    [root@docker ~]# curl http://172.25.0.100:5000/v2/_catalog

    成功时会返回

    复制代码
    {"repositories":["centos"]}

    ,表示仓库中已存在

    复制代码
    centos

    镜像仓库,验证上传有效

具体示例:

上传镜像到docker registry私有仓库

下载registry镜像,运行容器并暴露5000端口,同时添加--restart always参数,可是使容器随着Docker host的启动而启动:

复制代码
[root@docker ~]# docker pull registry:2
2: Pulling from library/registry
44cf07d57ee4: Pull complete 
bbbdd6c6894b: Pull complete 
8e82f80af0de: Pull complete 
3493bf46cdec: Pull complete 
6d464ea18732: Pull complete 
Digest: sha256:a3d8aaa63ed8681a604f1dea0aa03f100d5895b6a58ace528858a7b332415373
Status: Downloaded newer image for registry:2
docker.io/library/registry:2
[root@docker ~]# docker run -d -p 5000:5000 --restart always --name syregistry registry:2
e04d8ce29ebad3e28aba862d434a098ebbc08e1c54021327ecba7aff328aa259

registry默认是不需要身份验证就能直接上传镜像,但是需要修改镜像名来指定仓库地址,镜像格式为

ip:port/xxx:tag,在通过docker push将该镜像推送到私有仓库

复制代码
[root@docker ~]# docker tag centos:7 192.168.100.10:5000/centos:7
[root@docker ~]# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED        SIZE
kod                          v1        ff95586a781b   20 hours ago   676MB
saolei                       v1        2bca7894c30c   24 hours ago   716MB
nginx                        v1        ae77d7a79c65   25 hours ago   536MB
sycentos                     7         74d5027f7c62   40 hours ago   204MB
syubuntu                     v1        c24052f699a9   40 hours ago   146MB
centossy                     7         4d740ad40a41   40 hours ago   228MB
luoqi                        v1        f72f60e820dc   40 hours ago   204MB
nginx                        latest    07ccdb783875   2 days ago     160MB
registry                     2         26b2eb03618e   2 years ago    25.4MB
192.168.100.10:5000/centos   7         eeb6ee3f44bd   4 years ago    204MB
centos                       7         eeb6ee3f44bd   4 years ago    204MB

设置docker的私有仓库地址:

复制代码
[root@docker ~]# vim /etc/docker/daemon.json 
{
 "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn"
 ],"insecure-registries": ["192.168.100.10:5000"]
}
~ 
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker push 192.168.100.10:5000/centos:7
The push refers to repository [192.168.100.10:5000/centos]
174f56854903: Pushed 
7: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
[root@docker ~]# curl http://192.168.100.10:5000/v2/_catalog
{"repositories":["centos"]}

四、核心要点总结

  1. Docker 支持通过官方registry镜像搭建本地私有仓库,满足企业内部镜像的安全管理需求,避免企业镜像暴露于公有仓库
  2. 启动registry容器时,添加--restart always参数可实现容器随 Docker host 自动启动,保障私有仓库持续服务
  3. 私有仓库默认无需身份验证即可上传镜像,但需将镜像名按 "ip:port/xxx:tag" 格式重命名,并在daemon.json中配置私有仓库为 "非安全仓库"(insecure-registries),否则无法正常上传
相关推荐
暴富奥利奥2 小时前
完成docker方式的ros环境配置
linux·学习·docker·容器
红尘客栈24 小时前
K8S基本命令操作
linux·容器·kubernetes
我好饿14 小时前
部署k8s集群+containerd+dashboard
云原生·容器·kubernetes
hello_2504 小时前
动手模拟k8s网络-vxlan模式
网络·容器·kubernetes
海海思思4 小时前
解决Docker "exec format error":架构不匹配问题分析
docker·容器
小马爱打代码5 小时前
Kubernetes:控制器 - ReplicaSet
容器·kubernetes
帅帅梓6 小时前
docker网络
网络·docker·php
Lv-D-J6 小时前
mac下Docker安装nacos
docker
缘的猿7 小时前
云计算划分标准与Kubernetes NetworkPolicy深度解析
容器·kubernetes·云计算