Es gibt auch eine Geschichte, dass die kostenlose Stufe von ** Docker Hub ** begrenzt sein wird, also habe ich überprüft, wie ** GitHub Container Registry ** verwendet wird, also notieren Sie es sich. Insbesondere möchte ich Folgendes realisieren.
--Wsl2 Debian
** Personal Access Token ** ist erforderlich, um das Docker-Image automatisch in die GitHub Container Registry [^ 1] zu verschieben. Erstellen Sie aus Ihrem eigenen Symbol in der oberen rechten Ecke von GitHub die Schritte "Einstellungen"> "Entwicklereinstellungen"> "Persönliche Zugriffstoken"> "Neues Token generieren". Der Umfang scheint mit dem im Bild unten in Ordnung zu sein. [^ 1]: In Github-Paketen scheint stattdessen GITHUB_TOKEN verwendet zu werden.
Registrieren Sie das erhaltene Token im GitHub-Repository, das Dockerfile usw. verwaltet, gemäß dem Verfahren von "Einstellung"> "Geheimnisse"> "Neues Geheimnis" (hier wird angenommen, dass es als "CR_PAT" gespeichert ist).
Erstellen Sie eine YAML-Datei, um GitHub-Aktionen zu steuern. Angenommen, die folgende Verzeichnisstruktur [^ 2].
.
├── .git
├── .github
│ └── workflows
│ └── build_on_push.yaml
└── Dockerfile
[^ 2]: Das tatsächlich verwendete GitHub-Repository ist hier Der Inhalt von "build_on_push.yaml" lautet wie folgt.
name: Publish Docker image
on: push
jobs:
main:
name: Push Docker image to Github Container Registry
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.CR_PAT }}
- name: Push to GitHub Container Registry
uses: docker/build-push-action@v2
with:
push: true
tags: ghcr.io/dr666m1/qiita_starwars:latest
name:
ist ein beliebiger Wert, da nur der Workflow und der Job benannt werden. Geben Sie in on:
das Triggerereignis an (hier drücken). Da jobs:
in der 3. Zeile einen Job definiert, der aus 5 Schritten besteht, wird jeder Schritt im Folgenden kurz erläutert (Übrigens ist running-on:
die Spezifikation der virtuellen Maschine, die den Job ausführt. Hier wird GitHub Host Runner ausgewählt.
Checkout Machen Sie das GitHub-Repository mit der Aktion "action / checkout @ v2" zugänglich. Umgekehrt sollten Sie ohne diesen Schritt einen Fehler wie "Docker-Datei nicht gefunden" erhalten. Die Dokumentation ist hier.
Set up QEMU, Set up Docker Buildx docker / setup-qemu-action @ v1`` docker / setup-buildx-action @ v1` sollte als Aktion erkannt werden, um die erforderlichen Funktionen zu aktivieren.
Login to GitHub Container Registry
Melden Sie sich mit der Aktion "Docker / Login-Aktion @ v1" an. $ {{Secrets.CR_PAT}}
bezieht sich auf das zuvor erstellte Personal Access Token. Es unterstützt auch Docker Hub und GitLab, und in der Dokumentation wird beschrieben, wie mit den einzelnen Elementen umgegangen wird.
Push to GitHub Container Registry
Erstellen und verschieben Sie das Docker-Image mit der Aktion "Docker / Build-Push-Aktion @ v2". Sie können Tags auch mit tags:
angeben, aber in diesem Stadium setzen Sie sie auf latest
.
Wenn die Datei fertig ist, wird nur "git push" ausgeführt und der in YAML definierte Workflow ausgeführt. Sie können das Protokoll auch wie im folgenden Bildschirm gezeigt überprüfen.
Wenn es kein Problem gibt, können Sie das Docker-Image, das mit "Ihr Profil"> "Pakete" erstellt wurde, über Ihr Symbol oben rechts in GitHub überprüfen. Es scheint standardmäßig privat zu sein. Ändern Sie es also, wenn Sie es öffentlich machen möchten. Danach ist "Docker Run" in Ordnung [^ 3], wenn kein Problem vorliegt.
docker run -it --rm ghcr.io/dr666m1/qiita_starwars:latest
[^ 3]: Wie Sie in Dockerfile sehen können, beginnt in diesem Beispiel das Star Wars-Screening (telnet towel.blinkenlights). .nl
), also beenden Sie mit Strg +]
> quit
Ändern Sie als Nächstes die YAML-Datei wie folgt, damit Sie das Tag angeben können.
name: Publish Docker image
on: push
jobs:
main:
name: Push Docker image to Github Container Registry
runs-on: ubuntu-latest
steps:
- name: Prepare #hinzufügen
id: prep
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
TAG=${GITHUB_REF#refs/tags/}
else
TAG="latest"
fi
echo "::set-output name=tag::${TAG}"
- name: Checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.CR_PAT }}
- name: Push to GitHub Container Registry
uses: docker/build-push-action@v2
with:
push: true
tags: ghcr.io/dr666m1/qiita_starwars:${{ steps.prep.outputs.tag }} #Veränderung
Die Hauptänderung ist das Hinzufügen eines Schritts namens Vorbereiten. run:
gibt den Befehl an, der von der Shell ausgeführt werden soll (Standard ist bash [^ 4]). Hier wird die Verarbeitung durch die Umgebungsvariable "$ GITHUB_REF" [^ 5] geändert, und wenn der Tag-Name enthalten ist, wird er zugewiesen, andernfalls wird "TAG" "TAG" zugewiesen. echo" :: set-output name = tag :: $ {TAG} "
ist Workflow-Befehl, Und hier kann im nachfolgenden Schritt auf den Wert von "TAG" Bezug genommen werden. Der Teil, auf den sich $ {{steps.prep.outputs.tag}} tatsächlich bezieht.
[^ 4]: Verfügbare Shells sind Offizielle Dokumente Referenz [^ 5]: Verfügbare Umgebungsvariablen sind Offizielle Dokumentation Sehen
Mit dieser Änderung ändern sich auch die Tags des Docker-Images entsprechend den an GitHub übertragenen Tags. Wenn Sie beispielsweise Folgendes ausführen, lautet das Tag des Docker-Images ebenfalls "1.0".
git tag 1.0
git push --tags
Wenn Sie von Docker Hub zu Git Hub Container Registry wechseln möchten, ist dies im Allgemeinen ein Problem. GitHub-Aktionen können für weitere Aufgaben wie automatisierte Tests verwendet werden. Daher möchte ich lernen, wenn ich Zeit habe.
Recommended Posts