news 2026/5/10 0:02:33

第三部分-Dockerfile与镜像构建——16. 镜像仓库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第三部分-Dockerfile与镜像构建——16. 镜像仓库

16. 镜像仓库

1. 镜像仓库概述

镜像仓库(Registry)是存储和分发 Docker 镜像的服务。Docker Hub 是默认的公共仓库,企业通常搭建私有仓库来存储内部镜像。

┌─────────────────────────────────────────────────────────────┐ │ 镜像仓库架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ push/pull ┌─────────────────┐ │ │ │ 开发者 A │ ──────────────────▶ │ │ │ │ └─────────────┘ │ │ │ │ │ Docker Hub │ │ │ ┌─────────────┐ push/pull │ 私有仓库 │ │ │ │ 开发者 B │ ──────────────────▶ │ Harbor │ │ │ └─────────────┘ │ │ │ │ │ │ │ │ ┌─────────────┐ pull │ │ │ │ │ 生产服务器 │ ──────────────────▶ │ │ │ │ └─────────────┘ └─────────────────┘ │ │ │ │ 镜像命名规范: │ │ [registry/][namespace/]repository[:tag] │ │ │ │ 示例: │ │ - nginx # Docker Hub 官方镜像 │ │ - myuser/myapp:v1 # Docker Hub 用户镜像 │ │ - myregistry.com/myapp:latest # 私有仓库 │ │ │ └─────────────────────────────────────────────────────────────┘

2. Docker Hub

2.1 基本操作

# 登录 Docker Hubdockerlogin# 输入用户名和密码# 登出dockerlogout# 搜索镜像dockersearch nginxdockersearch--limit10nginxdockersearch--filterstars=100nginx# 拉取镜像dockerpull nginx:latestdockerpull ubuntu:20.04# 推送镜像# 首先标记镜像dockertag myapp:latest username/myapp:v1dockerpush username/myapp:v1# 同时推送多个标签dockertag myapp:latest username/myapp:latestdockertag myapp:latest username/myapp:1.0.0dockerpush username/myapp:latestdockerpush username/myapp:1.0.0

2.2 镜像标签规范

# 标签命名建议# 版本号标签dockertag myapp username/myapp:1.0.0dockertag myapp username/myapp:1.0dockertag myapp username/myapp:1# 环境标签dockertag myapp username/myapp:devdockertag myapp username/myapp:testdockertag myapp username/myapp:prod# 构建标签dockertag myapp username/myapp:${CI_COMMIT_SHA}dockertag myapp username/myapp:${BUILD_NUMBER}# 日期标签dockertag myapp username/myapp:$(date+%Y%m%d)

3. 私有仓库部署

3.1 Docker Registry

# 运行私有仓库dockerrun-d\--nameregistry\-p5000:5000\-v/data/registry:/var/lib/registry\registry:2# 推送到私有仓库dockertag myapp localhost:5000/myappdockerpush localhost:5000/myapp# 从私有仓库拉取dockerpull localhost:5000/myapp# 查看仓库中的镜像curlhttp://localhost:5000/v2/_catalogcurlhttp://localhost:5000/v2/myapp/tags/list

3.2 配置 HTTPS

# 生成自签名证书mkdir-p/data/certs openssl req-newkeyrsa:4096-nodes-sha256-keyout/data/certs/domain.key\-x509-days365-out/data/certs/domain.crt# 运行带 TLS 的仓库dockerrun-d\--nameregistry\-p5000:5000\-v/data/registry:/var/lib/registry\-v/data/certs:/certs\-eREGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt\-eREGISTRY_HTTP_TLS_KEY=/certs/domain.key\registry:2# 配置 Docker 信任证书# 将证书复制到 /etc/docker/certs.d/yourdomain.com:5000/ca.crt

3.3 配置认证

