ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Docker Registry for a secondary node > 原文:[https://docs.gitlab.com/ee/administration/geo/replication/docker_registry.html](https://docs.gitlab.com/ee/administration/geo/replication/docker_registry.html) * [Storage support](#storage-support) * [Replicating Docker Registry](#replicating-docker-registry) * [Configure **primary** node](#configure-primary-node) * [Configure **secondary** node](#configure-secondary-node) * [Verify replication](#verify-replication) # Docker Registry for a secondary node[](#docker-registry-for-a-secondary-node-premium-only "Permalink") 您可以在**次要** Geo 节点上设置一个[Docker Registry](https://s0docs0docker0com.icopy.site/registry/) ,以镜像**主** Geo 节点上的[Docker Registry](https://s0docs0docker0com.icopy.site/registry/) . ## Storage support[](#storage-support "Permalink") Docker Registry 当前支持几种类型的存储. 如果您在**主**节点上为 Docker 注册表选择分布式存储( `azure` , `gcs` , `s3` , `swift`或`oss` ),则也可以将相同的存储用于**辅助** Docker 注册表. 有关更多信息,请阅读部署注册表时的[负载平衡注意事项](https://s0docs0docker0com.icopy.site/registry/deploying/) ,以及如何为 GitLab 的集成[Container Registry](../../packages/container_registry.html#use-object-storage)设置存储驱动程序. ## Replicating Docker Registry[](#replicating-docker-registry "Permalink") 您可以启用与存储无关的复制,以便将其用于云或本地存储. 每当将新映像推送到**主**节点时,每个**辅助**节点都会将其拖到其自己的容器存储库中. 要配置 Docker Registry 复制: 1. 配置[**主**节点](#configure-primary-node) . 2. 配置[**辅助**节点](#configure-secondary-node) . 3. 验证 Docker Registry [复制](#verify-replication) . ### Configure **primary** node[](#configure-primary-node "Permalink") 在执行下一步之前,请确保已设置 Container Registry 并在**主**节点上工作. 我们需要使 Docker Registry 将通知事件发送到**主**节点. 1. SSH 到您的 GitLab **主**服务器并以 root 用户身份登录: ``` sudo -i ``` 2. Edit `/etc/gitlab/gitlab.rb`: ``` registry['notifications'] = [ { 'name' => 'geo_event', 'url' => 'https://example.com/api/v4/container_registry_event/events', 'timeout' => '500ms', 'threshold' => 5, 'backoff' => '1s', 'headers' => { 'Authorization' => ['<replace_with_a_secret_token>'] } } ] ``` **注意:**将`<replace_with_a_secret_token>`替换为以字母开头的区分大小写的字母数字字符串. 您可以使用`< /dev/urandom tr -dc _A-Zaz-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo`生成一个`< /dev/urandom tr -dc _A-Zaz-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo` `< /dev/urandom tr -dc _A-Zaz-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo`**注意:**如果使用外部注册表(而不是与 GitLab 集成的注册表),则必须将这些设置自己添加到其配置中. 在这种情况下,您还必须在`/etc/gitlab/gitlab.rb`文件的`registry.notification_secret`部分中指定通知密钥.**注意:**如果使用 GitLab HA,则还必须在`/etc/gitlab/gitlab.rb`文件的`registry.notification_secret`部分中为每个 Web 节点指定通知密钥. 3. 重新配置**主**节点以使更改生效: ``` gitlab-ctl reconfigure ``` ### Configure **secondary** node[](#configure-secondary-node "Permalink") Make sure you have Container Registry set up and working on the **secondary** node before following the next steps. 在希望看到复制的 Docker 映像的每个**辅助**节点上,应执行以下步骤. 因为我们需要允许**辅助**节点与**主**节点容器注册表安全通信,所以我们需要为所有节点使用单个密钥对. **辅助**节点将使用此密钥来生成短暂的 JWT,该 JWT 具有仅拉功能,可以访问**主**节点 Container Registry. 1. SSH 进入**辅助**节点并以`root`用户身份登录: ``` sudo -i ``` 2. 将`/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key`从**主**节点复制到**辅助**节点. 3. Edit `/etc/gitlab/gitlab.rb`: ``` gitlab_rails['geo_registry_replication_enabled'] = true gitlab_rails['geo_registry_replication_primary_api_url'] = 'https://primary.example.com:5050/' # Primary registry address, it will be used by the secondary node to directly communicate to primary registry ``` 4. 重新配置**辅助**节点以使更改生效: ``` gitlab-ctl reconfigure ``` ### Verify replication[](#verify-replication "Permalink") 要验证 Container Registry 复制是否正常工作,请转到 **管理区>** **辅助**节点上的**地理位置** ( `/admin/geo/nodes` ). 初始复制或"回填"可能仍在进行中. 您可以从浏览器中**主**节点的" **地理节点"**仪表板监视每个地理节点上的同步过程.