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