Docker镜像仓库全方位使用指南
Docker镜像仓库全方位使用指南
Docker镜像仓库是Docker生态系统中用于存储、管理和分发Docker镜像的核心组件,根据访问权限可分为公有仓库和私有仓库两大类。本文将基于提供的文档,详细梳理各类Docker镜像仓库的原理、操作步骤及关键注意事项,并进行适当扩展,帮助用户全面掌握镜像仓库的使用。
一、Docker公有仓库
公有仓库是由第三方机构维护、允许公众上传和下载镜像的公共服务平台,适合存储开源项目镜像或无需保密的通用镜像。常见的公有仓库包括Docker官方的Docker Hub和国内的阿里云容器镜像服务,二者操作逻辑相似,但地址、命名规则略有差异。
(一)Docker Hub:Docker官方公有仓库(访问慢)
Docker Hub是Docker公司维护的全球最大的Docker镜像公共Registry,提供免费的公共仓库(Public Repository)和付费的私有仓库(Private Repository),支持用户快速分享和获取镜像。
1. 核心特性
- 免费公共仓库:用户可无限制创建公共仓库,所有用户均可访问和拉取镜像,适合开源项目或公开工具镜像。
- 付费私有仓库:按套餐提供私有仓库额度(如免费账户通常无私有仓库,付费账户可创建多个),仅授权用户可访问,适合企业内部非公开镜像。
- 镜像版本管理:支持通过
tag
(标签)区分不同版本的镜像,便于版本迭代和回滚。 - 集成生态:与GitHub、GitLab等代码托管平台联动,支持自动构建镜像(如代码提交后触发镜像构建)。
2. 上传镜像到Docker Hub的完整步骤()
步骤1:注册Docker Hub账号
- 访问Docker Hub官网:https://hub.docker.com/
- 点击“Sign Up”,填写Docker ID(唯一标识,将用于镜像命名)、Email和Password,勾选服务条款后完成注册。
- 注册后需验证邮箱,验证通过即可正常使用账号。
步骤2:在Docker Host上登录Docker Hub
Docker Host是运行Docker引擎的主机(如Linux服务器、本地虚拟机),登录操作是后续上传镜像的前提,需通过docker login
命令完成:
[root@docker ~]# docker login
# 执行命令后,按提示输入注册时的Docker ID(用户名)和密码
Login with your Docker ID to push and pull images...
Username: cyisbug # 输入Docker ID
Password: cy@redhat # 输入密码(输入时不显示明文)
- 关键提示:
- 登录成功后,Docker会将认证信息保存在
/root/.docker/config.json
中,且默认以未加密形式存储。若需提高安全性,可配置凭证助手(如docker-credential-helpers
),具体参考官方文档:https://docs.docker.com/engine/reference/commandline/login/#credentials-store。 - 若登录失败,需检查网络是否能访问Docker Hub(国内用户可能需配置镜像加速器)、账号密码是否正确。
- 登录成功后,Docker会将认证信息保存在
步骤3:重命名镜像(符合Docker Hub命名规则)
Docker Hub为区分不同用户的同名镜像,要求镜像名必须包含用户名,完整格式为:username/镜像名:tag
(tag
为镜像版本,如7
、latest
)。若直接上传未符合格式的镜像(如centos:7
),会因命名无效失败,需通过docker tag
命令重命名:
# 1. 先拉取一个基础镜像(以centos:7为例,若本地已有可跳过)
[root@docker ~]# docker pull centos:7# 2. 查看本地镜像,确认原始镜像信息
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 9 months ago 204MB# 3. 按Docker Hub规则重命名镜像:格式为“用户名/镜像名:tag”
[root@docker ~]# docker tag centos:7 cyisbug/centos:7 # cyisbug是Docker ID,centos是镜像名,7是tag# 4. 再次查看本地镜像,确认重命名成功(新镜像与原镜像共享同一IMAGE ID,仅元数据不同)
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cyisbug/centos 7 eeb6ee3f44bd 9 months ago 204MB
centos 7 eeb6ee3f44bd 9 months ago 204MB
步骤4:上传镜像到Docker Hub
使用docker push
命令将重命名后的镜像推送到Docker Hub的公共仓库:
[root@docker ~]# docker push cyisbug/centos:7
# 推送过程中会显示镜像分层上传进度,若网络较慢可能需要等待
# 成功后会输出类似信息:digest: sha256:xxxx size: xxxx
- 扩展说明:Docker镜像采用分层存储(Layered Storage),推送时仅上传本地独有的分层,已存在于Docker Hub的分层会被跳过,可节省带宽和时间。
步骤5:在Web界面验证和管理镜像
- 登录Docker Hub官网,进入“Repositories”页面,即可看到刚上传的公共仓库(如
cyisbug/centos
)。 - 点击仓库名称,可查看镜像的
tag
、上传时间(LAST PUSH)、镜像摘要(DIGEST)、压缩大小(COMPRESSED SIZE)等信息。 - 删除镜像:Docker Hub不支持通过命令行删除镜像,需在Web界面操作:进入仓库后,找到对应
tag
,点击“Delete”并确认即可。
3. 拉取Docker Hub镜像
若需从Docker Hub拉取他人的公共镜像,直接使用docker pull
命令,格式为:docker pull 用户名/镜像名:tag
(若省略用户名
,默认拉取Docker官方维护的镜像,如docker pull ubuntu:20.04
):
# 拉取官方centos:7镜像
[root@docker ~]# docker pull centos:7
# 拉取用户cyisbug的centos:7镜像
[root@docker ~]# docker pull cyisbug/centos:7
(二)阿里云容器镜像服务:国内公有仓库(推荐)
阿里云容器镜像服务(ACR)是阿里云提供的国内镜像仓库服务,相比Docker Hub,其优势在于国内访问速度快(无需跨境外网)、支持免费私有仓库(个人用户可创建一定数量的免费私有仓库),且提供镜像加速器功能(加速拉取Docker Hub镜像)。
1. 核心特性
- 免费额度:个人用户可创建3个免费私有仓库,企业用户有更多免费额度,满足小型团队需求。
- 镜像加速器:提供专属加速器地址,解决国内拉取Docker Hub镜像慢的问题(后续步骤会提及配置)。
- 地域化部署:支持选择不同地域(如杭州、上海)创建仓库,进一步降低访问延迟。
- 安全管控:支持设置仓库访问权限(公开/私有)、绑定RAM账号(细粒度权限控制)。
2. 上传镜像到阿里云仓库的完整步骤
步骤1:注册并登录阿里云账号,创建镜像仓库
- 访问阿里云容器镜像服务控制台:https://cr.console.aliyun.com/
- 使用阿里云账号登录(若无账号,需先注册并完成实名认证)。
- 进入“实例列表”,选择对应地域(如“华东1(杭州)”),点击“创建仓库”:
- 命名空间:用于分组管理仓库,需全局唯一(如
ycyrepo
),一个命名空间下可创建多个仓库。 - 仓库名称:仓库的具体名称(如
linux
),用于标识镜像类型。 - 仓库类型:选择“公开”或“私有”(个人用户建议选“私有”,避免镜像被公开访问)。
- 其他配置(如代码源绑定)可默认,完成创建后,记录仓库的公网地址(如
registry.cn-hangzhou.aliyuncs.com/ycyrepo/linux
),后续会用到。
- 命名空间:用于分组管理仓库,需全局唯一(如
步骤2:在Docker Host上登录阿里云仓库
阿里云仓库的登录命令与Docker Hub类似,但需指定阿里云仓库的Registry地址(格式为registry.cn-地域.aliyuncs.com
),用户名通常为阿里云账号(手机号或邮箱):
[root@docker ~]# docker login --username=ycyrepo crpi-ebsa50w0sijgkwdy.cn-hangzhou.personal.cr.aliyuncs.com
# 输入阿里云账号对应的密码(若开启了2FA,需使用验证码登录或创建访问令牌)
Password: redhat # 输入阿里云账号密码
# 登录成功会提示“Login Succeeded”
- 安全提示:为避免直接使用账号密码登录,建议在阿里云控制台创建“访问令牌”(RAM访问控制),用令牌作为密码登录,降低账号泄露风险。
步骤3:重命名镜像(符合阿里云命名规则)
阿里云仓库要求镜像名格式为:Registry地址/命名空间/仓库名:tag
,其中:
Registry地址
:如registry.cn-hangzhou.aliyuncs.com
(杭州地域)。命名空间
:如ycyrepo
(步骤1创建的命名空间)。仓库名
:如linux
(步骤1创建的仓库名)。tag
:镜像版本,如centos7
。
通过docker tag
命令重命名镜像:
# 以本地centos:7镜像为例,重命名为符合阿里云规则的镜像名
[root@docker ~]# docker tag centos:7 crpi-ebsa50w0sijgkwdy.cn-hangzhou.personal.cr.aliyuncs.com/ycyrepo/linux:centos7# 查看重命名后的镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
crpi-ebsa50w0sijgkwdy.cn-hangzhou.personal.cr.aliyuncs.com/ycyrepo/linux centos7 eeb6ee3f44bd 4 years ago 204MB
步骤4:上传镜像到阿里云仓库
使用docker push
命令推送镜像,目标地址为步骤3重命名后的镜像名:
[root@docker ~]# docker push crpi-ebsa50w0sijgkwdy.cn-hangzhou.personal.cr.aliyuncs.com/ycyrepo/linux:centos7
# 推送成功后,会输出镜像摘要和大小信息
步骤5:在Web界面验证和管理镜像
- 登录阿里云容器镜像服务控制台,进入创建的仓库(如
ycyrepo/linux
),点击“镜像版本”,即可看到上传的centos7
版本镜像,包含版本号、状态、镜像大小、最近更新时间等信息。 - 镜像管理操作:支持在Web界面删除镜像版本、设置镜像标签、配置镜像同步规则等。
3. 配置阿里云镜像加速器(扩展功能)
国内用户直接拉取Docker Hub镜像时,因网络原因可能速度极慢,阿里云提供免费的镜像加速器,可加速拉取过程。配置步骤如下:
- 登录阿里云容器镜像服务控制台,进入“镜像加速器”页面(左侧导航栏),获取专属加速器地址(如
https://14lrk6zd.mirror.aliyuncs.com
)。 - 在Docker Host上修改Docker配置文件
/etc/docker/daemon.json
:[root@docker ~]# vim /etc/docker/daemon.json # 添加加速器地址,内容如下 {"registry-mirrors": ["https://14lrk6zd.mirror.aliyuncs.com"] # 替换为你的专属加速器地址 }
- 重启Docker服务,使配置生效:
[root@docker ~]# systemctl daemon-reload [root@docker ~]# systemctl restart docker
- 验证配置:执行
docker info
,若输出中包含“Registry Mirrors”且显示加速器地址,说明配置成功。
二、Docker私有仓库
私有仓库是部署在企业内部网络或私有服务器上的镜像仓库,仅授权用户可访问,适合存储企业内部项目镜像、敏感业务镜像,保障数据安全和访问可控。常见的私有仓库方案包括Docker官方的Registry和企业级的Harbor,二者定位不同:Registry轻量简洁,适合小型团队;Harbor功能丰富,适合中大型企业。
(一)Docker Registry:官方轻量私有仓库(不便捷,不推荐)
Docker Registry是Docker官方提供的开源镜像仓库组件,以Docker镜像形式分发,部署简单、资源占用低,支持基本的镜像存储和分发功能,但缺乏用户管理、权限控制等企业级特性,默认无需身份验证(可通过扩展配置认证)。
1. 核心特性
- 轻量部署:基于Docker镜像运行,单容器即可启动,无需复杂依赖。
- 基本功能:支持镜像上传、下载、版本管理,通过HTTP API与Docker客户端交互。
- 可扩展性:支持配置存储后端(如本地文件、S3、Swift)、添加身份认证(如Basic Auth、OAuth),但需手动扩展配置。
- 无UI界面:仅提供命令行和API操作,不支持图形化管理,需通过第三方工具(如Harbor、Portus)补充UI功能。
2. 部署Registry私有仓库并上传镜像的完整步骤
步骤1:拉取Registry镜像
Registry镜像由Docker官方维护,最新稳定版本为registry:2
,通过docker pull
拉取:
[root@docker ~]# docker pull registry:2
# 拉取成功后,查看镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2 b8604a3fe854 7 months ago 26.2MB
步骤2:启动Registry容器(部署私有仓库)
通过docker run
命令启动Registry容器,关键参数说明:
-d
:后台运行容器。-p 5000:5000
:将容器的5000端口映射到Docker Host的5000端口(Registry默认监听5000端口)。--restart always
:设置容器随Docker引擎自动启动(避免Docker重启后容器需手动启动)。--name ycyregistry
:给容器命名为ycyregistry
,便于后续管理。registry:2
:指定使用的镜像。
启动命令:
[root@docker ~]# docker run -d -p 5000:5000 --restart always --name ycyregistry registry:2
# 启动成功后,会输出容器ID(如d18f87724be3938876705f6c8d48f7c0c2ce377aae3b3c947b491588536cc9ec)# 验证容器是否正常运行
[root@docker ~]# docker ps | grep ycyregistry
d18f87724be3 registry:2 "/entrypoint.sh /etc…" 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp ycyregistry
步骤3:配置Docker信任私有仓库(关键步骤)
Docker默认仅信任HTTPS协议的Registry,而Registry默认以HTTP协议运行(未配置SSL时),若直接上传镜像会提示“http: server gave HTTP response to HTTPS client”错误。需在Docker Host上配置“不安全仓库”(insecure-registries),让Docker信任该私有仓库的HTTP地址。
配置步骤:
- 编辑Docker配置文件
/etc/docker/daemon.json
(若文件不存在则新建):[root@docker ~]# vim /etc/docker/daemon.json # 添加私有仓库地址(格式为“IP:端口”,如192.168.100.40:5000) {"registry-mirrors": ["https://14lrk6zd.mirror.aliyuncs.com"], # 可选,镜像加速器"insecure-registries": ["192.168.100.40:5000"] # 私有仓库地址,需替换为你的Docker Host IP }
- 重启Docker服务,使配置生效:
[root@docker ~]# systemctl daemon-reload [root@docker ~]# systemctl restart docker # 重启后,Registry容器会自动启动(因配置了--restart always)
步骤4:重命名镜像(符合Registry命名规则)
Registry私有仓库要求镜像名格式为:私有仓库地址(IP:端口)/镜像名:tag
,其中:
私有仓库地址
:如192.168.100.40:5000
(Docker Host的IP和映射的5000端口)。镜像名
:自定义名称(如centos
)。tag
:镜像版本(如7
)。
通过docker tag
命令重命名镜像:
# 以本地centos:7镜像为例,重命名为符合Registry规则的镜像名
[root@docker ~]# docker tag centos:7 192.168.100.40:5000/centos:7# 查看重命名后的镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.100.40:5000/centos 7 eeb6ee3f44bd 9 months ago 204MB
centos 7 eeb6ee3f44bd 9 months ago 204MB
registry 2 b8604a3fe854 7 months ago 26.2MB
步骤5:上传镜像到Registry私有仓库
使用docker push
命令推送镜像,目标地址为步骤4重命名后的镜像名:
[root@docker ~]# docker push 192.168.100.40:5000/centos:7
# 推送过程中会显示分层上传进度,成功后输出摘要信息
The push refers to repository [192.168.100.40:5000/centos]
174f56854903: Pushed
7: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
步骤6:验证私有仓库中的镜像
Registry提供HTTP API接口,可通过curl
命令查询仓库中的镜像列表:
# 查询私有仓库中所有镜像(repositories)
[root@docker ~]# curl http://192.168.100.40:5000/v2/_catalog
{"repositories":["centos"]} # 输出包含“centos”,说明镜像上传成功# 查询指定镜像(如centos)的所有tag
[root@docker ~]# curl http://192.168.100.40:5000/v2/centos/tags/list
{"name":"centos","tags":["7"]} # 输出包含“7”,说明tag正确
步骤7:从Registry私有仓库拉取镜像
其他授权的Docker Host(需配置相同的insecure-registries
)可通过docker pull
拉取镜像:
# 在另一台Docker Host上执行
[root@docker2 ~]# docker pull 192.168.100.40:5000/centos:7
3. 扩展:为Registry添加身份认证(可选)
Registry默认无需认证,任何能访问Docker Host的用户均可上传/下载镜像,存在安全风险。可通过htpasswd
工具配置Basic Auth认证,步骤如下:
- 安装
htpasswd
工具(属于httpd-tools
包):[root@docker ~]# yum -y install httpd-tools # CentOS/RHEL系统 # 若为Ubuntu/Debian系统,执行:apt-get install apache2-utils
- 创建认证目录和密码文件(密码文件需挂载到Registry容器中):
[root@docker ~]# mkdir -p /data/registry/auth # 创建认证目录 # 创建用户(如“admin”)并设置密码,密码文件保存到/data/registry/auth/htpasswd [root@docker ~]# htpasswd -Bc /data/registry/auth/htpasswd admin New password: # 输入密码(如“Admin123!”) Re-type new password: # 再次输入密码 Adding password for user admin
- 停止并删除原Registry容器(若已启动):
[root@docker ~]# docker stop ycyregistry [root@docker ~]# docker rm ycyregistry
- 重新启动Registry容器,挂载认证文件并启用认证:
[root@docker ~]# docker run -d -p 5000:5000 \--restart always \--name ycyregistry \-v /data/registry/auth:/auth \ # 挂载认证目录到容器-e REGISTRY_AUTH=htpasswd \ # 指定认证方式为htpasswd-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \ # 认证领域(自定义)-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ # 容器内密码文件路径registry:2
- 验证认证:后续上传/下载镜像前,需先登录私有仓库:
[root@docker ~]# docker login 192.168.100.40:5000 Username: admin # 输入配置的用户名 Password: Admin123! # 输入密码 Login Succeeded # 登录成功后才能执行push/pull操作
(二)Harbor:企业级私有仓库(可视化,推荐)
Harbor是由VMware开源的企业级Docker镜像仓库,基于Docker Distribution扩展,提供图形化UI、用户管理、权限控制、镜像同步、日志审计、安全扫描等企业必需的功能,适合中大型企业或对镜像管理有较高要求的团队。
1. 核心特性与组件架构
Harbor的功能覆盖镜像全生命周期管理,其组件分为外部依赖组件和自有核心组件,架构清晰且易于扩展。
(1)外部依赖组件(需Harbor自动部署或手动配置)
组件 | 功能说明 |
---|---|
Nginx(Proxy) | 前端代理,负责分发UI访问请求和镜像上传/下载的流量,支持负载均衡(多节点部署时)。 |
Registry v2 | 底层镜像存储引擎,负责存储镜像分层和元数据,Harbor对其进行功能扩展。 |
Database | 存储Harbor的核心数据,如用户信息、权限配置、镜像分组、审计日志等,支持MySQL或PostgreSQL。 |
(2)自有核心组件(Harbor原生功能模块)
组件 | 功能说明 |
---|---|
Core Services | Harbor核心服务,包含UI(图形化管理界面)、Webhook(镜像状态变更通知)、Auth(身份认证与token签发)、API(RESTful接口)。 |
Replication Job Service | 镜像同步服务,支持多Harbor实例之间的镜像同步(如跨地域、跨团队同步),可配置定时同步或手动触发。 |
Log Collector | 日志收集服务,收集所有组件的运行日志,支持导出和分析,便于问题排查和审计。 |
Security Scanner | 镜像安全扫描(需集成第三方工具如Clair),检测镜像中的漏洞和风险,保障镜像安全。 |
2. 部署Harbor私有仓库并上传镜像的完整步骤
Harbor的部署依赖docker-compose
(用于编排多个组件容器),因此需先安装docker-compose
,再通过官方安装包部署。
步骤1:环境准备
- 基础环境:已安装Docker(版本≥18.09)和
docker-compose
(版本≥1.23.0),且Docker服务正常运行。 - 网络要求:Harbor服务器需开放80端口(HTTP)或443端口(HTTPS,若配置SSL),便于外部访问UI和镜像操作。
步骤2:下载并解压Harbor安装包
Harbor提供在线安装包(需联网下载依赖)和离线安装包(包含所有依赖镜像,适合无外网环境),推荐使用离线包以避免网络问题。
-
下载地址:
- 官方GitHub Releases:https://github.com/goharbor/harbor/releases(选择对应版本,如
harbor-offline-installer-v1.10.10.tgz
)。
- 官方GitHub Releases:https://github.com/goharbor/harbor/releases(选择对应版本,如
-
百度网盘(文档提供):https://pan.baidu.com/s/1YUbl_gHhiKpUfSwsIkWbZg,提取码:5669。
-
解压安装包:
将下载的压缩包上传到Docker Host(如/root
目录),通过tar
命令解压:[root@docker ~]# tar -zxvf harbor-offline-installer-v1.10.10.tgz # 解压后会生成“harbor”目录,进入该目录查看文件 [root@docker ~]# cd harbor [root@docker harbor]# ls common.sh harbor.v1.10.10.tar.gz harbor.yml install.sh LICENSE prepare
- 关键文件说明:
harbor.yml
:Harbor的核心配置文件,包含 hostname、端口、管理员密码、存储路径等。install.sh
:Harbor安装脚本,自动执行部署流程。prepare
:预处理脚本,根据harbor.yml
生成配置文件和证书(若启用SSL)。
- 关键文件说明:
步骤3:修改Harbor配置文件(harbor.yml)
Harbor默认配置需根据实际环境调整,主要修改hostname
(Harbor服务器的IP或域名)、关闭HTTPS(若无需SSL)、设置管理员密码:
[root@docker harbor]# vim harbor.yml
# 1. 修改hostname为Docker Host的IP(如192.168.100.40,不可用localhost或127.0.0.1)
hostname: 192.168.100.40# 2. 关闭HTTPS(若不配置SSL证书,需注释所有HTTPS相关配置)
# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path# 3. 设置管理员密码(默认密码为Harbor12345,可自定义修改)
harbor_admin_password: Harbor12345
- 扩展说明:若需启用HTTPS,需准备SSL证书(如Let’s Encrypt免费证书或自签证书),并在
harbor.yml
中配置证书路径,步骤较复杂,适合生产环境;测试环境可直接关闭HTTPS,使用HTTP。
步骤4:安装docker-compose(若未安装)
Harbor通过docker-compose
编排Nginx、Registry、Database等多个容器,需先安装docker-compose
:
# 1. 安装EPEL源(CentOS/RHEL系统,提供docker-compose包)
[root@docker harbor]# yum -y install epel-release# 2. 安装docker-compose
[root@docker harbor]# yum -y install docker-compose# 3. 验证安装(查看版本)
[root@docker harbor]# docker-compose --version
docker-compose version 1.18.0, build 8dd22a9 # 输出版本信息即安装成功
- 若yum安装版本过低:可通过pip安装最新版本(需先安装pip):
[root@docker ~]# yum -y install python3-pip [root@docker ~]# pip3 install docker-compose
步骤5:安装并启动Harbor
执行install.sh
脚本,自动完成预处理、加载镜像、启动容器等操作:
[root@docker harbor]# ./install.sh
# 安装过程中会显示各步骤日志,关键步骤包括:
# Step 0: 检查Docker和docker-compose是否安装
# Step 1: 加载Harbor离线镜像(从harbor.v1.10.10.tar.gz中加载)
# Step 2: 生成配置文件(通过prepare脚本)
# Step 3: 启动docker-compose容器集群# 安装成功后,会输出以下信息:
✔ ----Harbor has been installed and started successfully.----
- 验证Harbor容器:执行
docker-compose ps
查看所有组件容器是否正常运行(状态均为Up
):[root@docker harbor]# docker-compose psName Command State Ports ------------------------------------------------------------------------------------------------------------- 38c1a87e1c27 goharbor/harbor-jobservice:v1.10.10 "/harbor/harbor_jobs…" 19 minutes ago Up 13 minutes (healthy) harbor-jobservice f133eac39c89 goharbor/nginx-photon:v1.10.10 "nginx -g 'daemon of…" 19 minutes ago Up 13 minutes (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp nginx 0b465d0f6b44 goharbor/harbor-core:v1.10.10 "/harbor/harbor_core" 19 minutes ago Up 13 minutes (healthy) harbor-core 125914e2034b goharbor/redis-photon:v1.10.10 "redis-server /etc/r…" 19 minutes ago Up 13 minutes (healthy) 6379/tcp redis 024c73b432a6 goharbor/harbor-registryctl:v1.10.10 "/home/harbor/start.…" 19 minutes ago Up 13 minutes (healthy) registryctl 34df89dc1b99 goharbor/harbor-db:v1.10.10 "/docker-entrypoint.…" 19 minutes ago Up 11 minutes (healthy) 5432/tcp harbor-db 546959b0a99e goharbor/registry-photon:v1.10.10 "/home/harbor/entryp…" 19 minutes ago Up 11 minutes (healthy) 5000/tcp registry eaa8805703de goharbor/harbor-portal:v1.10.10 "nginx -g 'daemon of…" 19 minutes ago Up 13 minutes (healthy) 8080/tcp harbor-portal a7ab1272e55c goharbor/harbor-log:v1.10.10 "/bin/sh -c /usr/loc…" 19 minutes ago Up 13 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
步骤6:访问Harbor图形化UI并创建项目
Harbor安装成功后,通过浏览器访问http://hostname
(如http://192.168.100.40
),进入登录界面:
- 账号:
admin
(默认管理员账号)。 - 密码:
Harbor12345
(harbor.yml
中配置的密码)。
登录后,需创建项目(Project),项目是Harbor中镜像的逻辑分组,支持设置访问权限(公开/私有):
- 点击左侧导航栏“项目”→“新建项目”。
- 填写项目信息:
- 项目名称:自定义(如
luoqi
,需唯一)。 - 访问级别:选择“公开”(所有用户可拉取镜像)或“私有”(仅授权用户可访问)。
- 存储数量:默认不限制,可根据需求设置配额。
- 项目名称:自定义(如
- 点击“确定”,项目创建完成。
步骤7:配置Docker信任Harbor私有仓库(HTTP模式)
与Registry类似,Harbor若使用HTTP协议,需在Docker Host上配置“不安全仓库”,让Docker信任Harbor的地址:
- 编辑Docker配置文件
/etc/docker/daemon.json
:[root@docker ~]# vim /etc/docker/daemon.json {"insecure-registries": ["192.168.100.40"] # Harbor的hostname(无需端口,默认80) }
- 重启Docker服务和Harbor(因Docker重启会停止Harbor容器):
[root@docker ~]# systemctl daemon-reload [root@docker ~]# systemctl restart docker # 进入Harbor目录,重启Harbor容器 [root@docker ~]# cd harbor [root@docker harbor]# docker-compose restart
步骤8:上传镜像到Harbor私有仓库
上传镜像到Harbor的流程与其他仓库类似,需经历“登录→重命名镜像→推送”三个步骤:
(1)登录Harbor仓库
使用docker login
命令登录Harbor,地址为Harbor的hostname(如192.168.100.40
),账号为Harbor的管理员或项目授权用户:
[root@docker ~]# docker login http://192.168.100.40 -u admin -p Harbor12345
# 登录成功提示“Login Succeeded”
(2)重命名镜像(符合Harbor命名规则)
Harbor要求镜像名格式为:Harbor地址/项目名/镜像名:tag
,其中:
Harbor地址
:如192.168.100.40
(无需端口)。项目名
:如luoqi
(步骤6创建的项目)。镜像名
:自定义(如centos
)。tag
:镜像版本(如7
)。
通过docker tag
命令重命名镜像:
# 以本地centos:7镜像为例,重命名为符合Harbor规则的镜像名
[root@docker ~]# docker tag centos:7 192.168.100.40/luoqi/centos:7# 查看重命名后的镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.100.40/ycyrepo/centos 7 eeb6ee3f44bd 9 months ago 204MB
centos 7 eeb6ee3f44bd 9 months ago 204MB
(3)推送镜像到Harbor
使用docker push
命令推送镜像,目标地址为步骤(2)重命名后的镜像名:
[root@docker ~]# docker push 192.168.100.40/luoqi/centos:7
# 推送成功后,输出摘要信息
步骤9:在Harbor UI中验证镜像
登录Harbor UI,进入创建的项目(如ycyrepo
),点击“镜像仓库”→“centos”,即可看到上传的7
版本镜像,包含镜像标签、大小、上传时间等信息。
步骤10:Harbor的日常管理操作(扩展)
Harbor提供丰富的管理功能,通过UI即可完成:
- 用户管理:创建普通用户,分配不同项目的权限(如只读、读写、管理员)。
- 镜像管理:删除镜像版本、设置镜像标签、查看镜像详情(如分层信息、漏洞扫描结果)。
- 镜像同步:配置与其他Harbor实例的同步规则,实现跨地域镜像分发。
- 日志审计:查看用户操作日志(如登录、上传、下载镜像),便于安全审计。
- 垃圾清理:清理未被引用的镜像分层,释放存储空间。
三、各类Docker镜像仓库对比与选型建议
不同镜像仓库的特性、适用场景差异较大,需根据团队规模、业务需求、安全要求选择合适的方案。以下是各类仓库的核心对比及选型建议:
(一)核心对比表
特性 | Docker Hub(公有) | 阿里云ACR(公有) | Docker Registry(私有) | Harbor(私有) |
---|---|---|---|---|
访问权限 | 公共/付费私有 | 公共/免费/付费私有 | 默认无认证(可扩展) | 细粒度权限控制(用户/项目/角色) |
UI界面 | 有(Web) | 有(Web) | 无(仅API/命令行) | 有(功能丰富的Web UI) |
国内访问速度 | 慢(需跨境外网) | 快(国内节点) | 快(内网部署) | 快(内网部署) |
核心功能 | 镜像存储、版本管理 | 镜像存储、加速器、地域化 | 轻量镜像存储 | 存储、权限、同步、审计、安全扫描 |
部署复杂度 | 无需部署(第三方维护) | 无需部署(第三方维护) | 简单(单容器) | 中等(需docker-compose,多容器) |
适用场景 | 开源项目、个人学习 | 国内团队、小型企业(需公有/轻量私有) | 小型团队、测试环境(无复杂需求) | 中大型企业、生产环境(需安全管控) |
(二)选型建议
- 个人学习/开源项目:优先选择Docker Hub,免费且镜像资源丰富,便于分享和获取开源镜像;国内用户可搭配阿里云镜像加速器提升拉取速度。
- 国内小型团队(需私有仓库):优先选择阿里云ACR,免费私有仓库额度满足需求,国内访问速度快,无需自建服务器。
- 小型团队/测试环境(内网私有仓库):选择Docker Registry,部署简单、资源占用低,适合无复杂权限管控的场景。
- 中大型企业/生产环境(内网私有仓库):必须选择Harbor,其权限控制、安全扫描、日志审计等功能可保障镜像安全和管理效率,满足企业级需求。
四、总结
Docker镜像仓库是Docker生态的核心组成部分,公有仓库(Docker Hub、阿里云ACR)适合公开镜像的分享与获取,私有仓库(Registry、Harbor)适合企业内部敏感镜像的管理。本文详细梳理了各类仓库的部署、镜像上传/下载步骤,并扩展了安全配置、日常管理等内容,关键总结如下:
- 所有仓库均需遵循“登录→重命名镜像(符合仓库命名规则)→推送”的核心流程,镜像命名是关键步骤(格式错误会导致推送失败)。
- 私有仓库(Registry/Harbor)若使用HTTP协议,需在Docker Host的
daemon.json
中配置insecure-registries
,否则无法正常访问。 - Harbor作为企业级方案,功能全面但部署稍复杂,需依赖
docker-compose
,适合生产环境;Registry轻量简洁,适合测试或小型团队。 - 国内用户优先选择阿里云ACR或配置镜像加速器,解决Docker Hub访问慢的问题,提升镜像操作效率。
通过掌握本文内容,用户可根据实际需求选择并熟练使用各类Docker镜像仓库,实现镜像的安全存储与高效分发。