Docker - 私有注册表



Docker 注册表是中心镜像仓库,专门用于存储和分发 Docker 镜像。这些镜像构成了任何可容器化应用程序的基础,其中包含应用程序的源代码、运行时环境、服务依赖项和配置文件。在这方面,Docker 注册表使单个开发人员或团队能够轻松共享他们的工作并在不同的环境中部署他们的容器化应用程序。

Docker 注册表的类型(公共与私有)

Docker 注册表通常可分为两种类型:

  • 公共注册表 - 它们公开可用,通常包含许多预构建的镜像。最流行的公共注册表是 Docker Hub,其中包含数千个官方和社区贡献的镜像。
  • 私有注册表 - 这些注册表托管在您的基础架构或云中,提供有限或受限的访问权限。当存储专有镜像、敏感数据或具有独特合规性要求的镜像时,这些注册表非常有用。一些流行的私有注册表选项包括 Docker Registry(开源)、Harbor(开源)、Nexus Repository 和 JFrog Artifactory。

流行的 Docker 注册表选项

Docker Hub(官方注册表)

Docker Hub 是所有 Docker 镜像的官方基于云的注册表服务。它是一个中心位置,开发人员可以在其中存储和共享容器镜像。Docker Hub 提供公共和私有仓库,因此它是开源项目和私有企业应用程序的全方位解决方案。以下是一些功能:

  • 大型生态系统 - Docker Hub 运行着数百万个由庞大的开发者社区共享的容器镜像,提供来自 Docker 和经过验证的发布者的官方镜像。
  • 自动化构建 - Docker Hub 可以自动构建托管在 GitHub 或 Bitbucket 上的源代码的镜像。
  • Webhooks - 允许在成功推送到仓库后触发操作。
  • 内容信任 - 镜像的真实性和完整性。
  • 与 Docker CLI 无缝集成 - 可以从命令行界面拉取和推送镜像。

自托管注册表

自托管注册表可以对 Docker 镜像的存储和分发进行更显著的控制,尤其对于具有严格安全、合规或性能要求的组织而言。流行的自托管注册表解决方案包括:

Docker Registry(开源)

Docker Registry 是一个基本的开源项目,许多其他注册表(例如 Docker Hub)都是基于它的。它是托管您自己的私有注册表的一种简单方法。

  • 简单性 - 易于部署和配置。
  • 可定制性 - 通过其配置文件高度可定制。
  • 可扩展性 - 可以使用分布式存储后端进行水平扩展。
  • 安全性 - 它提供通过 TLS 加密的通信和基本身份验证的方法。
  • 可扩展性 - 可以通过中间件添加其他功能。

Nexus Repository

Sonatype Nexus Repository 是一个通用且多功能的仓库管理器。它支持大多数仓库格式,包括 Docker 镜像。

  • 通用格式支持 - 它不仅支持 Docker,还支持 Maven、npm、NuGet 等格式。
  • 安全性 - 与安全工具 IQ 服务器集成,增强安全性。
  • 高可用性 - 集群支持负载平衡、高可用性和冗余。
  • 集成 - 与 CI/CD 工具无缝集成,以充分实现 DevOps 管道。
  • 企业级功能 - 包含高级功能,如暂存、提升和清理策略。

JFrog Artifactory

JFrog Artifactory 是一个通用的二进制存储库管理器,支持所有主要的包格式,包括 Docker 镜像。

  • 通用存储库 - 从开发到生产控制所有工件。
  • 安全性和合规性 - 配备 Xray 以对 Docker 镜像进行深度递归扫描。
  • 高可用性 - 提供多站点复制和高可用性配置。
  • 自动化 - 它与各种 CI/CD 工具良好集成,用于自动构建和部署。
  • 高级缓存 - 智能缓存加快了对常用镜像的访问速度。

基于云的注册表

基于云的注册表提供托管服务,用于与其他云服务一起存储和分发 Docker 镜像。以下是一些常见的:

Amazon Elastic Container Registry (ECR)

