Docker - Les Basiques

by Tyleo Dv. Delaware

Share

La Description

La description pompée de Wikipedia est plutôt simple.

Docker est une plateforme permettant de lancer certaines applications dans des conteneurs logiciels lancée en 2013.

Puis je corrige :

Docker est une plateforme permettant de lancer TOUTES LES applications dans des conteneurs logiciels lancée en 2013.

Docker devait penser que tout ne serais pas compatible, mais sachez qu'actuellement, un conténaire Docker peut faire office de bureau virtuel Linux.

Fonctionnement

Basé sur ContainerD, un moteur de conténaire puissant de Linux, basé sur le Kernel (a l'instar de KVM). Un conténaire n'est pas une VM, il n'est pas virtuel mais plutôt sandboxé et géré/gérable.

Les différentes aspects d'un conténaire Docker :

Le Réseau

Dans un conténaire Docker, le réseau est, par défaut, totalement fermé (aucun port exposé vers et depuis l'exterieur du conténaire). Il faudra alors demander a Docker d'exposer un port local vers un port externe (Exemple avec le port 80 qui donnera 80:80 ou 80:8888 si le conténaire a un port différent dans son image)

Les réseaux virtuels Docker sont séparé par défaut, et limité à 31 réseaux sur un hôte (quand aucune segmentation n'est faite) et placé de 172.16.0.0 à 172.16.31.0

L'Image

Un conténaire est basé sur une image, créer via un DockerFile qui indique ce que Docker doit construire lors d'un Build d'Image.

Le DockerFile comprend des commandes Linux, des SED, des ADD pour ajouter des fichiers directement, des RUN pour envoyer des commandes Shell, des ENV pour ajouter des variables utilisables par Docker après, des EXPOSE pour définir les ports exposables etc... Une page dédiée sera fait sur les images Docker.

Les Volumes et Binds

Il y a deux types de volumes :

  • Autogéré (Volumes), Stockés dans /var/lib/docker. Je ne conseille pas l'utilisation des volumes pour du Selfhosting, car il est TROP FACILE de détruire les données par un `apt purge` par exemple.
  • Montés (Binds), Permettant de définir exactement l'emplacement des données. Très pratique et permettant d'organiser ses données logiquement et faciliter la portabilité de ces données.

Les Variables de Configuration

Les variables de config sont défini au démarrage du conténaire via `docker run` ou `docker exec`. Cela permet de contrôler certains aspects de l'image utilisée et le résultat donnée dans le conténaire.

Le User

Déterminé par --user (ou user: dans Compose), cela détermine l'utilisateur en tant que sur lequel le conténaire va fonctionner. Nous citerons ainsi les cas particuliers :

--user 0:0 | Tu n'a pas peur toi ?
--user root | Non en fait pas du tout.

--user 33:33 | L'utilisateur d'identifiant "33" et le groupe "33"

Aussi, les données doivent souvent être chmodées/chownées pour permettre l'execution si l'image n'a pas d'auto fixage des permissions, souvent visible dans le DockerFile.