Mit benutzerdefinierten Docker-Images arbeiten

Am 20. November 2020 wurde bei Docker Hub eine Durchsatzbegrenzung für anonyme Image-Pull-Operationen eingeführt. Diese Änderung kann Auswirkungen für Benutzer haben, die Jobs ausführen, bei denen in Docker Hub gehostete angepasste Images verwendet werden.

Das Pipeline-Basisimage unterstützt möglicherweise nicht alle Anforderungen Ihres Builds. Sie brauchen zum Beispiel eine feinere Kontrolle über die Versionen von Node, Java oder anderen Tools. Sie können dieses Problem beheben, indem Sie einen ersten Schritt in Ihre Pipeline-Jobs einfügen, der eine Reihe neuer Pakete installiert und Umgebungsvariablen (wie PATH) korrekt konfiguriert, um Ihre Umgebung einzurichten. Ein besserer Ansatz ist es jedoch, die Unterstützung der Pipeline für die Ausführung eines benutzerdefinierten Docker Bildes als Grundlage für Ihren Auftrag zu verwenden.

Die angepasste Unterstützung für Docker-Image in der Pipeline wird nur verwendet, um ein Image bereitzustellen, das ein bestimmter Pipelinejob während seiner Ausführung verwendet. Sie können zum Beispiel ein Image bereitstellen, dass angepasste Tools enthält, die für das Script, das den Job ausführt, erforderlich sind. Nachdem der Job abgeschlossen ist, wird der Container, in dem er ausgeführt wurde, umgerüstet.

Unabhängig davon, ob Sie den Jobtyp "Erstellen", "Test" oder "Bereitstellen" verwenden, können Sie einen untergeordneten Typ des benutzerdefinierten Docker-Images auswählen, um den bereitzustellenden Docker-Imagenamen und das auszuführende Script anzugeben. Verwenden Sie beispielsweise die folgenden Optionen, um einen Buildjob mit Maven 3.5.3 und IBM Java auszuführen:

Maven Build mit benutzerdefiniertem
Build mit benutzerdefiniertem

Namen des Docker-Images angeben

Der Docker-Imagename in benutzerdefinierten Docker-Imagejobs funktioniert genauso wie Imagenamen mit der Docker-CLI. Das Format für einen Namen eines Docker-Images ist: [repository][:][tag]. Beispiel: Für docker run maven:3.5.3-ibmjava lautet der Name des Docker-Images maven:3.5.3-ibmjava, wobei maven das Repository und 3.5.3-ibmjava das Tag ist. Für Docker-Imagenamen gibt es keine Einschränkungen. Jedes gültige Docker-Image funktioniert.

Wenn das Feld Docker-Imagename nicht ausgefüllt wird, wird das standardmäßige Pipeline-Basisimage verwendet.

Standardmäßig wird Ihr Repository auf Docker Hub durchsucht. Wenn Sie eine andere Docker-Registry verwenden, z. B. IBM Cloud® Container Registry, können Sie den vollständigen DNS-Namen verwenden. Sie können auch den vollständig qualifizierten Namen für Images auf Docker Hub verwenden. Beispiel: registry.hub.docker.com/library/maven:3.5.3-ibmjava.

Der tag ist für ein Docker-Image optional. Wenn Sie keinen Tag angeben, wird standardmäßig latest festgelegt. Der Standardwert von latest ist nur ein Tag-Name, den der Repository-Eigner verwalten muss. Dies bedeutet nicht, dass dieses Docker-Image chronologisch das neueste Image ist.

Eine riesige Community an Repositorys finden Sie unter Docker Hub. IBM beherbergt eine Reihe von öffentlichen Repositories, die das IBM Cloud-Team unter https://hub.docker.com/u/ibmcom/. Die Repositorys ibmcom/ibmjava und ibmcom/ibmnode sind gute Basis-Repositorys.

Private Image-Registry verwenden

Wenn Sie eine private Registrierung verwenden, die eine Authentifizierung erfordert, müssen Sie zwei zusätzliche Eigenschaften der Bühnenumgebung festlegen: DOCKER_USERNAME und DOCKER_PASSWORD. Sie können eine sichere Eigenschaft verwenden, um DOCKER_PASSWORD zu maskieren. Bevor Ihr Image abgerufen wird, verwendet der benutzerdefinierte Docker-Imagejob Ihren Benutzer- und Kennwortberechtigungsnachweis, um eine Docker-Anmeldung (docker login) abzuschließen.

Für die meisten Registrys können Sie den Benutzernamen und das Passwort verwenden, die Ihnen zur Verfügung gestellt wurden. Wenn Sie IBM Cloud Container Registry zum Speichern Ihrer privaten Images verwenden, müssen Sie einen Plattform-API-Schlüssel für die Authentifizierung verwenden.

  1. Fordern Sie einen Plattform-API-Schlüssel an und stellen Sie sicher, dass Sie den Schlüssel speichern.

  2. Erstellen Sie zwei Phase-Umgebungseigenschaften, indem Sie iamapikey für DOCKER_USERNAME sowie den Plattform-API-Schlüssel verwenden, den Sie für DOCKER_PASSWORD gespeichert haben.

    caption-side=bottom"
    IBM Cloud Container Registry anmeldeinformationen Anmeldeinformationen zur Authentifizierung

Script angeben

Sie können den script-Block in benutzerdefinierten Docker-Imagejobs verwenden, um eine Scriptdatei zu erstellen, die in einem Task-Ordner ausgeführt wird (so wie bei normalen Pipeline-Jobs).

ENTRYPOINT und CMD aus der Dockerfile Ihres Docker-Images werden überschrieben und nicht aufgerufen. In einigen Fällen müssen Sie Ihrem Script möglicherweise Initialisierungsschritte hinzufügen.

Mit benutzerdefinierten Docker-Imagejobs sind Sie bei der Ausführung Ihres Scripts flexibler, vor allem, weil Sie den Befehlsinterpreter steuern können. Wenn die erste Zeile des Scripts mit #! beginnt und der Name eines Befehlsinterpreters angegeben ist, wird dieser Eintrag in der Regel verwendet, um die Befehle im Job auszuführen. Wenn Sie keinen Befehlsinterpreter angeben, wird die Standardshell für das Docker-Image verwendet. In der Regel gilt Folgendes: #!/bin/bash oder #!/bin/sh werden verwendet; Image-Befehlsinterpreter für awk, node und ruby funktionieren auch, wenn Sie ein entsprechendes Docker-Image angeben.