百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

【Docker 新手入门指南】第九章:仓库管理

wptr33 2025-05-28 20:45 9 浏览

一、Docker Hub 高级功能实战

1.自动构建(Automated Builds)

  • 场景:代码仓库(如 GitHub/GitLab)更新时自动生成镜像,无缝集成 CI/CD。
  • 操作步骤

i.绑定代码仓库

登录 Docker Hub,进入 Repositories > Automated Builds

授权 Docker Hub 访问代码仓库(如 GitHub)。

ii.配置构建规则

选择代码仓库和分支,指定 Dockerfile 路径(默认根目录)。

示例:当 GitHub 仓库 main 分支更新时,自动构建
your-username/webapp:latest

iii.触发构建

推送代码至指定分支,Docker Hub 自动拉取代码并执行 docker build

2.组织(Organizations)与团队协作

  • 创建组织
# 网页端操作:
Docker Hub > Organizations > Create Organization
  • 权限管理

管理员:创建仓库、添加成员、分配角色(管理员/开发者)。

开发者:推送/拉取镜像、管理仓库标签。

  • 团队仓库示例
# 团队成员拉取组织仓库镜像 
docker pull my-company/webapp:v1
  1. 镜像版本管理
  • 标签策略

latest:最新稳定版(生产环境)。

dev/test:开发/测试版本(如
your-username/webapp:dev-202310
)。

语义化版本(SemVer):major.minor.patch(如 1.2.3)。

  • 删除旧版本
# 网页端:Docker Hub > 仓库 > Tags > 删除指定标签 
# 命令行(需先登录): 
docker rmi your-username/webapp:old-tag docker push your-username/webapp:new-tag

二、搭建私有 Docker 仓库

  1. 基于 docker-registry 的轻量级私有仓库
  • 步骤 1:运行私有仓库容器
docker run -d \
  -p 5000:5000 \
  --name my-registry \ 
    -v /data/registry:/var/lib/registry \ # 持久化存储镜像 
    registry:2
  • 验证仓库
# 拉取测试镜像并推送至私有仓库 
docker pull alpine:latest 
docker tag alpine:latest localhost:5000/my-alpine:v1 
docker push localhost:5000/my-alpine:v1
  1. 添加认证机制(用户名/密码)
  • 步骤 1:生成认证文件
# 安装 htpasswd(需先安装 apache2-utils) 
apt-get install apache2-utils -y 
# 创建用户(如 user:pass) 
htpasswd -B -c /auth/htpasswd user
  • 步骤 2:运行带认证的仓库
docker run -d \
 -p 5000:5000 \ 
--name my-registry \ 
-v /data/registry:/var/lib/registry \
 -v /auth/htpasswd:/auth/htpasswd \ # 挂载认证文件 
-e "REGISTRY_AUTH=htpasswd" \ 
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ 
registry:2
  • 登录私有仓库
docker login localhost:5000 -u user -p pass
  1. 配置 HTTPS(生产环境必备)
  • 步骤 1:准备 SSL 证书

自签名证书(测试用):

openssl req -newkey rsa:4096 -nodes -keyout domain.key -x509 -days 365 -out domain.crt