# 创建认证目录mkdir/data/auth# 生成 htpasswd 文件dockerrun--entrypointhtpasswd registry:2-Bbnusername password>/data/auth/htpasswd# 运行带认证的仓库dockerrun-d\--nameregistry\-p5000:5000\-v/data/registry:/var/lib/registry\-v/data/auth:/auth\-eREGISTRY_AUTH=htpasswd\-eREGISTRY_AUTH_HTPASSWD_REALM=Registry\-eREGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd\registry:2# 登录私有仓库dockerlogin localhost:5000

4. Harbor

4.1 安装 Harbor

# 下载 Harborgitclone https://github.com/goharbor/harbor.gitcdharbor# 复制配置cpharbor.yml.tmpl harbor.yml# 编辑配置vimharbor.yml# hostname: harbor.example.com# https:# certificate: /data/ssl/harbor.crt# private_key: /data/ssl/harbor.key# 安装./install.sh --with-notary --with-trivy --with-chartmuseum

4.2 Harbor 操作

# 登录 Harbordockerlogin harbor.example.com# 标记并推送镜像dockertag myapp harbor.example.com/project/myapp:v1dockerpush harbor.example.com/project/myapp:v1# 拉取镜像dockerpull harbor.example.com/project/myapp:v1# 使用 Harbor API# 获取项目列表curl-uadmin:password https://harbor.example.com/api/v2.0/projects# 获取镜像标签curl-uadmin:password https://harbor.example.com/api/v2.0/projects/project/repositories/myapp/tags

5. 镜像管理策略

5.1 清理策略

# 手动删除远程标签dockerpush myrepo/myapp:oldtag# 推送空覆盖# 使用 Harbor 自动清理# 设置镜像保留规则:保留最近 N 个版本# 使用脚本清理旧镜像#!/bin/bash# 删除除最近5个外的所有标签IMAGE=$1KEEP=5tags=$(curl-shttps://hub.docker.com/v2/repositories/$IMAGE/tags?page_size=100|jq-r'.results[].name')count=0fortagin$tags;docount=$((count+1))if[$count-gt$KEEP];thenecho"Deleting tag:$tag"# 删除逻辑fidone

5.2 镜像复制

# 使用 skopeo 复制镜像skopeo copy docker://source/image:tag docker://dest/image:tag# 使用 crane 复制crane copy source/image:tag dest/image:tag# Docker 方式dockerpull source/image:tagdockertag source/image:tag dest/image:tagdockerpush dest/image:tagdockerrmi source/image:tag dest/image:tag

5.3 镜像缓存策略

# GitLab CI 缓存配置cache:paths:-cache/# 使用镜像缓存docker pull $CI_REGISTRY_IMAGE:cache||true docker build--cache-from $CI_REGISTRY_IMAGE:cache-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:cache docker push $CI_REGISTRY_IMAGE:cache

6. 常用仓库对比

仓库类型特点适用场景
Docker Hub公共镜像丰富、免费开源项目、学习
阿里云 ACR公共/私有国内加速、稳定国内生产
腾讯云 TCR私有与云产品集成腾讯云用户
Harbor私有功能全面企业内部
Registry私有轻量简单小规模

7. 安全最佳实践

7.1 镜像扫描

# Docker Scandockerscan myapp:latest# Trivy 扫描trivy image--severityHIGH,CRITICAL myapp:latest# Clair 扫描clair-scanner myapp:latest# Harbor 自动扫描# 在 Harbor 配置中启用漏洞扫描

7.2 镜像签名

# 启用 Docker Content TrustexportDOCKER_CONTENT_TRUST=1# 推送签名镜像dockerpush myapp:latest# 拉取验证签名dockerpull myapp:latest# 查看签名信息dockertrust inspect myapp:latest

7.3 访问控制

# Harbor RBAC# 项目级别权限:# - 项目管理员# - 开发者(推送/拉取)# - 访客(只读)# 创建机器人账户# 用于 CI/CD 系统

8. 性能优化

8.1 镜像加速

