Docker

Motivation

Offrir des environnements invariables aux applications.

Analyse

Docker propose une alternative plus légère (et donc plus performante) aux VM pour créer des environnements aux applications sans pour autant répliquer un OS.

Conception

Docker permet de construire (build) et pousser (push) des images de conteneurs (containers)

Une fois construit, un conteneur peut être démarré ou stoppé.

Les conteneurs peuvent avoir accès à des ressources du système où ils s'exécutent :

Implémentation

La description du conteneur est décrit dans un Dockerfile.

Instruction Description Commentaire
# syntax version Version de syntaxe Indique quelle version de dockerfile utiliser (en 1ère ligne)
# escape char Directive d'échappement Indique quel est le caractère d'échappement (en 1ère ligne). \ par défaut
FROM dockerImage Indique à partir de quelle image cette image va être construite Première ligne (ou 2ème si directive)
ARG argument=value Définit une variable de construction Valeur à spécifier au moment de la construction (ou valeur par défaut), après FROM
ENV varname1=value1 varname2=value2 Définit une variable d'environnement Valeur $varname1 ou ${varname} disponible pendant la construction et l'exécution
WORKDIR path Spécifie le répertoire du conteneur où seront exécutées les prochaines instructions de build Crée le répertoire si non existant, /. par défaut
USER username Spécifie quel utilisateur va exécuter les prochaines commandes L'utilisateur doit exister (root par défaut)
ADD source dest Ajoute des fichiers/répertoires à l'image construite. dest est absolu ou relatif au dernier WORKDIR. source peut être une URL.
COPY source dest Ajoute des fichiers/répertoires locaux à l'image construite. dest est absolu ou relatif au dernier WORKDIR
RUN ["command", "arg1", "argn"]
RUN command arg1 argn
Execute une commande shell
EXPOSE port/protocol Déclare sur quel port le conteneur écoutera des requêtes réseau. protocol est `tcp` par défaut
CMD [commande] Indique une commande à exécuter au démarrage du conteneur
ENTRYPOINT ['commande', 'arg1', 'argn'] Indique une commande à exécuter au démarrage du conteneur