权威证书(如 Let's Encrypt):通过证书颁发机构获取。

  • 步骤 2:运行仓库容器(绑定证书)
docker run -d \
 -p 443:443 \
 --name my-registry \
 -v /data/registry:/var/lib/registry \
 -v /certs/domain.crt:/certs/domain.crt \
 -v /certs/domain.key:/certs/domain.key \
 -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \ 
-e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \ 
registry:2
  • 客户端信任证书(Linux)
cp domain.crt /etc/docker/certs.d/your-registry-domain.com/ca.crt 
systemctl restart docker

三、企业级仓库管理方案

  1. 镜像分层存储与垃圾回收
  • 清理未使用的镜像层
docker exec my-registry registry garbage-collect /etc/docker/registry/config.yml
  • 配置存储驱动
    config.yml 中指定存储后端(如 S3、OSS):
storage: 
    s3: 
        accesskey: YOUR_ACCESS_KEY 
        secretkey: YOUR_SECRET_KEY 
        bucket: my-docker-registry 
        region: us-east-1
  1. 镜像扫描与安全审计
  • 集成 Clair(开源漏洞扫描)
# 运行 Clair 容器 
docker run -d --name clair -p 6060:6060 clair:v4 
# 扫描镜像(需先推送至仓库) 
clairctl analyze your-username/webapp:latest
  • Docker Hub 内置扫描
    在 Docker Hub 仓库设置中启用 Vulnerability Scanning,自动检测镜像漏洞。
  1. 跨数据中心同步(镜像复制)
  • 使用 docker trust 实现镜像签名
docker trust sign your-username/webapp:v1
  • 跨仓库复制(如从 Hub 同步至私有仓库)
docker run --rm \
 -v /var/run/docker.sock:/var/run/docker.sock \
 docker.io/justincormack/registry-mirror \
 --source=docker.io \
 --source-repo=library/nginx \
 --dest=your-private-registry.com/library/nginx

四、公共仓库 vs 私有仓库:选型指南

维度

公共仓库(如 Docker Hub)

私有仓库(如 Harbor)

适用场景

开源项目、公共服务

企业内部应用、敏感数据

带宽消耗

依赖公网,可能较慢

内网传输,速度快

安全性

公开访问,需依赖用户权限

支持 HTTPS、ACL、RBAC、镜像加密

功能扩展

自动构建、Webhook

镜像扫描、复制、生命周期管理

代表产品

Docker Hub、Quay.io

Harbor、JFrog Artifactory、AWS ECR

五、常用命令速查表

操作

命令示例

登录 Docker Hub

docker login

推送镜像至 Hub

docker push your-username/repo:tag

拉取私有仓库镜像

docker pull private-registry.com/repo:tag

删除 Hub 镜像标签

docker rmi your-username/repo:tag

查看私有仓库镜像列表

curl -u user:pass private-registry.com/v2/_catalog

清理仓库垃圾

docker exec registry registry garbage-collect config.yml

通过以上实践,可实现从镜像构建、存储到分发的全流程管理,满足开发测试、持续集成及生产环境的不同需求。企业级场景下建议选择 Harbor 等增强型私有仓库,结合 CI/CD 流水线实现镜像的自动化管理与安全审计。

相关推荐

C++企业级开发规范指南(c++开发gui)

打造高质量、可维护的C++代码标准一、前言C++作为一门功能强大的系统级编程语言,被广泛应用于操作系统、游戏引擎、高性能服务器、数据库系统等领域。知名互联网公司(如Google、Microsoft、腾...

C++|整型的最值、上溢、下溢、截断、类型提升和转换

整数在计算机内以有限字长表示,当超出最值(有限字长)时,需要截断(溢出,求模)操作。不同字长的整型具有不同的值域,混合运算时,需要类型提升和转换。1整形最值在<limit.h>中有整型的...

C++|漫谈STL细节及内部原理(c++ std stl)

1988年,AlexanderStepanov开始进入惠普的PaloAlto实验室工作,在随后的4年中,他从事的是有关磁盘驱动器方面的工作。直到1992年,由于参加并主持了实验室主任BillWo...

C++11新特性总结 (二)(c++11新特性 pdf)

1.范围for语句C++11引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素vector<int>vec={1,2,3,4,5,6};f...

C++ STL 漫谈(c++中的stl到底指的什么)

标准模板库(StandardTemplateLibrary,STL)是惠普实验室开发的一个函数库和类库。它是由AlexanderStepanov、MengLee和DavidRMusser在...

C++学习教程_C++语言随到随学_不耽误上班_0基础

C++学习教程0基础学C++也可以,空闲时间学习,不耽误上班.2019年C语言新课程已经上线,随到随学,互动性强,效果好!带你征服C++语言,让所有学过和没有学过C++语言的人,或是正准备学习C++语...

C++遍历vector元素的四种方式(c++ 遍历vector)

vector是相同类型对象的集合,集合中的每个对象有个对应的索引。vector常被称为容器(container)。C++中遍历vector的所有元素是相当常用的操作,这里介绍四种方式。1、通过下标访问...

一起学习c++11——c++11中的新增的容器

c++11新增的容器1:array当时的初衷是希望提供一个在栈上分配的,定长数组,而且可以使用stl中的模板算法。array的用法如下:#include<string>#includ...

C++编程实战基础篇:一维数组应用之投票统计

题目描述班上有N个同学,有五位候选人“A,B,C,D,E”,请所有的同学投票并选举出班长,现在请你编写程序来他们计算候选人的得票总数,每位同学投票将以数字的形式投票“12345”分别代表五位候选人,...

C++20 新特性(6):new表达式也支持数组大小推导

new表达式也支持数组大小推导在C++17标准中,在定义并初始化静态数组时,是可以忽略数组大小,然后通过初始化数据来推导数组的大小。但使用new来定义并初始化动态数组时,并不支持这种自动推导数组大...

C++ 结构体(struct)最全详解(c++结构体用法)

一、定义与声明1.先定义结构体类型再单独进行变量定义structStudent{intCode;charName[20];charSex;intA...

自学 C++ 第 6 课 二维数组找最值

键盘输入一个m×n的二维数组,通过C++编程找出元素中的最大值,并输出其所在的位置坐标。例如,输入一个4×5的二维数组,数组元素分别为{{556623749},{578964563},...

从缺陷中学习C/C++:聊聊 C++ 中常见的内存问题

在写C/C++程序时,一提到内存,大多数人会想到内存泄露。内存泄露是一个令人头疼的问题,尤其在开发大的软件系统时。一个经典的现象是,系统运行了10天、1个月都好好的,忽然有一天宕机了:OOM(Out...

C++开发者都应该使用的十个C++11特性(上)

在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下...

深度解读C/C++指针与数组(c++指针和数组的区别)

指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。今天我们就来聊一聊数组和指针千丝万缕的关系;一维数组与...