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

如何将 Docker Registry 作为服务运行?

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2018 年 10 月 17 日

CPOL

4分钟阅读

viewsIcon

14583

实现私有 Docker Registry 的 Swarm 模式的分步指南。

引言

高可用性和可伸缩性是 IT 领域面临的巨大挑战。假设您要将私有注册表作为服务提供,并且预计到注册表的高流量,那么您必须仔细设计基础设施以支持上述项目。在本文中,我们将探讨如何使用 Docker Swarm 来实现私有注册表的高可用性和可伸缩性。

Docker Swarm 是一个由加入集群的 Docker 运行节点组成的集合。Swarm 有两种类型的节点:一种是管理器,另一种是工作节点。管理器使用各种策略将任务分发给工作节点和它自己。

Docker Swarm 服务提供自动伸缩、流量分配以及密码、TLS 证书等敏感数据的安全存储。

这是我的私有 Docker 注册表系列的最后一部分,以下列表显示了该系列的提纲:

要将私有注册表配置为服务,我们有以下三个主要步骤:

  • 配置 Swarm
  • 生成密钥
  • 将注册表作为服务运行

配置 Swarm

对于您的私有注册表,您将创建两个集群:一个用于管理器,另一个用于工作节点,但您可以创建任意数量的集群。

在 Hyper-V 中配置虚拟交换机

Hyper-V 包含在 Windows 10 中,因此无需在 Win 10 计算机上安装任何额外的虚拟机管理程序,如 VirtualBox 或 VMware Workstation 等。但 Hyper-V 需要虚拟交换机来创建集群,并且仅在使用 Hyper-V 时才需要。请按照以下步骤在 Hyper-V 中创建虚拟交换机。

  • 打开 Hyper-V 管理器。
  • 点击右侧菜单中的“虚拟交换机管理器”。

  • 点击“创建虚拟交换机”。

  • 选择“外部”作为类型。
  • 将其命名为hyphub
  • 选择您的主机主要网络适配器。

创建 Swarm 节点

  • 打开 PowerShell 控制台(Linux 中的终端)。
  • 使用以下命令创建一个管理器节点。
    Windows  10:
    docker-machine  create -d hyperv --hyperv-virtual-switch "hyphub" hubmgr
    
    Window 7/Linux:
    docker-machine  create -d virtualbox hubmgr

  • 使用以下命令创建一个工作节点集群。
    Windows  10:
    docker-machine  create -d hyperv --hyperv-virtual-switch "hyphub" hubworker01
    
    Window 7/Linux:
    docker-machine  create -d virtualbox hubworker01

  • 检查新创建集群的状态。
    Windows/Linux:
    docker-machine ls

配置 Swarm

  • 以管理员模式打开一个新的 PowerShell 控制台(Linux 中的终端)。
  • 键入以下命令连接到管理器节点。
    Windows/Linux:
    docker-machine ssh hubmgr

  • 将提示符终端更改为 Manager。您可以像这样更改提示符:PS1="Manager# ”。
  • 键入以下命令配置 Swarm。
    Windows/Linux:
    docker swarm init

  • 以管理员模式打开一个新的 PowerShell 控制台(Linux 中的终端)。
  • 键入以下命令连接到工作节点。
    Windows/Linux:
    docker-machine ssh hubworker01
  • 将提示符终端更改为Worker。您可以像这样更改提示符:PS1="Worker01# ”。
  • 使用以下命令加入 Swarm。
    Windows/Linux:
    docker swarm join {join token} {manager ip}:{port}

  • 一旦工作节点成功加入集群,请返回到管理器控制台并使用以下命令检查节点列表。
    Windows/Linux:
    docker node list

  • 这将显示两个节点,一个管理器和一个工作节点。

生成密钥

Docker Swarm 支持安全地存储敏感信息并在集群中的节点之间共享。在本节中,我们将了解如何为私有注册表 (hub.docker.local) 创建和使用 TLS 证书的密钥。

  • 打开一个新的 PowerShell 控制台(Linux 中的终端)。
  • 导航到C:\localhub (请记住,我们在本系列的第一篇文章中创建了此文件夹)。对于 Linux,是/home/localhub
  • 我们需要将 TLS 文件从主机移动到管理器节点,以便将其添加到密钥存储区。在移动文件之前,请确保管理器在/home/docker下有一个 certs 文件夹。如果不存在,请创建它。
    Windows:
    docker-machine scp /C/localhub/certs/localhub.key docker@192.168.1.105:/home/docker/certs
    docker-machine scp /C/localhub/certs/localhub.crt docker@192.168.1.105:/home/docker/certsy
  • 转到管理器控制台并导航到/home/docker文件夹。
  • 输入以下命令生成 TLS 证书的密钥。
    Linux:
    docker secret create localhub.crt certs/localhub.crt
    docker secret create localhub.key certs/localhub.key

将仓库作为服务运行

现在我们可以启用注册表服务了,请执行以下步骤:

  • 转到管理器控制台。
  • 键入以下命令为工作节点添加标签,这将有助于我们设置约束,仅在工作节点上运行注册表,但这是可选的。
    Linux:
    docker node update --label-add registry=true hubworker01
  • 键入以下命令,创建注册表服务。
    Windows/Linux:
    docker service create --name registry --secret localhub.crt --secret localhub.key 
    --constraint 'node.labels.registry==true' -e REGISTRY_HTTP_ADDR=0.0.0.0:443 
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/run/secrets/localhub.crt 
    -e REGISTRY_HTTP_TLS_KEY=/run/secrets/localhub.key --publish published=443,target=443 
    --replicas 1 registry

  • 重复步骤以从您的私有注册表中拉取和推送镜像。
    Windows/Linux:
    docker pull alpine
    docker tag alpine hub.docker.local/alpine
    docker push hub.docker.local/alpine
    docker rmi hub.docker.local/alpine
    docker images
    docker pull hub.docker.local/alpine
    docker images
    docker run hub.docker.local/alpine ls

目前,我们只使用一个副本,因为我们还没有设置集中式存储。如果您在未配置集中式存储的情况下增加副本数量,将会产生影响,因为镜像将无法在容器之间同步。在增加副本之前,您需要为/mnt/registry设置 bind-mounts,使用 SSD 或 SND 或存储驱动器,或者从管理器节点挂载一个目录。最佳实践是使用更可靠和可伸缩的存储模型。

结论

贯穿整个系列,我们学习了如何创建自己的私有 Docker 注册表来存储 Docker 镜像,如何保护注册表,以及如何借助 Docker Swarm 为注册表应用高可用性和可伸缩性。尽管本系列以私有注册表为例,但存储自定义、安全性、高可用性和伸缩性等概念对于其他应用程序也同样适用。感谢阅读本文,希望您有所收获。请在下方分享您的评论。

© . All rights reserved.