Docker 公有仓库使用、Docker 私有仓库(Registry)使用总结
围绕 Docker 公有仓库的使用展开,详细介绍了 Docker Hub 和阿里云容器镜像服务这两大主流公有仓库的操作流程,旨在帮助用户掌握镜像上传、管理等核心技能
一、课程核心目标
明确 Docker 公有仓库的概念与实际应用方法,使学习者能够独立完成将本地 Docker 镜像上传至公有仓库,并进行基础管理操作
二、Docker Hub 公有仓库
Docker Hub 是 Docker 公司维护的公共 Registry,支持用户将镜像保存到免费的 repository,若需保障镜像隐私,可购买私有 repository。其具体使用步骤如下:
- 账号注册:访问https://hub.docker.com/,按照页面提示填写 Docker ID、Email、Password 等信息完成注册
 - 登录操作 :在 Docker host 上执行命令
[root@docker ~]# docker login,随后输入注册时的用户名和密码(示例密码为 cy@redhat),登录成功会提示 "Login Succeeded",但需注意密码会以未加密形式存储在/root/.docker/config.json中,可配置凭证助手消除该风险 - 镜像重命名 :为区分不同用户的同名镜像,需按 "username/xxx:tag" 格式,使用
docker tag命令重命名镜像。例如,将centos:7重命名为cyisbug/centos:7,执行命令[root@docker ~]# docker tag centos:7 cyisbug/centos:7,重命名后可通过docker images命令查看镜像信息 - 镜像上传 :通过
docker push命令将本地重命名后的镜像上传至 Docker Hub,如上传cyisbug/centos:7的命令为[root@docker ~]# docker push cyisbug/centos:7 - 镜像管理:登录https://hub.docker.com/,在 "Public Repository" 中可查看已上传的镜像,若需删除镜像,仅能通过 web 界面操作
 
三、阿里云公有仓库
阿里云容器镜像服务提供镜像加速器和免费镜像仓库,使用流程如下:
- 仓库创建 :访问https://cr.console.aliyun.com/cn-hangzhou/instances/repositories登录阿里云控制台,创建镜像仓库,示例中命名空间为`cygalaxy`,仓库名称为`edu`,镜像将上传至`cygalaxy/edu`
 - 登录与镜像操作:
- 登录阿里云仓库:在 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查看镜像信息 
 - 登录阿里云仓库:在 Docker host 上执行
 - 镜像查看与删除:在阿里云控制台的 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
        

四、核心要点总结
- Docker Hub 是 Docker 公司维护的公共 Registry,支持用户存储镜像至免费或付费(私有)repository
 - 在 Docker host 上,通过
docker login命令可登录 Docker Hub 或阿里云等公有仓库 - 利用
docker push命令能够将本地镜像上传至对应的公有仓库,上传前需按仓库要求格式完成镜像重命名 
Docker 私有仓库(Registry)使用
本文聚焦 Docker 私有仓库的搭建与使用,详细讲解基于 Docker 官方registry镜像搭建本地私有仓库的完整流程,解决企业项目镜像不便存储于公有仓库的问题,帮助用户掌握私有仓库的镜像上传、配置等核心操作
一、课程核心目标
理解 Docker 私有仓库的意义,掌握基于官方registry镜像搭建本地私有仓库的方法,能够完成镜像上传、仓库配置等操作,实现企业内部镜像的安全管理
二、Docker 私有仓库(Registry)核心概念
Docker 默认从公有仓库(如registry.hub.docker.com)拉取镜像,但企业项目镜像因安全性、私密性需求,不宜存储于公有仓库。Docker 官方提供registry镜像,支持用户搭建本地私有仓库,用于内部镜像的存储与管理
三、私有仓库搭建与镜像上传步骤
(一)下载registry镜像并启动仓库容器
- 
拉取
registry镜像:在 Docker host 上执行命令,获取官方registry镜像(以 2 版本为例),命令如下:
plaintext[root@docker ~]# docker pull registry:2执行后会显示镜像拉取进度,最终提示 "Status: Downloaded newer image for registry: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表示容器启动成功
 - 
 
(二)镜像重命名与上传配置
- 
镜像重命名:私有仓库要求镜像名格式为
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 - 
配置私有仓库地址:需在 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 
 - 
 
(三)镜像上传与仓库验证
- 
上传镜像到私有仓库:使用
docker push命令将重命名后的镜像上传至私有仓库,命令如下:
plaintext[root@docker ~]# docker push 172.25.0.100:5000/centos:7执行后会显示镜像推送进度,最终提示 "digest: sha256:... size: 529",表示上传成功
 - 
验证仓库中的镜像:通过
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"]}
        四、核心要点总结
- Docker 支持通过官方
registry镜像搭建本地私有仓库,满足企业内部镜像的安全管理需求,避免企业镜像暴露于公有仓库 - 启动
registry容器时,添加--restart always参数可实现容器随 Docker host 自动启动,保障私有仓库持续服务 - 私有仓库默认无需身份验证即可上传镜像,但需将镜像名按 "
ip:port/xxx:tag" 格式重命名,并在daemon.json中配置私有仓库为 "非安全仓库"(insecure-registries),否则无法正常上传