Sommaire

Tests avec Docker

Introduction

Enfin je me lance sur Docker !
J’étais assez récalcitrant à l’idée de taper simplement une commande sans rien comprendre et que ça fonctionne. Mais bon, si l’on veut faire du Docker il faut bien commencer par le plus simple…

On va donc voir comment installer Docker et lancer notre premier conteneur.
Pour cet exemple, on lancera Gitea, un service Git autohébergé avec une interface Web.
Ensuite, on supprimera toutes traces de Gitea de notre serveur.

https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Docker_%28container_engine%29_logo.svg/500px-Docker_%28container_engine%29_logo.svg.png
La fameuse baleine !

Installation de Docker

On va donc suivre la documentation officielle en installant en premier les dépendances.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# On passe en root (c'est plus simple)
sudo -i

apt update

apt install \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common

On va ensuite ajouter le dépôt de notre Docker.
Pour cela, il faut ajouter la clé GPG pour que notre système s’assure bien à chaque fois qu’il télécharge depuis le vrai dépôt.

1
2
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Ainsi, on ajoute le dépôt des versions stables à notre liste et on met cette dernière à jour.

1
2
3
4
5
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update

Et enfin on peut installer Docker avec l’installation des packages suivants :

1
apt install docker-ce docker-ce-cli containerd.io

Pour vérifier que Docker est bien installé on peut faire un docker run hello-world.

Info
Cette commande télécharge une image de test et l’exécute dans un conteneur. Lorsque le conteneur s’exécute, il imprime un message d’information et se ferme.

Lancement de Gitea

Update du 13/02/2022

Initialement, cet article utilisait le port 10080 mais cela ne fonctionne plus maintenant.
J’ai donc mis le port 980 à la place et accordé celui de SSH pour plus de cohérence.

Il semblerait que cela soit dû à l’extension d’une liste de ports bloqués nativement pas les navigateurs Web.
En effet, ce port est celui utilisé par AMANDA.

Maintenant que le nécessaire est installé, on va lancer le conteneur Gitea avec la commande suivante :

1
2
3
4
5
6
7
docker run \
  -d \
  --name=gitea \
  -p 922:22 \
  -p 980:3000 \
  -v /var/lib/gitea:/data \
  gitea/gitea:latest
  • -d : lancement en mode deamon (en arrière-plan)
  • --name=gitea : le nom donné au conteneur
  • -p 922:22 : mappe le port 922 de l’hôte sur le 22 du conteneur
    Le SSH du conteneur sera alors accessible depuis le port 922
  • -p 980:3000 : mappe le port 922 de l’hôte sur le 3000 du conteneur
    Sert ici pour l’accès à l’interface Web
  • -v /var/lib/gitea:/data : mappe le dossier /var/lib/gitea de l’hôte sur le dossier /data du conteneur
    Si ce dossier n’existe pas sur votre machine, il faut le créer !
  • gitea/gitea:latest : nom de référence de l’image hébergée sur Docker Hub dans sa dernière version

L’image de Gitea va donc être téléchargée sur le Docker Hub et lancée sur notre machine.
Une fois que le prompt nous a rendu la main, on peut se rendre sur notre navigateur en renseignant l’adresse de notre machine et en spécifiant le port “externe” 980.

Ayant fait ce tutoriel sur un Ubuntu Desktop, j’y accède depuis son navigateur avec l’URL http://localhost:980 :

/tests-avec-docker/img/Screenshot_1.webp
Lancement du conteneur Gitea

Sur Gitea, en cliquant sur le bouton de connexion, on vous demande de renseigner certaines informations.
Vous pouvez laisser tout par défaut, mais n’oubliez pas de créer votre compte administrateur dans la partie des Paramètres facultatifs !

/tests-avec-docker/img/Screenshot_2.webp
Création du compte administrateur

Une fois votre configuration validée, la page se recharge sur le port interne du conteneur.
Remettez celui de l’hôte et vous serez sur votre GitHub-like !

/tests-avec-docker/img/Screenshot_3.webp
Tableau de bord de Gitea

Effacement de Gitea

Suppression du conteneur

Maintenant qu’on a expérimenté l’utilisation de Docker, on va le stopper et supprimer toutes traces.

Étant donné qu’on lui a donné un nom, on peut le stopper avec la commande docker stop gitea.
Sinon il faut spécifier l’ID du conteneur qu’on récupère avec un docker container ls.

On supprime ensuite le conteneur avec docker container rm gitea.

Suppression de l’image

L’image se supprime avec la commande docker rmi gitea/gitea.
Si on ne connait pas le nom de l’image, on peut le retrouver avec un docker images.

On peut aussi supprimer l’image en utilisant l’ID de l’image.

Suppression des données

Des volumes on pu être créer, on les supprimes avec docker volume prune.

Les données de Gitea se trouvent aussi sur notre machine hôte dans le dossier /var/lib/gitea.
On les supprime donc avec un rm -rf /var/lib/gitea

Suppression tous-en-un

Pour stopper, supprimer tous les conteneurs ainsi que toutes les images, on peut exécuter la suite de commande suivante :

1
2
3
docker stop $(docker ps |  sed -n '2,$p' | awk '{print $1}')
docker system prune -a # Cette commande demande d'envoyer un 'y' pour confirmer
rm -rf /var/lib/gitea

Conclusion

Nous avons donc vu ensemble comment utiliser les bases de Docker en plus d’une découverte rapide de Gitea.
Comprendre ces bases de Docker va avérer très utile dès que l’on voudra déployé des conteneurs d’une manière plus complexe.

Le prochain tutoriel sur Docker (quand il viendra 🦥), utilisera docker-compose.

Mes notes sur Docker

Lister les processus Docker :

1
docker ps

Lister/effacer les conteneurs :

1
2
docker container ls
docker rm <container id>

Lister/effacer les images :

1
2
docker images
docker rmi <image id>

Lister/effacer les volumes :

1
2
docker volume ls
docker volume rm <volume name>

Lister les différences entre le conteneur et l’image utilisée :

1
docker diff <container id>

Enregistrer l’image modifiée :

1
docker commit <container id> <un_nom_d'image>

Sauvegarder une image (pour export)

1
docker save <un_nom_d'image> > /tmp/MonImage.tar