Einstellungen zur Vermeidung von Docker Hub-Einschränkungen in CircleCI

Problem

Docker Hub ist ein kostenloses Konto und ein nicht authentifizierter Benutzer mit einer begrenzten Anzahl von Pulls ab November (https://www.docker.com/pricing/resource-consumption-updates). Wenn Sie mit CircleCI ohne Authentifizierung arbeiten, werden IP-Adress-basierte Einschränkungen angewendet. Da die Anzahl der CircleCI-IP-Adressen im Vergleich zu Benutzern nicht groß ist, bestehen Bedenken hinsichtlich der Auswirkungen.

Das CircleCI-Team scheint mit Docker zu sprechen, daher müssen Benutzer möglicherweise in Zukunft nicht mehr antworten. Wenn die CI / CD-Umgebung jedoch stoppt, sind die Auswirkungen groß. Halten Sie also die Problemumgehung gedrückt.

Lösung

Wenn Sie die Benutzerauthentifizierung von Docker Hub vorerst beißen, wird sie nicht anhand der IP-Adresse beurteilt, sodass Sie auch mit einem kostenlosen Konto bis zu 200 Pulls / 6h verwenden können. Wenn es mehr als das wird, müssen Sie Docker Hub aufladen, aber trotzdem müssen Sie den Benutzer auf CircleCI authentifizieren, damit die gleiche Arbeit ausgeführt wird.

Arbeitsablauf

Authentifizieren Sie den Docker Hub-Benutzer in CircleCI, indem Sie die folgenden Schritte ausführen. Klicken Sie hier für die gesamte config.yaml.

Legen Sie den Docker Hub-Benutzernamen und das Kennwort im CircleCI-Kontext fest

Das Verfahren zur Registrierung im Kontext wird in Kürze veröffentlicht, daher werde ich es weglassen. image.png

Fügen Sie dem Job, der Docker verwendet, Kontext hinzu

  staging_steps: &staging_steps
    <<: *only_master
    context:
      - serverless_staging
      - docker-hub-credencials
  production_steps: &production_steps
    <<: *only_master
    context:
      - serverless_production
      - docker-hub-credencials

Fügen Sie dem Teil mit Docker eine Authentifizierung hinzu

Docker-Executor und die Authentifizierungsinformationen, die an der Stelle festgelegt wurden, an der Docker in Machine Executor abgerufen wird, werden hinzugefügt. Unten finden Sie ein Beispiel für einen Docker-Executor.

Erstellen Sie ein Element als Referenz

references:
  docker_hub_authentication: &docker_hub_authentication
    auth:
      username: $DOCKERHUB_USER
      password: $DOCKERHUB_PASSWORD

Auf alle Stellen anwenden, an denen das Bild gezogen wird

Das Folgende ist ein Beispiel für die Anwendung auf die in "Ausführenden" zusammengefassten Teile.

executors:
  python3_6_1:
    working_directory: ~/repo
    docker:
      - image: circleci/python:3.6.1
        <<: *docker_hub_authentication
  test:
    working_directory: ~/repo
    docker:
      - image: circleci/python:3.6.1
        <<: *docker_hub_authentication
      - image: bluszcz/bflocalstack-dynamodb-s3
        <<: *docker_hub_authentication
      - image: alismedia/dynamodb-local
        <<: *docker_hub_authentication
        environment:
          MAX_HEAP_SIZE: 4096m
          HEAP_NEWSIZE: 3072m
      #Keine Anmeldeinformationen erforderlich, da es sich nicht um einen Docker Hub handelt
      - image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0
        environment:
          discovery.type: single-node

Wenn Sie die obigen Einstellungen vornehmen und dieselben wie vor der Änderung erstellen können, sind Sie fertig.

Error

Wenn Sie Ihre Anmeldeinformationen versehentlich einem Speicherort hinzufügen, der nicht Docker Hub ist, wird die folgende Fehlermeldung angezeigt:

Error response from daemon: Get https://docker.elastic.co/v2/elasticsearch/elasticsearch/manifests/6.2.0: unauthorized: authentication required

Das Folgende ist ein mysteriöser Fehler. Dies ist das erste Mal, dass ich es gesehen habe.

Allocating a remote Docker Engine
Requesting version: 18.09.3

Got error while creating host: failed to create host: rpc error: code = Unknown desc = failed to create VM: Put "https://vm-service.infra.circleci.com/tasks/5f7ffcbaa7b0aa6a8ec29c79-0-build%2F59C7C9D1": EOF
We had an unexpected error preparing a VM for this build, potentially due to our infrastructure or cloud provider.  Please retry the build in a few minutes

Führen Sie es wie angewiesen erneut aus und es wurde behoben.

Recommended Posts

Einstellungen zur Vermeidung von Docker Hub-Einschränkungen in CircleCI
So führen Sie JavaFX unter Docker aus
Hinweise zur Migration von CircleCI 1.0 auf 2.0
Stellen Sie Rails on Docker für Heroku bereit
Schieben Sie das Image mit Jib zum Docker-Hub
Freiheit auf Docker
Redmine auf Docker
Führen Sie Rubocop und RSpec auf CircleCI aus und stellen Sie es in ECS bereit
Führen Sie auf, wie Sie in AWS von Docker zu AKS lernen können