如何设置我们自己的私有 Docker Registry?
设置我们自己的私有 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 仓库设置
- 存储自定义
- 第二部分:如何保护您的私有 Docker 仓库?
- CA 证书
- 自签名证书
- 基本身份验证
- 第三部分:如何将您的私有仓库作为服务运行?
- 配置 Swarm
- 生成密钥
- 将仓库作为服务运行
私有 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/hosts
或vi /etc/hosts
。 - 将
hub.docker.local 127.0.0.1
添加为条目。 - 保存并关闭文件。
- 在 Docker 主机上打开终端,然后键入 nano
- Windows
- 启动一个带有 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 日:初始版本