Docker 公有仓库使用、Docker 私有仓库(Registry)使用总结
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-storeLogin 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 版本为例),命令如下:
[root@docker ~]# docker pull registry:2
执行后会显示镜像拉取进度,最终提示 “Status: Downloaded newer image for registry:2”,表示镜像拉取成功
-
启动仓库容器:通过
docker run
命令启动容器,配置端口映射、自动重启等参数,命令如下:
[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
镜像重命名为符合格式的名称,命令如下:
[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
,在文件中添加私有仓库地址,示例配置如下:
{ "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,命令如下:
[root@docker ~]# systemctl restart docker
-
(三)镜像上传与仓库验证
-
上传镜像到私有仓库:使用
docker push
命令将重命名后的镜像上传至私有仓库,命令如下:
[root@docker ~]# docker push 172.25.0.100:5000/centos:7
执行后会显示镜像推送进度,最终提示 “digest: sha256:… size: 529”,表示上传成功
-
验证仓库中的镜像:通过
curl
命令访问私有仓库 API,查看仓库中的镜像列表,命令如下:
[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
),否则无法正常上传