Amazon Elastic Container Registry (ECR) 是与 AWS 集成的完全托管的 Docker 容器注册表。

  • 与 AWS 集成 - 与更广泛的 AWS 工具集深度集成,包括 ECS、EKS 和 CodePipeline。
  • 可扩展性 - 它可以扩展存储大小和镜像数量。
  • 安全性 - 提供镜像加密、IAM 用于控制访问和网络集成。
  • 镜像扫描 - 通过 Amazon Inspector 扫描镜像中的软件漏洞。
  • 经济高效 - 按使用付费定价模式,并提供免费套餐选项。

Azure Container Registry (ACR)

Microsoft Azure Container Registry 是作为 Microsoft Azure 云的一部分提供的托管 Docker 注册表服务。

  • 与 Azure 服务集成 - 与 Azure Kubernetes Service (AKS) 以及其他 Azure DevOps 工具无缝运行。
  • 地理复制 - 这允许将容器镜像复制到不同的 Azure 区域。
  • 安全性 - 支持与 Azure Active Directory 集成,以实现单点登录和基于角色的访问控制。
  • 自动化工作器 - 它通过 ACR Tasks 自动化容器镜像构建和更新基础镜像。
  • 漏洞扫描 - 与安全工具集成,以扫描镜像漏洞。

Google Container Registry (GCR)

Google Container Registry 是 GCP 的 Docker 镜像存储服务。

  • GCP 集成 - 与 Google Kubernetes Engine (GKE) 和其他 Google Cloud 服务无缝集成。
  • 全球可用 - 镜像存储在全球多个区域,以实现高可用性和低延迟。
  • 安全性 - 用于 IAM 访问控制和 VPC 服务控制。
  • 漏洞扫描 - 自动扫描镜像漏洞并提供详细报告。
  • 易用性 - 使用 gcloud 命令行工具和与 Google Cloud Build 集成以实现 CI/CD 的简单性。

每个注册表选项都有其自身的功能和能力,可用于满足相应的组织需求。无论您选择灵活的自托管方式还是基于云服务的便捷性,了解这些选项都可以帮助您在为容器化应用程序选择注册表时做出正确的选择。

关键 Docker 注册表命令

使用 Docker 注册表时,您会定期使用一些重要的命令。它们是:

Docker 登录

这将使用注册表验证您的 Docker CLI。这是将任何镜像推送到私有注册表所需的。

docker login [registry_url]

示例 - 登录到 Docker Hub -

$ docker login
Docker Login

Docker 标记

此命令使用特定名称和标记标记镜像,以便准备将该镜像推送到注册表。

$ docker tag [source_image[:tag]] [repository[:tag]]

示例 - 为 Docker Hub 标记文件系统中的镜像 -

$ docker tag my-app:latest myusername/my-app:latest
Docker Tag

Docker 推送

将标记的镜像推送到 Docker 注册表。

$ docker push [repository[:tag]]

示例 - 将标记的镜像推送到 Docker Hub -

$ docker push myusername/my-app:latest
Docker Push

Docker 拉取

此命令从 Docker 注册表下载镜像。

$ docker pull [repository[:tag]]

示例 - 从 Docker Hub 拉取镜像 -

$ docker pull myusername/my-app:latest
Docker Pull

结论

Docker 注册表管理是当代容器化应用程序开发和部署的核心能力之一。开发人员可以在社区维护的镜像集合 Docker Hub 或自托管和基于云的服务之间进行选择,以实现灵活性和可扩展性、自由和控制。

关于 Docker 私有注册表的常见问题

1. 公共 Docker 注册表和私有 Docker 注册表有什么区别?

公共注册表(例如 Docker Hub)允许公众访问,并托管大量社区贡献的镜像。私有注册表托管在您的基础架构或其他提供商处,以提供对您的专有镜像的受控访问和更好的安全性。

2. 如何将 Docker 镜像推送到注册表?

推送镜像涉及使用注册表的 URL 和所需的存储库名称对其进行标记。然后,可以发出 docker push 命令,其中清楚地规定了标记的镜像的名称。该镜像将被推送到指定的注册表,并可供下载和运行。

3. 我可以托管我自己的私有 Docker 注册表吗?

是的,当您使用开源 Docker Registry 分发版创建注册表时,这是可实现的。这将使所有镜像完全在您的控制之下,但当然,需要处理注册表的基础架构、安全性和维护。或者,市场上提供托管注册表,您可以从云提供商或第三方供应商的服务中获得免维护的方法。

广告