设置Docker Hub通过镜子拉动

概要

开始11月1日2020年,Docker Hub将根据始发IP施加匿名拉动的速率限制。为避免服务中断,建议使用Docker Hub进行身份验证Docker Pulls。您可以使用构建配置进行身份验证(请参阅使用Docker身份验证的拉动)。

或者,您可以通过预先配置Docker Hub帐户凭据,通过注册表镜设置Docker集线器。使用RIGHT通过注册表镜子可能比制作许多构建配置修改更简单。它还可以带来额外的性能改进,因为对Docker集线器的网络往返降低了。

这些设置指令分为三个部分:通过缓存注册表设置拉动,配置Nomad客户端将注册表用作镜像,并配置VM服务将注册表用作机器执行器和远程Docker作业中的镜像。

服务机器不需要配置为使用镜像。服务机器不会定期提取Docker图像(它仅在初始设置和升级过程中提取图像),并且大多数图像从复制中拉动。因此,利率限制很少有机会。

通过缓存注册表设置拉动

本节封装通过缓存注册表设置拉动,它用作Docker集线器的镜像和反向代理。呈现了两种类型的通过缓存注册表:使用HTTP的基本和更容易设置的版本以及使用HTTPS更安全的选项。任一个选项对于大多数情况而言,您可能需要在某些情况下更安全选项。

先决条件:设置Docker Hub帐户

在通过缓存注册表设置之前,您需要设置Docker Hub帐户。该帐户将通过缓存注册表使用,以使用Docker Hub进行身份验证。

我们建议您设置专用帐户。Circleci Server安装的所有最终用户也可以访问该帐户的资源。这尤为重要如果帐户有私人的在Docker Hub上注册的图像,因为这些私人图像将由Circleci Server安装的所有用户访问。
虽然可以使用免费帐户,建立付费帐户将是一个很好的选择,以便进一步缓解速率限制:付费账户有一个无限制的图像拉动津贴。也可以看看:https://www.docker.com/188bet娱乐官网pricing.

通过缓存注册表设置基本拉动(用于Docker Hub的HTTP代理)

  1. 设置独立的Linux服务器安装了Docker。

    我们将此注册表设置为独立的服务器(即circleci框之外),以避免对影响其他Circleci服务器服务的缓存注册表中的负载。

    假设此服务器的IP地址是192.0.2.1,要设置的注册表的URL是http://192.0.1.。稍后将需要此URL到ARM Nomad客户端和VM服务。

  2. 运行以下命令启动注册表

    更换docker_hub_username.docker_hub_access_token.使用Docker Hub帐户的用户名和您通过的访问令牌https://hub.docker.com/settings/security., 分别。
    sudo docker run \ -d \ -p 80:5000 \  -  restart = always \ --name = tod-cache \ -e registry_proxy_remoteurl =“https://registry-1.docker.io”\ -e registerry_proxy_username = docker_hub_username\ -e Registry_Proxy_password = docker_hub_access_token \注册表
  3. 最后,确保TCP端口80(即http)是打开和可访问的。为了更好的安全性,我们建议您只将端口打开到Nomad客户端和VM执行者和远程Docker引擎。

    例如,在AWS上,您需要确保操作系统级别的安全组和防火墙正确配置以接受来自HTTP的Nomad客户端的连接。

通过缓存注册表(Docker Hub的HTTPS代理)设置安全拉动

在某些情况下(特别是当您有启用时buildkit.执行器和远程Docker引擎),通过缓存注册表的拉动需要接受HTTPS的连接。这些说明介绍通过缓存的拉动,该缓存侦听HTTPS连接。

  1. 设置独立的Linux服务器安装了Docker。

    我们将此注册表设置为独立的服务器(即circleci框之外),以避免对影响其他Circleci服务器服务的缓存注册表中的负载。

    您的主机名需要访问服务器。即,您必须相应地配置DNS,以便主机名(假设your-mirror.example.com.)正确解析到服务器的IP地址。在本指南中,我们假设我们正在设置的注册表的URL是https://your-mirror.example.com.(请注意URL方案是http.S.,而不是http.)。稍后将需要URL到ARM Nomad客户端和VM服务。
  2. 获得TLS证书your-mirror.example.com.将证书和私钥放入/ root / tls服务器。

    本指南假定您正在获得众所周知的CA颁发的证书,而不是自签名证书。尚未测试使用自签名证书。
  3. 运行以下命令启动注册表

    更换docker_hub_username.docker_hub_access_token.使用Docker Hub帐户的用户名和您通过的访问令牌https://hub.docker.com/settings/security., 分别。

    更换fullchain.pem.privkey.pem.使用您的证书和私钥的文件名。指定的证书必须正确束缚足以将叶子从叶子的认证路径追溯到根本

    sudo docker run \ -d \ -p 443:5000 \ --restart = always \ --name = tod-cache-secure \--v / root / tls:/ data / tls \ -e registry_proxy_remoteurl =“https://Registry-1.Docker.io“\ -e Registry_Proxy_Username = docker_hub_username \ -e Registry_proxy_password = docker_hub_access_token \ -e registry_http_tls_certificate = / data / tls / fultchain.pem \ -e registry_http_tls_key = / data / tls / privkey.pem \注册表
  4. 最后,确保TCP端口443(即HTTPS)是打开和可访问的。为了更好的安全性,我们建议您仅向Nomad客户端和VMS打开端口执行者和远程Docker引擎。

    例如,在AWS上,您需要确保操作系统级别的安全组和防火墙正确配置以接受来自Nomad客户端和VM的连接/setup_remote_docker.HTTPS的工作。

