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.
--Wsl2 Debian
** 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.
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é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
.
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.
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
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
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