当前位置: 首页 > news >正文

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(唯一标识,将用于镜像命名)、EmailPassword,勾选服务条款后完成注册。
  • 注册后需验证邮箱,验证通过即可正常使用账号。
步骤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(国内用户可能需配置镜像加速器)、账号密码是否正确。
步骤3:重命名镜像(符合Docker Hub命名规则)

Docker Hub为区分不同用户的同名镜像,要求镜像名必须包含用户名,完整格式为:username/镜像名:tagtag为镜像版本,如7latest)。若直接上传未符合格式的镜像(如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镜像时,因网络原因可能速度极慢,阿里云提供免费的镜像加速器,可加速拉取过程。配置步骤如下:

  1. 登录阿里云容器镜像服务控制台,进入“镜像加速器”页面(左侧导航栏),获取专属加速器地址(如https://14lrk6zd.mirror.aliyuncs.com)。
  2. 在Docker Host上修改Docker配置文件/etc/docker/daemon.json
    [root@docker ~]# vim /etc/docker/daemon.json
    # 添加加速器地址,内容如下
    {"registry-mirrors": ["https://14lrk6zd.mirror.aliyuncs.com"]  # 替换为你的专属加速器地址
    }
    
  3. 重启Docker服务,使配置生效:
    [root@docker ~]# systemctl daemon-reload
    [root@docker ~]# systemctl restart docker
    
  4. 验证配置:执行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地址。

配置步骤:

  1. 编辑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
    }
    
  2. 重启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认证,步骤如下:

  1. 安装htpasswd工具(属于httpd-tools包):
    [root@docker ~]# yum -y install httpd-tools  # CentOS/RHEL系统
    # 若为Ubuntu/Debian系统,执行:apt-get install apache2-utils
    
  2. 创建认证目录和密码文件(密码文件需挂载到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
    
  3. 停止并删除原Registry容器(若已启动):
    [root@docker ~]# docker stop ycyregistry
    [root@docker ~]# docker rm ycyregistry
    
  4. 重新启动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
    
  5. 验证认证:后续上传/下载镜像前,需先登录私有仓库:
    [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 ServicesHarbor核心服务,包含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)。
  • 百度网盘(文档提供):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(默认管理员账号)。
  • 密码Harbor12345harbor.yml中配置的密码)。

登录后,需创建项目(Project),项目是Harbor中镜像的逻辑分组,支持设置访问权限(公开/私有):

  1. 点击左侧导航栏“项目”→“新建项目”。
  2. 填写项目信息:
    • 项目名称:自定义(如luoqi,需唯一)。
    • 访问级别:选择“公开”(所有用户可拉取镜像)或“私有”(仅授权用户可访问)。
    • 存储数量:默认不限制,可根据需求设置配额。
  3. 点击“确定”,项目创建完成。
步骤7:配置Docker信任Harbor私有仓库(HTTP模式)

与Registry类似,Harbor若使用HTTP协议,需在Docker Host上配置“不安全仓库”,让Docker信任Harbor的地址:

  1. 编辑Docker配置文件/etc/docker/daemon.json
    [root@docker ~]# vim /etc/docker/daemon.json
    {"insecure-registries": ["192.168.100.40"]  # Harbor的hostname(无需端口,默认80)
    }
    
  2. 重启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,多容器)
适用场景开源项目、个人学习国内团队、小型企业(需公有/轻量私有)小型团队、测试环境(无复杂需求)中大型企业、生产环境(需安全管控)

(二)选型建议

  1. 个人学习/开源项目:优先选择Docker Hub,免费且镜像资源丰富,便于分享和获取开源镜像;国内用户可搭配阿里云镜像加速器提升拉取速度。
  2. 国内小型团队(需私有仓库):优先选择阿里云ACR,免费私有仓库额度满足需求,国内访问速度快,无需自建服务器。
  3. 小型团队/测试环境(内网私有仓库):选择Docker Registry,部署简单、资源占用低,适合无复杂权限管控的场景。
  4. 中大型企业/生产环境(内网私有仓库):必须选择Harbor,其权限控制、安全扫描、日志审计等功能可保障镜像安全和管理效率,满足企业级需求。

四、总结

Docker镜像仓库是Docker生态的核心组成部分,公有仓库(Docker Hub、阿里云ACR)适合公开镜像的分享与获取,私有仓库(Registry、Harbor)适合企业内部敏感镜像的管理。本文详细梳理了各类仓库的部署、镜像上传/下载步骤,并扩展了安全配置、日常管理等内容,关键总结如下:

  1. 所有仓库均需遵循“登录→重命名镜像(符合仓库命名规则)→推送”的核心流程,镜像命名是关键步骤(格式错误会导致推送失败)。
  2. 私有仓库(Registry/Harbor)若使用HTTP协议,需在Docker Host的daemon.json中配置insecure-registries,否则无法正常访问。
  3. Harbor作为企业级方案,功能全面但部署稍复杂,需依赖docker-compose,适合生产环境;Registry轻量简洁,适合测试或小型团队。
  4. 国内用户优先选择阿里云ACR或配置镜像加速器,解决Docker Hub访问慢的问题,提升镜像操作效率。

通过掌握本文内容,用户可根据实际需求选择并熟练使用各类Docker镜像仓库,实现镜像的安全存储与高效分发。

http://www.dtcms.com/a/465551.html

相关文章:

  • 做网站网络合同上海网站建设网站开发
  • Deep Neural Networks for YouTube Recommendation
  • Vue支持预览 docx格式,xlsx格式,pdf格式的文件
  • 海南工程建设资料备案网站抖音开放平台官网入口
  • WHAT - requestIdleCallback 介绍
  • ShadowDiffusion算法解决阴影去除问题
  • AWS CLI自动删除资源脚本
  • 嵌入式学习linux内核驱动6——dts和GPIO子系统
  • 企业网站推广哪家公司好揭阳做网站公司
  • 宿州做网站的公司有哪些广州自助公司建网站
  • 星巴克APP逆向
  • [Dify] 知识库在 Agent 模式中的应用策略:让智能体更懂知识、更懂业务
  • 精通C语言(4.四种动态内存有关函数)
  • 【实用工具】使用Python语言制作RSS阅读器
  • 动态规划 - 二维费用的背包问题、似包非包、卡特兰数
  • JAVA·方法的使用
  • 做rap的网站国内做网站网站风险大吗
  • 【代码随想录算法训练营——Day33】动态规划——62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树
  • 基于单片机的元胞自动机仿真系统设计
  • 星座运势网站技术解析:从零打造现代化Web应用
  • Asp.net core 跨域配置
  • Java学习之旅第二季-18:转型
  • 建筑物孪生模型:重构空间数字化格局,赋能智慧城市
  • Claude code、codex、gemini cli开启全自动(yolo)模式,无需审批
  • wordpress账号和站内网建网站需要注册公司吗
  • 24软件测试计划主要工作和确定测试资源
  • 【每天一个知识点】[特殊字符] 大数据的定义及单位
  • ICT 数字测试原理 17 - -VCL中的预处理
  • 领码方案|微服务与SOA的世纪对话(7):运营降本增效——智能架构时代的成本与服务管理
  • YOLO v1:目标检测领域的单阶段革命之作