Erste Schritte mit der Git Hub Container Registry anstelle von Docker Hub

Überblick

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.

  1. Erstellen Sie jedes Mal, wenn Sie auf ** GitHub ** pushen, ein Docker-Image mit ** GitHub-Aktionen ** und pushen Sie auf ** GitHub Container Registry **
  2. Ändern Sie zu diesem Zeitpunkt das Tag des Docker-Images entsprechend dem auf ** GitHub ** übertragenen Tag.

Umgebung

--Wsl2 Debian

Vorbereitungen

** 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.

image.png

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).

Erstellung einer YAML-Datei ①

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.

Funktionsprüfung

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.

image.png

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

Erstellung einer YAML-Datei ②

Ä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

image.png

Schließlich

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

Erste Schritte mit der Git Hub Container Registry anstelle von Docker Hub
Die Geschichte, wie ein Docker-Container mit GitHub-Aktionen in die GitHub-Paketregistrierung und den Docker-Hub verschoben wird
[Google Cloud] Erste Schritte mit Docker
Erste Schritte mit Docker mit VS-Code
Minimaler Workflow zum Verschieben des Docker-Images in die Github-Container-Registrierung mit Github-Aktionen
Docker Push zur GitHub Container Registry (ghcr.io)
Erste Schritte mit Docker für Mac (Installation)
Erste Schritte mit DBUnit
Erste Schritte mit Ruby
Erste Schritte mit Swift
Erste Schritte mit Doma-Transaktionen
Übertragen Sie ein Docker-Image von GitHub Actions in die GitHub Container Registry
Erste Schritte mit der Verarbeitung von Doma-Annotationen
Erste Schritte mit Java Collection
Erste Schritte mit JSP & Servlet
Erste Schritte mit Java Basics
Erste Schritte mit Spring Boot
Fassen Sie die wichtigsten Punkte für den Einstieg in JPA zusammen, die Sie mit Hibernate gelernt haben
Erste Schritte mit Java_Kapitel 5_Praktische Übungen 5_4
[Linux] Starten Sie den Apache-Container mit Docker
Erste Schritte mit dem Doma-Criteria API Cheet Sheet
Veröffentlichen Sie das Docker-Image in der GitHub-Paketregistrierung
Migrieren Sie Dockerhub-Images in die Github Container Registry
Erstellen Sie ein Container-Image für Kibanas arm64 und registrieren Sie es in der GitHub-Container-Registrierung. Starten Sie Elastic Stack mit Docker Compose auf Raspberry Pi 4 (64 Bit).
Die Geschichte der Aktualisierung des Docker-Containers von Sonar Qube
Einführung in den Parametrisierungstest in JUnit
Einführung in Java ab 0 Teil 1
Erste Schritte mit Ratpack (4) -Routing & Static Content
Einführung von Docker Hub und Befehlen Selbstlernend ①
Beginnen Sie mit der Funktionsweise von JVM GC
Erste Schritte mit dem Language Server Protocol mit LSP4J
Japanische Einstellungen für MySQL im Docker-Container
Erste Schritte mit dem Erstellen von Ressourcenpaketen mit ListResoueceBundle
Testen, erstellen und verschieben Sie Docker-Images mithilfe von GitHub-Aktionen in die GitHub-Container-Registrierung