计划更新TLS证书

您需要定期续订TLS证书。这些是续订证书所需的步骤。

  1. 更新证书和私钥/ root / tls

  2. Docker重启通过缓存安全

从技术上讲,这可以自动化。例如,如果您使用的是让我们的证书加密,可以设置执行的Cron任务CERTBOT更新和上面的步骤。

配置Nomad客户端以使用缓存注册表(运行Nomad Client)

  1. 运行以下命令配置注册表镜像Docker守护程序的选项

    更换http://192.0.2.1.or.https.your-mirror.example.com.使用您的PUCHS注册表的URL相应。
    sudo bash -c'cat <<< $(JQ“。\”Registry-Mirrors \“= [\”http://192.0.2.1.or.https.your-mirror.example.com \“]”/ etc/docker/daemon.json)> /etc/docker/daemon.json'
  2. 重新加载Docker守护程序应用配置。

    sudo systemctl重新启动docker.service

配置VM服务以让机器/远程Docker VMS使用缓存注册表

按照以下步骤在您的服务机器上。

  1. 运行以下命令为自定义文件创建一个目录

    sudo mkdir -p / etc / circleconfig / VM-Service

  2. 填充自定义脚本由VM-Service加载。将下面的脚本添加到/ etc / circleconfig / VM-Service /自定义

    更换http://192.0.2.1.or.https.your-mirror.example.com.docker_mirror_hostname.通过缓存注册表的拉动URL变量相应。
    导出java_opts =' -  CP / resources:/service/app.jar'export docker_mirror_hostname =“http:///192.0.2.1.or.https.your-mirror.example.com”mkdir -p /资源/ ec2 cat> /资源/ ec2 / linux_cloud_init.yaml << eod#cloud-config system_info:default_user:name:“%1 \ $ s”ssh_authorized_keys: - “%2 \ $ s”runcmd: -  bash -c'如果[!-f /etc/docker/daemon.json];然后mkdir -p / etc / docker;echo“{}”> /etc/docker/daemon.json;fi' -  bash -c'cat <<< \ $(JQ“。\”Registry-Mirrors \“= [\”$ docker_mirror_hostname \“]”/etc/docker/daemon.json)> / etc / docker /守护程序.json' -  systemctl重新启动docker.service eod
  3. 重新启动VM服务应用定制。

    sudo docker重新启动VM-Service

测试您的设置

使用私人图像而不明确身份验证

如果缓存注册表的Docker ID具有私有图像,则应访问私有图像而无需显式最终用户身份验证。

下面是测试访问的示例配置(假设缓存注册表使用Docker IDyourmachineaccount.,并且有一个私人形象yourmachineacomount / private-office-with-docker-client):

版本:2个职位:remote-docker:docker: - 图片:yourmachineaconcount / private-offic-docker-client#库/ docker步骤的副本-Client机器:机器:TRUE步骤: - 运行:Docker Light YourMachIneAccount / Private-Image-with-Docker-Client工作流程:版本:2运行:作业: - 遥控器 - 机器

检查缓存注册表上的日志

通过跑步sudo docker日志通过缓存(要么sudo docker日志通过缓存安全如果您设置了安全注册表),则可以从缓存注册表中查看日志输出。如果它是可操作的,则应有注册表响应具有HTTP状态代码的清单和BLOB的请求的消息200.

恢复设置

解除武装游牧民族客户

按照以下步骤操作游牧民族客户。

  1. 去掉注册表镜像选项/etc/docker/daemon.json.通过运行下面的命令。

    sudo bash -c'cat <<< $(JQ“del(。\”注册表-镜像\“)”/etc/docker/daemon.json)> /etc/docker/daemon.json“
  2. sudo systemctl重新启动docker.service应用变化。

解除VM服务

按照以下步骤在您的服务机器上。

  1. 空白java_opts.环境变量通过运行下面的命令。

    echo'取消设置java_opts'|sudo tee -a / etc / circleconfig / VM-Service /自定义

  2. sudo docker重新启动VM-Service应用变化。