Einführung
Diese Anleitung zeigt Dir, wie Du einen Workflow erstellen kannst, der einen Docker-Build ausführt und dann Docker-Images auf „Docker Hub“ oder GitHub Packages veröffentlicht. Mit einem einzelnen Workflow kannst Du Images in einer einzigen Registry oder in mehreren Registries veröffentlichen.
Hinweis: Wenn Du auf eine andere Docker-Registriery eines Drittanbieters pushen möchtest, kann das Beispiel im Abschnitt Veröffentlichen von Images auf GitHub Packages" als gute Vorlage dienen.
Vorrausetzungen
Wir empfehlen, dass Du ein grundlegendes Verständnis von Workflowkonfigurations-Optionen hast und darüber, wie Du eine Workflow-Datei erstellst. For more information, see "Learn GitHub Actions."
Vielleicht findest Du es auch hilfreich, ein grundlegendes Verständnis von Folgendem zu haben:
Informationen zur Image-Konfiguration
In dieser Anleitung wird davon ausgegangen, dass Du eine vollständige Definition für ein Docker-Image in einem GitHub-Repository gespeichert hast. Dein Projektarchiv muss beispielsweise eine Dockerdatei und alle anderen Dateien enthalten, die benötigt werden, um einen Docker-Build zum Erstellen eines Images durchzuführen.
In dieser Anleitung wir werden die Docker-Aktion build-push-action verwenden, um das Docker-Image zu bauen und es auf eine oder mehrere Docker-Registries zu übertragen. Weitere Informationen findest Du unter build-push-action.
Images auf dem „Docker Hub“ veröffentlichen
Jedes Mal, wenn Du einen neuen Release auf GitHub erstellst, kannst Du einen Workflow auslösen um Dein Bild zu veröffentlichen. Der Workflow im folgenden Beispiel wird ausgeführt, wenn das release Ereignis mit dem created Aktivitätstyp ausgelöst wird. Weitere Informationen zum release Ereignis findest Du unter "Ereignisse die Workflows auslösen".
In the example workflow below, we use the Docker login-action and build-push-action actions to build the Docker image and, if the build succeeds, push the built image to Docker Hub.
Um zum „Docker Hub“ zu pushen, benötigst Du ein Benutzerkonto auf „Docker Hub“ und musst ein „Docker Hub“-Repository erstellt haben. For more information, see "Pushing a Docker container image to Docker Hub" in the Docker documentation.
The login-action options required for Docker Hub are:
usernameundpassword: Dies ist Dein Benutzername und Passwort auf „Docker Hub“. We recommend storing your Docker Hub username and password as secrets so they aren't exposed in your workflow file. Weitere Informationen findest Du unter „Verschlüsselte Geheimnisse erstellen und verwenden“.
„Docker Hub“ benötigt für build-push-action die folgenden Optionen:
tags: The tag of your new image in the formatDOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION. You can set a single tag as shown below, or specify multiple tags in a list.push: If set totrue, the image will be pushed to the registry if it is built successfully.
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Log in to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push to Docker Hub
uses: docker/build-push-action@v2
with:
push: true
tags: my-docker-hub-namespace/my-docker-hub-repository:latestImages in GitHub Packages veröffentlichen
Jedes Mal, wenn Du einen neuen Release auf GitHub erstellst, kannst Du einen Workflow auslösen um Dein Bild zu veröffentlichen. Der Workflow im folgenden Beispiel wird ausgeführt, wenn das release Ereignis mit dem created Aktivitätstyp ausgelöst wird. Weitere Informationen zum release Ereignis findest Du unter "Ereignisse die Workflows auslösen".
In the example workflow below, we use the Docker login-action and build-push-action actions to build the Docker image, and if the build succeeds, push the built image to GitHub Packages.
The login-action options required for GitHub Packages are:
registry: Muss aufdocker.pkg.github.comgesetzt werden.username: Du kannst mithilfe des Kontexts von${{ github.actor }}automatisch den Benutzernamen des Benutzers zu verwenden, der die Workflow-Ausführung angestoßen hat. Weitere Informationen findest Du unter „Kontext- und Ausdrucks-Syntax für GitHub-Aktionen“.password: Du kannst das automatisch generierte GeheimnisGITHUB_TOKENals Passwort verwenden. Weitere Informationen findest Du unter „Authentifizierung mit dem GITHUB_TOKEN".
Die für GitHub Packages erforderlichen build-push-action-Optionen sind:
tags: Must be set in the formatdocker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION. For example, for an image namedocto-imagestored on GitHub athttp://github.com/octo-org/octo-repo, thetagsoption should be set todocker.pkg.github.com/octo-org/octo-repo/octo-image:latest. You can set a single tag as shown below, or specify multiple tags in a list.push: If set totrue, the image will be pushed to the registry if it is built successfully.
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to GitHub Packages
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Log in to GitHub Docker Registry
uses: docker/login-action@v1
with:
registry: docker.pkg.github.com
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build container image
uses: docker/build-push-action@v2
with:
push: true
tags: |
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.ref }}Images auf dem „Docker Hub“ und in der GitHub Packages veröffentlichen
In a single workflow, you can publish your Docker image to multiple registries by using the login-action and build-push-action actions for each registry.
The following example workflow uses the steps from the previous sections ("Publishing images to Docker Hub" and "Publishing images to GitHub Packages") to create a single workflow that pushes to both registries.
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registries:
name: Push Docker image to multiple registries
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Log in to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Log in to GitHub Docker Registry
uses: docker/login-action@v1
with:
registry: docker.pkg.github.com
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push to Docker Hub
uses: docker/build-push-action@v2
with:
push: true
tags: my-docker-hub-namespace/my-docker-hub-repository:${{ github.ref }}
- name: Build container image
uses: docker/build-push-action@v2
with:
push: true
tags: docker.pkg.github.com/${{ github.repository }}/my-image:${{ github.ref }}The above workflow checks out the GitHub repository, uses the login-action twice to log in to both registries, and then uses the build-push-action action twice to build and push the Docker image to Docker Hub and GitHub Packages. For both steps, it tags the built Docker image with the Git reference of the workflow event. Dieser Workflow wird bei der Veröffentlichung eines GitHub-Releases ausgelöst, so dass die Referenz für beide Registries das Git-Tag des Releases ist.