65.9K
CodeProject 正在变化。 阅读更多。
Home

如何设置我们自己的私有 Docker Registry?

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2018 年 10 月 17 日

CPOL

5分钟阅读

viewsIcon

37335

设置我们自己的私有 Docker Registry 的分步指南。

引言

Docker 提供了各种服务来管理 Docker 镜像,包括 hub.docker.com、cloud.docker.com、Docker Trusted Registry 和 Docker Registry。每种服务都针对不同的目标和需求进行了设计。Docker Hub (hub.docker.com) 是公共镜像的主要来源。我们可以使用 Docker Registry 设置自己的私有仓库,它是一个免费开源的工具,用于管理 Docker 镜像。在本文中,我们将介绍如何设置我们自己的私有 Docker 仓库。要学习本文,您应该对 Docker 容器及相关概念有基本了解。

要设置私有仓库,我们有两种选择:第一种是独立安装(Linux 操作系统可通过软件包安装程序获得),第二种是使用 Docker Registry 镜像(Docker Hub 上的 registry)。在这里,我们将介绍如何使用 Docker Registry 镜像设置私有仓库。

在本文中,我将使用 Docker for Windows,同时我也会提供 Linux 操作系统的相应命令。Docker Registry 镜像是基于 Alpine Linux 构建的,因此我在 Windows Docker 中使用 Linux 容器。我计划在一系列文章中涵盖更多与私有仓库设置相关的主题,本文是该系列的第一篇文章。下面的列表显示了文章主题覆盖内容:

私有 Docker 仓库设置

请按照以下步骤创建您的私有 Docker 仓库:

  • 打开 PowerShell 控制台(Linux 下为终端)。
  • 首先,我希望您创建一个与容器共享的文件夹,它将在后续步骤中使用。
  • 导航到 C:\ 驱动器,并创建一个名为 localhub 的文件夹(md localhub)。对于 Linux,请在 /home 下创建相同的文件夹。
  • 在 Windows 中导航到 C:\localhub 文件夹,或在 Linux 中导航到 /home/localhub,并创建一个名为 "registry" 的子文件夹。
  • 键入以下命令从 Docker Hub 拉取 registry 镜像:
    Windows/Linux:
    docker pull registry
  • 在进行 Docker Registry 设置之前,我想为您的私有仓库设置一个有意义的本地域名,而不是使用 localhost,但此步骤完全是可选的。我倾向于将本地域名设置为 hub.docker.local。要在 Windows 和 Linux 中配置本地域名,请执行以下步骤:
    • Windows
      • 在 Docker 主机上打开一个管理员权限的记事本。
      • 在记事本中打开 C:\Windows\System32\drivers\etc\hosts 文件,并添加 hub.docker.local 127.0.0.1 作为条目。
      • 保存并关闭文件。
    • Linux
      • 在 Docker 主机上打开终端,然后键入 nano /etc/hostsvi /etc/hosts
      • hub.docker.local 127.0.0.1 添加为条目。
      • 保存并关闭文件。
  • 启动一个带有 Docker Registry 镜像的容器。
    Windows: 
    docker run -d -p 5000:5000 -v C:/localhub/registry:/var/lib/registry 
    --restart=always --name hub.local registry
    Linux:
    docker run -d -p 5000:5000 -v /home/localhub/registry:/var/lib/registry 
    --restart=always --name hub.local registry 
    Docker Registry 默认使用 5000 端口。 --restart=always 标志将在 Docker 重启后启用自动启动。-v 将给定的主机文件夹绑定到容器文件系统。
    如果您尚未在 Docker 中设置共享文件夹,Docker 可能会要求您输入用户名和密码来与容器共享 localhub 文件夹。
  • 确保 registry 容器正在运行。
    Windows/Linux:
    docker ps or docker container ls

  • 下一步是准备 Docker 镜像并推送到我们的私有仓库。您可以使用任何一个现有镜像来快速理解 Docker Registry 的概念。Alpine 是一个轻量级 Linux 发行版(约 2MB),因此您可以使用此镜像进行快速评估。
    Windows/Linux:
    docker pull alpine
  • 使用 hub.docker.local:5000/my-alpine 为 Alpine Linux 创建一个标签。
    Windows/Linux:
    docker tag alpine hub.docker.local:5000/my-alpine
  • 它会在现有的 alpine 镜像上创建一个额外的标签。标签格式为 registry hostname: port/new name。Docker 在推送到您的私有仓库时会从给定的标签中提取位置。
  • my-alpine 镜像推送到您的私有仓库。
    Windows/Linux:
    docker push hub.docker.local:5000/my-alpine
  • 删除 alpine 及其带标签的版本,以确保 Docker 从您的私有仓库而不是 Docker Hub 拉取镜像。
    Windows/Linux:
    docker rmi hub.docker.local:5000/my-alpine 
    docker rmi alpine

  • 现在,从您的私有仓库拉取 my-alpine 镜像。
    Windows/Linux:
    docker pull hub.docker.local:5000/my-alpine
  • 启动一个使用新下载镜像的容器,并要求容器列出其根目录。
    Windows/Linux:
    docker run hub.docker.local:5000/my-alpine ls

  • 您可以在 http://hub.docker.local:5000/v2/_catalog 地址上查看 Registry 的目录。

  • 您可以检查 localhub/registry 文件夹,以了解 Docker 镜像如何在 Docker Registry 中存储。

  • 太棒了!您已成功创建了自己的私有 Docker 仓库。
  • (可选)停止并移除 registry 容器和镜像,以便继续阅读后续文章。
    Windows/Linux:
    docker container stop hub.local
    docker container rm hub.local 
  • (可选)最后,删除 my-alpine 镜像。
    Windows/Linux:
    docker ps -a
    docker container rm container_id
    docker rmi hub.docker.local:5000/my-alpine

存储自定义

Docker Registry 将镜像存储在主机文件系统(/var/lib/registry)上。在生产环境中,将镜像存储在文件系统上并不是一个可靠的解决方案。您可以使用 SSD 和 SAN 来存储您的私有 Registry 镜像。首先,您需要将这些驱动器挂载到您的主机,然后您可以通过卷绑定轻松地将其绑定到容器。例如,如果您在 Windows 中将 SSD 或 SAN 挂载到 R: 驱动器,则可以通过 -v R:/registry:/var/lib/registry 将这些驱动器挂载到容器。对于 Linux,卷绑定将如下所示:-v /mnt/registry:/var/lib/registry

Docker Registry 还支持使用符合存储驱动程序的存储后端,因此您可以使用一些第三方存储后端,如 Amazon S3 存储桶、Google Cloud Platform 等。

感谢您阅读本文,希望您有所收获。请在下方分享您的评论。在下一篇文章中,我将介绍 “如何保护您的私有 Docker Registry?”

历史

  • 2018 年 10 月 17 日:初始版本
© . All rights reserved.