# 配置镜像加速器# /etc/docker/daemon.json{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]}# 重启 Dockersudosystemctl restartdocker

8.2 拉取优化

# 并行拉取dockerpull--parallelmyapp:latest# 只拉取特定平台的镜像dockerpull--platformlinux/amd64 myapp:latest

9. CI/CD 集成

9.1 GitLab CI

build:stage:buildscript:-docker login-u $CI_REGISTRY_USER-p $CI_REGISTRY_PASSWORD $CI_REGISTRY-docker build-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .-docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest-docker push $CI_REGISTRY_IMAGE:latest

9.2 GitHub Actions

-name:Login to Docker Hubuses:docker/login-action@v1with:username:${{secrets.DOCKER_USERNAME}}password:${{secrets.DOCKER_TOKEN}}-name:Build and pushuses:docker/build-push-action@v2with:push:truetags:username/myapp:latest

10. 常用命令速查

操作命令
登录docker login
登出docker logout
搜索docker search
拉取docker pull
推送docker push
标记docker tag
私有仓库docker run -d -p 5000:5000 registry:2
查看标签curl -X GET https://hub.docker.com/v2/repositories/library/nginx/tags

11. 常见问题

Q1: 推送镜像失败怎么办?

检查登录状态、镜像标签格式、网络连接。

Q2: 如何删除 Docker Hub 上的镜像?

登录 Docker Hub 网页,在 Repository 页面删除。

Q3: 私有仓库如何配置存储?

# 使用 S3 存储dockerrun-d\-eREGISTRY_STORAGE=s3\-eREGISTRY_STORAGE_S3_REGION=us-west-1\-eREGISTRY_STORAGE_S3_BUCKET=mybucket\registry:2

12. 小结

  • Docker Hub:公共仓库,默认镜像源
  • 私有仓库:Registry、Harbor 等
  • 镜像命名:[registry/][namespace/]repository[:tag]
  • 安全措施:镜像扫描、签名、RBAC
  • 性能优化:镜像加速、并行拉取
  • CI/CD 集成:自动构建和推送
  • 清理策略:保留版本数量限制

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 0:01:39

NLP技术如何量化分析组织民主:从文本数据到测量框架

1. 项目概述:当数据科学遇见组织治理最近几年,我一直在关注一个交叉领域:如何用我们数据从业者手里的工具,去解构和分析那些传统上被认为“难以量化”的社会与组织现象。其中,“政党内部民主”这个议题,尤其…

作者头像 李华
网站建设 2026/5/9 23:59:31

CANN pto-isa异步通信指令

异步通信指令详解(TPUT_ASYNC / TGET_ASYNC / BuildAsyncSession) 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository …

作者头像 李华
网站建设 2026/5/9 23:59:26

动物森友会存档编辑器NHSE:打造完美岛屿的终极指南

动物森友会存档编辑器NHSE:打造完美岛屿的终极指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否厌倦了在《集合啦!动物森友会》中漫长的等待和重复劳动&#xff1…

作者头像 李华
网站建设 2026/5/9 23:56:50

超级个体崛起:一人公司(One-Person Company)的技术栈——软件测试从业者的全能武器库

在AI重构生产关系的2026年,“一人公司”已从概念变为触手可及的商业现实。对于深谙质量保障、逻辑严谨且具备工程化思维的软件测试从业者而言,这不仅是职业发展的备选路径,更是一次将“技术债”转化为“数字资产”的价值跃迁。当“单人成军”…

作者头像 李华
网站建设 2026/5/9 23:56:49

从零构建大语言模型:PyTorch实践指南与Transformer核心实现

1. 从零构建大语言模型:一本真正让你“知其所以然”的实践指南如果你对ChatGPT、Claude这些大语言模型(LLM)的内部运作机制感到好奇,想知道那些动辄千亿参数的“黑箱”究竟是如何被训练出来的,那么你很可能已经尝试过阅…

作者头像 李华