Skip to main content

Arbeiten mit der Docker-Registrierung

Du kannst deine Docker-Images mithilfe der GitHub Packages-Docker-Registrierung pushen und pullen.

GitHub Packages ist verfügbar mit GitHub Free, GitHub Pro, GitHub Free für Organisationen, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 3.0 oder höher, und GitHub AE. Weitere Informationen zum Upgrade deiner Instanz von GitHub Enterprise Server findest du unter „Über Upgrades auf neue Versionen“ und im Upgrade assistant, um den Upgrade-Pfad von deiner aktuellen Release-Version zu finden.

Hinweis: Dieser Pakettyp ist möglicherweise nicht für Ihre Instanz verfügbar, weil Websiteadministratoren die einzelnen unterstützten Pakettypen aktivieren oder deaktivieren können. Weitere Informationen findest du unter Konfigurieren der Paketunterstützung für dein Unternehmen.

Informationen zum Docker-Support

Beim Installieren oder Veröffentlichen eines Docker-Images unterstützt die Docker-Registrierung derzeit keine fremden Ebenen wie z. B. Windows-Images.

Bei GitHub Packages authentifizieren

Du benötigst ein Zugriffstoken, um private, interne und öffentliche Pakete zu veröffentlichen, zu installieren und zu löschen.

Du kannst ein personal access token für die Authentifizierung bei GitHub Packages oder bei der GitHub Enterprise Server-API verwenden. Wenn du ein personal access token erstellst, kannst du dem Token je nach Bedarf verschiedene Bereiche zuweisen. Weitere Informationen über paketbezogene Bereiche für ein personal access token findest du unter Informationen zu Berechtigungen für GitHub-Pakete.

Um dich bei einer GitHub Packages-Registrierung innerhalb eines GitHub Actions-Workflows zu authentifizieren, kannst du Folgendes verwenden:

  • GITHUB_TOKEN, um Pakete zu veröffentlichen, die mit dem Workflowrepository verbunden sind.
  • Ein personal access token (diesem muss mindestens der Bereich packages:read zugeordnet sein), um Pakete zu installieren, die zu anderen privaten Repositorys gehören (auf die GITHUB_TOKEN nicht zugreifen kann)

Weitere Informationen zum GITHUB_TOKEN, das in GitHub Actions-Workflows verwendet wird, findest du unter Authentifizierung in einem Workflow.

Authentifizieren mit einem persönlichen Zugriffstoken

Du musst ein personal access token mit den entsprechenden Bereichen verwenden, um Pakete in GitHub Packages zu veröffentlichen und zu installieren. Weitere Informationen findest du unter Informationen zu GitHub Packages.

Du kannst sich mithilfe des Anmeldebefehls docker bei GitHub Packages bei Docker authentifizieren.

Um die Sicherheit deiner Anmeldeinformationen zu gewährleisten, wird empfohlen, dein persönliches Zugriffstoken in einer lokalen Datei auf deinem Computer zu speichern und das Docker-Flag --password-stdin zu verwenden, das dein Token aus einer lokalen Datei liest.

Wenn die Unterdomänenisolation für deine Instanz aktiviert ist:

$ cat ~/TOKEN.txt | docker login docker.HOSTNAME -u USERNAME --password-stdin

Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

$ cat ~/TOKEN.txt | docker login HOSTNAME -u USERNAME --password-stdin

Um diesen Beispielanmeldebefehl zu verwenden, musst du USERNAME durch deinen GitHub Enterprise Server-Benutzernamen, HOSTNAME durch die URL für , und ~/TOKEN.txt durch den Dateipfad zu deinem persönlichen Zugriffstoken für GitHub Enterprise Server ersetzen.

Weitere Informationen findest du unter Docker-Anmeldung.

Veröffentlichen eines Images

Hinweis: Die GitHub Packages-Docker-Registry wird in einer zukünftigen GitHub Enterprise Server-Version durch die Container registry ersetzt, die eine verbesserte Containerunterstützung bietet.

Hinweis: Imagenamen dürfen nur Kleinbuchstaben enthalten.

GitHub Packages unterstützt mehrere Top-Level-Docker-Images pro Repository. Ein Repository kann eine beliebige Anzahl von Imagetags aufweisen. Unter Umständen beobachtest du beim Veröffentlichen oder Installieren von Docker-Images mit mehr als 10 GB eine beeinträchtigte Dienstqualität, da Ebenen jeweils auf 5 GB gedeckelt sind. Weitere Informationen findest du unter Docker-Tag in der Docker-Dokumentation.

