Laboratoire sur Docker
Exercice 5
Fichier Dockerfile exécuter une commande, changer d’utilisateur dans le container.
Exécuter une commande au lancement du container.
Dans l’exercice 4, nous avons appris comment monter un répertoire dans un container et comment publier un port pour accéder à un service qui s’exécute dans un container. Créez un répertoire “dockertest3” sur le système hôte, puis créez-y un fichier Dockerfile avec les instructions suivantes: à partir d’une image de base “ubuntu:18.04” installez curl procps nano et apache2 et exposez le port 80.
- CMD
- Indique quelle commande exécuter par défaut au lancement du container.
- ENTRYPOINT
- Permet de configurer un container pour simuler un fichier exécutable acceptant des arguments.
Les bonnes pratiques pour l’instruction CMD contiennent la commande nécessaire au lancement du server web apache. Ajoutez l’instruction à votre Dockerfile. Construisez une image nommée “monapache:v1”, créez un container nommé “testcmd” et lancez-le en arrière plan.
Puisque notre container exécute seulement apache2, c’est presque comme s’il s’agissait d’un exécutable indépendant qui sert un site web. Utilisez l’instruction ENTRYPOINT pour votre nouvelle image “monapache:v2” tout en respectant les bonnes pratiques
Pour trouver à quel endroit se trouvent les fichiers html servis par apache2, utilisez la commande cat /etc/apache2/sites-available/000-default.conf
qui fera afficher le DocumentRoot. Montez le répertoire “public-html” au DocumentRoot et testez votre container.
Utilisateurs
Par défaut, les processus s’exécutent en tant qu’utilisateur root dans le container. Lorsqu’un processus peut fonctionner en mode non-privilégié, l’instruction USER du fichier Dockerfile permet de changer l’utilisateur qui exécutera les commandes RUN, CMD et ENTRYPOINT suivantes dans le fichier.
Pour les besoins de l’exercice, nous allons sécuriser l’exécution de notre version debian. Modifiez le fichier Dockerfile se trouvant dans “dockertest” pour pouvoir lancer un shell sh avec un utilisateur non-privilégié. La commande useradd -u 6699 -G users -d /home/mathieu mathieu && mkdir /home/mathieu && chown mathieu /home/mathieu
permet d’ajouter un utilisater ayant l’UID 6699, associé au groupe users, avec un repertoire personnel “/home/mathieu”; la commande crée ce répertoire puis change le propriétaire de /home/mathieu. Explorez le système de fichiers, montez un répertoire local, testez les commandes. Nommez votre image finale “mondebian:v3”.
Cette manière de procéder est utile seulement lorsque l’application exécutée dans le container peut fonctionner correctement à partir d’un utilisateur non-privilégié. Pour les applications qui doivent s’exécuter dans le container en tant que root, il est recommandé soit de modifier l’application pour qu’elle fonctionne en mode non-privilégié ou d’utiliser le user namespace. Un mode expérimental, Rootless mode est également disponible pour se prémunir contre les escalades de privilège.