Introduction à docker

Docker est une plateforme permettant de créer des containers sur un système hôte. Ces containers sont isolés de notre système hôte et peuvent contenir tout un tas de choses, un serveur web, une application, une base MySQL. Vraiment on peut mettre tout ce qu'on veut dans un container docker. D'ailleurs au cours de cette série d'articles consacrée à docker nous verrons comment mettre en place la suite LAMP sous docker.

Alors d'instinct on peut se demander ce qui différencie docker d'un hyperviseur tel que VirtualBox. Cette question on peut y répondre grâce aux schémas fournis par la documentation officiel docker:

On y voit que dans le cas de docker, un daemon (le daemon docker) tourne sur le système hôte et orchestre plusieurs containers (App A, App B ...) chaque container utilise les ressources du système de manière directe. A l'inverse, un hyperviseur est installé en tant que système d'exploitation et orchestre plusieurs machines virtuelles qui elles-mêmes ont leurs propres systèmes d'exploitation.

Docker est du coup plus léger à utiliser puisqu'il n'y a qu'un seul système d'exploitation pour l'ensemble des containers. De plus docker peut être utilisé comme une couche de sécurité (mais ça nous en reparlerons plus tard).

Docker fonctionne grâce à ce que l'on appelle des images (à l'instar des ISO pour nos VM's). Une image docker représente le système de fichiers de votre container. On y trouve tout ce qu'on y a installé (les fichiers de configuration de nos services, nos scripts etc.) Ces images sont créées à partir d'un fichier Dockerfile qui ressemble à ça:

FROM python:3
MAINTAINER greenmind.sec@gmail.com
RUN apt update -y
RUN apt install python3-pip -y
WORKDIR /root
ADD . .
WORKDIR /root/
RUN chmod +x dirsearch.py
ENTRYPOINT ["/root/dirsearch.py"]
CMD ["--help"]

Un Dockerfile contient tout un tas d'instructions qui vont indiquer au daemon docker de quoi nous avons besoin au sein de notre container. Par exemple sur l'exemple ci-dessus on peut voir qu'on demande à ce que les commandes:

RUN apt update -y
RUN apt install python3-pip -y

Soient lancées au moment de la création du container. Une fois le Dockerfile correctement configuré on pourra crée une image (ce qui revient à compiler le Dockerfile) et interagir avec (la lancer, l'arrêter, la supprimer ou encore la modifier). Mais avant tout, il va falloir installer docker sur notre système hôte.

L'installation est simple:

  • Pour apt:
sudo apt install docker
  • Pour yay/pacman:
yay -S docker

Il est possible que le daemon docker ne soit pas activé par défaut dans ce cas on pourra l'activer puis le lance:

sudo systemctl enable docker
sudo systemctl start docker

Une fois cela fait on pourra lancer la commande suivante pour s'assurer que tout fonctionne:

sudo docker run hello-world

Qui devrait fournir l'output suivant:

Si c'est le cas c'est que docker fonctionne correctement et en passant ggwp vous venez de lancer votre premier container docker! De manière transparente plusieurs opérations ont été effectué. En effet vous venez de lancer une image qui s'appelle hello-world mais qui n'existe pas sur votre système (nous n'avons pas encore créée de fichiers Dockerfile).

En fait lorsque l'image n'existe pas localement, le daemon docker va requêter le hub docker et voir si cette image s'y trouve. Le hub, ce n'est rien d'autre qu'une énorme bibliothèque d'images pré-compilées que l'on peut télécharger et exécuter:

Si vous ne voulez pas créer vous même votre Dockerfile et compiler une image vous pourrez tout à fait la récupérer depuis le docker hub.

Voilà pour cette petite introduction à Docker. Pour la suite nous verrons comment créer un Dockerfile et interagir avec nos containers.