Docker – Intégration avec GitHub

26 avril 2021


Contenu

  1. Créer un projet et le publier sur GitHub
  2. Préparer un projet d’image Docker
  3. Créer un dépôt sur docker hub
    1. Lier GitHub et hub.docker
  4. Publier le projet sur GitHub
    1. Valider la construction automatique de l’image
  5. Gestion des versions + regex

Mise en contexte

En utilisant la fonction ‘Intégration GitHub‘ de Docker.Hub, il est possible de programmer la reconstruction automatique d’une image.

À la fin de cet atelier, nous serons capable d’automatiser un ‘docker build’ suite à un ‘push’ vers un dépôt GitHub.

Allez Hop, à l’apprentissage!


Étape 1 – Créer un projet et le publier sur GitHub

Action 1.1 – Créer un nouveau dossier, avec un fichier README.me

$ mkdir docker.hub+github
$ echo "## Démo d'intégration docker.hub+github" > docker.hub+github/README.md
$ git init docker.hub+github
$ cd docker.hub+github
$ ls -la

drwxr-xr-x  9 alain  staff  288 26 avr 11:00 .git
-rw-r--r--  1 alain  staff   42 26 avr 10:59 README.md


Action 1.2 – Ajouter le fichier ‘README.md‘ à la scène – ‘stage’ – de git:

$ git add . 
$ git status

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

Action 1.3 – Renseigner le premier ‘Commit’

$ git commit -m "Premier commit du projet"

[master (root-commit) aa20111] Premier commit du projet
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

Action 1.4 – Créer le projet sur GitHub:

Action 1.5 – Prendre en note les directives de GitHub:

Action 1.6 – Pousser (push) le projet vers GitHub:

git branch -M main
git remote add origin https://github.com/ve2cuy/docker.hub.github.git
git push -u origin main

---
# Résultat:

Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 266 bytes | 266.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ve2cuy/docker.hub.github.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

Note:  Il est possible d’avoir besoin de fournir votre identification GitHub si vous n’êtes pas déjà connecté à votre compte GitHub.  Vous pouvez utiliser GitHub Desktop pour l’authentification.


Action 1.7 – Vérifier le résultat du ‘push‘ sur GitHub:


Étape 2 – Préparer un projet d’image Docker

Action 2.1 – Renseigner le fichier Dockerfile suivant:

FROM php:8.0.3-apache-buster
COPY index.php /var/www/html/

Action 2.2 – Renseigner le fichier index.php suivant:

<?php
// À copier dans le dossier /var/www/html de l'image httpd
echo <<<FDL
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<h1><center><span style="color: rgb(215, 112, 16);">420-4D4: DockerHub+GitHub</span></center></h1>
<h2><center><span style="color: rgb(34, 139, 60);">Exemple d'une image de conteneur</span></center></h2>
<h2><center><span style="color: rgb(34, 139, 60);">Reconstruite et publiée automatiquement</span></center></h2>
<h3><center><span style="color: rgb(165, 8, 8);">Je suis la version 1.0 de l'image</span></center></h2>
<hr/><br/><br/><br/>

<h1><center>Vous avez été servis par: <span style="color: rgb(165, 8, 8);">
FDL;
echo gethostname() . "</span></center></h1>";
?>

<br/><br/><br/>
<hr>
<h6 style="text-align:right; padding-right:1em;">Document préparé par Alain Boudreault - 2021.04.26</h6>

Action 2.3 – Tester l’image

docker build -t a_effacer . 
docker run --rm -p 80:80 a_effacer

# Tester dans un fureteur ...

 


Étape 3 – Créer un dépôt sur docker hub

Pré-requis: Lier les comptes hub.docker et GitHub.

Action 3.1 – À partir de votre compte hub.docker, sélectionner l’option « Account Settings »

Action 3.1.2 – 

Action 3.1.3 – Au besoin, se connecter à GitHub

 

Action 3.1.4 – Vérifier la liaison des comptes

 


Action 3.2 – Créer un nouveau dépôt dans hub.docker nommé docker-hub-github

Action 3.3 – Renseigner les instructions du ‘build’ automatique

Note: Attention au nom de la source:


Étape 4 – Publier le projet sur GitHub

Action 4.1 – Actualiser la scène git puis publier sur GitHub

$ git add .

git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   Dockerfile
        new file:   index.php

---

$ git commit -m "Version 1.0 du projet"

[main 91f4a30] Version 1.0 du projet
 2 files changed, 20 insertions(+)
 create mode 100644 Dockerfile
 create mode 100644 index.php

---

$ git push

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 830 bytes | 830.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/ve2cuy/docker.hub.github.git
   aa20111..91f4a30  main -> main

Action 4.2 – Vérifier l’état du ‘build‘ dans hub.docker

Après un certain délai:

Résultat:  Une nouvelle image:latest est maintenant disponible sur hub.docker.

Action 4.2.1 – Tester l’image

docker run  --rm -p 80:80 alainboudreault/docker-hub-github

Action 4.3 – Modifier le code source du fichier index.php

# Remplacer 
<h3><center><span style="color: rgb(165, 8, 8);">Je suis la version 1.0 de l'image

# Par 

<h3><center><span style="color: rgb(165, 8, 8);">Je suis la version 1.1 de l'image

Action 4.3.1 – Publier la modification sur GitHub

$ git add .
$ git commit -m "Passage à la version 1.1"
$ git push

---

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/ve2cuy/docker.hub.github.git
   8c010bd..ca31f89  main -> main

Action 4.4 – Vérifier l’état de reconstruction de l’image sur docker.hub

Action 4.5 – Tester la nouvelle image

docker run --rm -p 80:80 --pull always alainboudreault/docker-hub-github
http://localhost/

 


Étape 5 – Gestion des versions

Action 5.0 – Pré-requis: Effacer le projet sur docker.hub

Nous allons maintenant recréer le dépôt sur docker.hub.

Action 5.1 – Renseigner une expression RegEx pour le nom de la version

Action 5.1.2 – Vérifier le panneau de ‘Builds’ automatiques:

Note: Il y a maintenant deux projets ‘Automated Builds‘;

  1. Source:main‘ pour tous ‘Push’ vers le dépôt et qui produira une image ‘latest
  2. Source:/^v([0-9.]+)$/‘ pour l’ajout de nouveaux tags vx.x dans le dépôt GitHub du projet et qui produira une image ‘v9.99

Action 5.2 – Modifier les fichiers « Dockerfile » et « index.php »

FROM php:8.0.3-apache-buster
LABEL maintainer="Alain Boudreault"\
      name="docker_dockerhub"\
      version="2.0"
COPY index.php /var/www/html/
<h3><center><span style="color: rgb(165, 8, 8);">Je suis la version 2.0 de l'image

Action 5.3 – Publier sur GitHub sous version 2.0

$ git add .
$ git commit -m "Passage à la version 2.0"
$ git push

Action 5.3.1 – Créer un tag pour le dépôt GitHub

a)

b)

c)

d)

e) Résultat finale:

Action 5.4 – Vérifier l’état des ‘builds’ du projet sur hub.docker

Action 5.4.1 – Vérifier la page principale de l’image sur hub.docker

 


Action 5.5 – Tester l’image de la version v2.0

docker run --rm -p 80:80 alainboudreault/docker-hub-github:v2.0

 


Voilà ce qui conclut ce laboratoire. 😉


Document rédigé par Alain Boudreault (aka ve2cuy) – Version du 2021.04.27