Nachdem Du ein Paket veröffentlicht hast, kannst Du das Paket auf GitHub ansehen. Weitere Informationen findest du unter Anzeigen von Paketen.

  1. Bestimme den Imagenamen und die Image-ID deines Docker-Images mithilfe von docker images.

    $ docker images
    > < >
    > REPOSITORY        TAG        IMAGE ID       CREATED      SIZE
    > IMAGE_NAME        VERSION    IMAGE_ID       4 weeks ago  1.11MB
  2. Tagge das Docker-Image mit der Docker-Image-ID, und ersetze dabei OWNER durch den Namen des Benutzer- oder Organisationskontos, das das Repository besitzt, REPOSITORY durch den Namen des Repositorys, das dein Projekt enthält, IMAGE_NAME durch den Namen des Pakets oder Images, HOSTNAME durch den Hostnamen von , und VERSION durch die Paketversion zur Buildzeit. Wenn die Unterdomänenisolation für deine Instanz aktiviert ist:

    $ docker tag IMAGE_ID docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION

    Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

    $ docker tag IMAGE_ID HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
  3. Wenn du noch kein Docker-Image für das Paket kompiliert hast, kompiliere das Image, indem du OWNER durch den Namen des Benutzer- oder Organisationskontos ersetzt, das das Repository besitzt, REPOSITORY durch den Namen des Repositorys, das dein Projekt enthält, IMAGE_NAME durch den Namen des Pakets oder Images, VERSION durch die Paketversion zur Buildzeit, HOSTNAME durch den Hostnamen von , und PATH durch den Pfad zum Image, wenn es sich nicht im aktuellen Arbeitsverzeichnis befindet. Wenn die Unterdomänenisolation für deine Instanz aktiviert ist:

    $ docker build -t docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH

    Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

    $ docker build -t HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION PATH
  4. Veröffentliche das Image in GitHub Packages. Wenn die Unterdomänenisolation für deine Instanz aktiviert ist:

    $ docker push docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION

    Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

    $ docker push HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION

    Hinweis: Du musst dein Image mithilfe von IMAGE_NAME:VERSION und nicht mithilfe von IMAGE_NAME:SHA pushen.

Beispiel für das Veröffentlichen eines Docker-Images

In diesen Beispielen wird davon ausgegangen, dass die Unterdomänenisolation für deine Instanz aktiviert ist.

Du kannst Version 1.0 des monalisa-Images mithilfe einer Image-ID im Repository octocat/octo-app veröffentlichen.

$ docker images

> REPOSITORY           TAG      IMAGE ID      CREATED      SIZE
> monalisa             1.0      c75bebcdd211  4 weeks ago  1.11MB

# Tag the image with OWNER/REPO/IMAGE_NAME
$ docker tag c75bebcdd211 docker.HOSTNAME/octocat/octo-app/monalisa:1.0

# Push the image to GitHub Packages
$ docker push docker.HOSTNAME/octocat/octo-app/monalisa:1.0

Du kannst ein neues Docker-Image zum ersten Mal veröffentlichen und es monalisanennen.

# Build the image with docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
# Assumes Dockerfile resides in the current working directory (.)
$ docker build -t docker.HOSTNAME/octocat/octo-app/monalisa:1.0 .

# Push the image to GitHub Packages
$ docker push docker.HOSTNAME/octocat/octo-app/monalisa:1.0

Herunterladen eines Bilds

Hinweis: Die GitHub Packages-Docker-Registry wird in einer zukünftigen GitHub Enterprise Server-Version durch die Container registry ersetzt, die eine verbesserte Containerunterstützung bietet.

Du kannst ein Docker-Image mithilfe des Befehls docker pull aus GitHub Packages installieren, indem du OWNER durch den Namen des Benutzer- oder Organisationskontos ersetzt, das das Repository besitzt, REPOSITORY durch den Namen des Repositorys, das dein Projekt enthält, IMAGE_NAME durch den Namen des Pakets oder Images, HOSTNAME durch den Hostnamen von , und TAG_NAME durch das Tag für das Image, das du installieren möchtest.

Wenn die Unterdomänenisolation für deine Instanz aktiviert ist:

$ docker pull docker.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME

Wenn die Unterdomänenisolation für deine Instanz deaktiviert ist:

$ docker pull HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:TAG_NAME

Hinweis: Du musst das Image mithilfe von IMAGE_NAME:VERSION und nicht mithilfe von IMAGE_NAME:SHA pullen.

Weiterführende Themen