Premiers pas avec Git Hub Container Registry au lieu de Docker Hub

Aperçu

Il y a aussi une histoire selon laquelle le niveau gratuit de ** Docker Hub ** sera limité, j'ai donc vérifié comment utiliser ** GitHub Container Registry **, alors prenez-en note. Plus précisément, je voudrais réaliser ce qui suit.

  1. Chaque fois que vous poussez vers ** GitHub **, créez une image docker avec ** Actions GitHub ** et poussez vers ** GitHub Container Registry **
  2. À ce moment-là, modifiez la balise de l'image du docker en fonction de la balise transmise à ** GitHub **.

environnement

--Wsl2 Debian

Préparation préalable

** Le jeton d'accès personnel ** est requis pour pousser automatiquement l'image du docker vers GitHub Container Registry [^ 1]. Créez à partir de votre propre icône en haut à droite de GitHub en suivant les étapes Paramètres> Paramètres du développeur> Jetons d'accès personnels> Générer un nouveau jeton. La portée semble convenir à celle de l'image ci-dessous. [^ 1]: Dans les packages Github, il semble que GITHUB_TOKEN pourrait être utilisé à la place.

image.png

Enregistrez le jeton obtenu dans le référentiel GitHub qui gère Dockerfile etc. selon la procédure de Setting> Secrets> New secret (ici, on suppose qu'il est enregistré sous CR_PAT).

Création de fichier YAML ①

Créez un fichier YAML pour contrôler les actions GitHub. En supposant la structure de répertoires suivante [^ 2].

.
├── .git
├── .github
│   └── workflows
│       └── build_on_push.yaml
└── Dockerfile

[^ 2]: Le référentiel GitHub réellement utilisé est ici Le contenu de build_on_push.yaml est le suivant.

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: est une valeur arbitraire car il ne nomme que le workflow et le travail. Dans on:, spécifiez l'événement déclencheur (appuyez ici). Puisque jobs: sur la 3ème ligne définit un job composé de 5 étapes, chaque étape sera brièvement expliquée ci-dessous (au fait, runs-on: est la spécification de la machine virtuelle qui exécute le job. Ici, GitHub Host Runner est sélectionné).

Checkout Rendez le référentiel GitHub accessible avec l'action actions / checkout @ v2. Inversement, sans cette étape, vous devriez obtenir une erreur telle que "Dockerfile not found". La documentation est ici.

Set up QEMU, Set up Docker Buildx docker / setup-qemu-action @ v1``` docker / setup-buildx-action @ v1 doit être reconnu comme une action pour activer les fonctions nécessaires.

Login to GitHub Container Registry Connectez-vous avec l'action docker / login-action @ v1. $ {{secrets.CR_PAT}} fait référence au jeton d'accès personnel créé précédemment. Il prend également en charge Docker Hub et GitLab, et la Documentation décrit comment les gérer.

Push to GitHub Container Registry Construisez et poussez l'image docker avec l'action docker / build-push-action @ v2. Vous pouvez également spécifier des balises avec tags:, mais à ce stade, définissez-le sur latest.

Contrôle de fonctionnement

Lorsque le fichier est prêt, il suffit de «git push» et le workflow défini dans YAML sera exécuté. Vous pouvez également consulter le journal comme indiqué dans l'écran ci-dessous.

image.png

S'il n'y a pas de problème, vous pouvez vérifier l'image du docker construite avec Votre profil> Packages à partir de votre icône en haut à droite de GitHub. Il semble être privé par défaut, alors changez-le si vous voulez le rendre public. Après cela, docker run est OK [^ 3] s'il n'y a pas de problème.

docker run -it --rm ghcr.io/dr666m1/qiita_starwars:latest

[^ 3]: Comme vous pouvez le voir dans Dockerfile, dans cet exemple, la projection Star Wars commence (telnet serviette.blinkenlights). .nl), alors quittez avec Ctrl +]> quit

Création de fichier YAML ②

Ensuite, modifiez le fichier YAML comme suit afin de pouvoir spécifier la balise.

name: Publish Docker image
on: push
jobs:
  main:
    name: Push Docker image to Github Container Registry
    runs-on: ubuntu-latest
    steps:
      - name: Prepare #ajouter à
        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 }} #Changement

Le principal changement est l'ajout d'une étape appelée Préparer. run: spécifie la commande à exécuter par le shell (la valeur par défaut est bash [^ 4]). Ici, le traitement est modifié par la variable d'environnement «$ GITHUB_REF» [^ 5], et si le nom de la balise est inclus, il est affecté, sinon «dernier» est affecté à «TAG». echo" :: set-output name = tag :: $ {TAG} " est commande de workflow, Et ici, la valeur de «TAG» peut être mentionnée dans l'étape suivante. La partie à laquelle «$ {{steps.prep.outputs.tag}}» se réfère en fait.

[^ 4]: les shells disponibles sont Official Documents référence [^ 5]: Les variables d'environnement disponibles sont Official Documents Voir

Avec ce changement, les balises de l'image du docker changeront également en fonction des balises transmises à GitHub. Par exemple, si vous exécutez ce qui suit, la balise de l'image du docker sera également «1.0».

git tag 1.0
git push --tags

image.png

finalement

Si vous souhaitez passer de Docker Hub à Git Hub Container Registry, il s'agit généralement d'un problème. Les actions GitHub peuvent être utilisées pour plus de choses telles que les tests automatisés, donc je veux étudier quand j'en ai le temps.

Recommended Posts

Premiers pas avec Git Hub Container Registry au lieu de Docker Hub
L'histoire du transfert d'un conteneur Docker vers le registre de packages GitHub et Docker Hub avec des actions GitHub
[Google Cloud] Premiers pas avec Docker
Premiers pas avec Docker avec VS Code
Flux de travail minimal pour pousser l'image Docker vers Github Container Registry avec des actions Github
Docker push vers GitHub Container Registry (ghcr.io)
Premiers pas avec Docker pour Mac (installation)
Premiers pas avec DBUnit
Premiers pas avec Ruby
Premiers pas avec Swift
Premiers pas avec Doma-Transactions
Transférer une image Docker des actions GitHub vers GitHub Container Registry
Premiers pas avec le traitement Doma-Annotation
Premiers pas avec Java Collection
Premiers pas avec JSP et servlet
Premiers pas avec les bases de Java
Premiers pas avec Spring Boot
Résumer les principaux points de démarrage avec JPA appris avec Hibernate
Premiers pas avec Java_Chapitre 5_Exercices pratiques 5_4
[Linux] Démarrer le conteneur Apache avec Docker
Premiers pas avec Doma-Criteria API Cheet Sheet
Publier l'image Docker dans le registre de packages GitHub
Migrer les images Dockerhub vers Github Container Registry
Créez une image de conteneur pour l'arm64 de Kibana et enregistrez-la dans le registre de conteneurs GitHub. Démarrez Elastic Stack avec Docker Compose sur Raspberry Pi 4 (64 bits)
L'histoire de la mise à jour du Docker Container de Sonar Qube
Introduction au test de paramétrage dans JUnit
Introduction à Java à partir de 0 Partie 1
Premiers pas avec Ratpack (4) - Routage et contenu statique
Introduction de Docker Hub et des commandes Auto-apprentissage ①
Démarrez avec le fonctionnement de JVM GC
Premiers pas avec Language Server Protocol avec LSP4J
Paramètres japonais pour mysql dans le conteneur Docker
Premiers pas avec la création d'ensembles de ressources avec ListResoueceBundle
Tester, créer et pousser des images Docker vers GitHub Container Registry à l'aide d'actions GitHub