RousselTMLEARNING

TP · Docker : de la découverte à l'expertise

Création de mon premier conteneur avec correction

La correction est intégrée au TP (Voir les encadrés de couleur vert)

Les prérequis #

Vous devez disposer d'une machine avec Docker installé.

Déploiement #

Dans cette section, nous allons déployer notre premier conteneur Docker.

  1. Retrouver et télécharger l'image

    Nous allons déployer un serveur web Apache en version 2.4.62. Il faut donc retrouver une image prête à l'emploi pour la télécharger sur notre serveur web Apache.

    Vous devez allez sur un registre Docker. Comme on n'a pas encore de registré privé, on va aller sur un registre Public, par exemple :
    • Docker Hub: https://hub.docker.com/
    • Quay.io: https://quay.io

    Et sélectionner l'image qui nous intéresse.

    RAPPEL : En fonction des distributions, le serveur Apache peut être appelé httpd.

    Donc dans le cas de Docker Hub cela nous donne :
    docker pull httpd:2.4.62
  2. Déployer le conteneur

    Vous devez déployer notre premier conteneur avec les caractéristiques suivantes :
    • Image : apache en version 2.4.62
    • Exposition de port : 83
    • Nom conteneur : mon-premier-conteneur
    Vous pouvez créer le conteneur avec la commande ci-dessous :
    docker run -dit --name mon-premier-conteneur -p 83:80 httpd:2.4.62

    Avec ces explications :
    • docker run -> commande pour créer un conteneur
    • -dit -> combinaison d'options qui lancent le conteneur en mode détaché(d), interactif(i) et alloue un pseudo-TTY. Attention les options évoluent avec votre besoin mais allez toujours au simple (options par défaut)
    • -p 83:80 -> exposer le port 83 sur l'hôté et 80 sur l'invité (conteneur)
    • httpd:2.4.62 -> Image utilisée
  3. Vérification du statut conteneur

    Vous devez vérifier le bon fonctionnement de votre conteneur. Pour cela, vous devez fournir les commandes docker pour les actions suivantes :
    • Affichir les conteneurs démarrés
    • Afficher les conteneurs démarrés et arrêtés
    • Afficher uniquement le conteneur mon-premier-conteneur
    • Afficher les conteneurs qui ont comme Label AUTOR:ROUSSELTM
    Vous pouvez faire les actions avec les commandes suivantes :
    docker ps
    docker ps -a
    docker ps -a | grep mon-premier-conteneur
    Cette commande via '|' peut couvrir de nombreux cas mais pour faire proprement les choses il faut utiliser l'option -f/--filter. Je vous invite à lire les autres paramètres (Voir). Cela nous donne donc
    docker ps -f name=mon-premier-conteneur
    Pour afficher les conteneurs avec les labels on ne peut pas utiliser le '|' car notre sortie de ps n'affiche pas les labels. On est donc obligé de passer par les les filtres
    docker ps --filter 'label=AUTOR=ROUSSELTM'
  4. Vérification du conteneur

    Vous devez trouver la commande pour tester le bon fontionnement du conteneur du serveur web.
    ATTENTION : un conteneur qui est démarré n'est pas un conteneur qui fonctionne. Vous devez vérifier ses logs et ses sorties.
    Vous pouvez faire les actions avec les commandes suivantes :
    $ curl http://localhost:83 -s
    Vous devez avoir dans la sortie le texte 'It works!'

Optimisation #

Dans cette section, nous allons optimiser notre premier conteneur Docker.

  1. Construire un second conteneur plus leger

    Comme signalé pendant les cours il faut utiliser les images officielles en priorité et surtout les plus optimales. Vous devez choisir une autre image plus optimisée en terme de taille.

    Vous pouvez créer un conteneur plus leger avec Alpine.

    RAPPEL : Une bonne pratique est d'utiliser les images alpine dès qu'elles sont disponibles.

    Donc dans le cas de Docker Hub cela nous donne :
    docker run -dit --name mon-second-conteneur -p 84:80 httpd:2.4.62-alpine
  2. Comparer la consommation disque des deux conteneurs

    Vous devez trouver une commande qui affiche uniquement les deux conteneurs avec leur utilisation disque sachant que les deux images ont des noms qui contiennent 'mon-'

    Vous pouvez le faire avec la commande ci-dessous :
    $ docker ps -f name=mon- -s
    CONTAINER ID   IMAGE                 COMMAND              CREATED          STATUS          PORTS                NAMES                   SIZE
    410b6a032a0c   httpd:2.4.62-alpine   'httpd-foreground'   19 seconds ago   Up 17 seconds   0.0.0.0:84->80/tcp   mon-second-conteneur    2B (virtual 62.9MB)
    0865fe7c9e31   httpd:2.4.62          'httpd-foreground'   3 hours ago      Up 3 hours      0.0.0.0:83->80/tcp   mon-premier-conteneur   2B (virtual 148MB)

    Avec ces explications :
    • -s -> afficher l'utilisation disque
    Vous pouvez donc comparer le contenu de la colonne 'SIZE'.

Niveau de difficulté : ●●○○○ (2/5)

Glossaire de la formation

Micro-services

Architecture où une application est divisée en plusieurs petits services indépendants, souvent déployés dans le Cloud.

Docker

Outil permettant de virtualiser et packager des applications à l'intérieur de conteneurs légers pour un déploiement optimal.Exemple de déploiement d'u...

Prometheus

Système open source de surveillance et d'alerte, particulièrement adapté pour la collecte de métriques dans des environnements dynamiques (comme Kuber...

Kubernetes

Plateforme open source d'orchestration de conteneurs permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conte...

CI/CD

Intégration Continue et Déploiement Continu. Pratiques DevOps visant à automatiser les tests et le déploiement des applications pour livrer plus rapid...

Terraform

Outil d'Infrastructure as Code (IaC) permettant de définir et de provisionner des ressources d'infrastructure cloud et on-premise via des fichiers de ...

Métriques

Mesures numériques collectées à intervalles réguliers (ex: CPU, RAM, temps de réponse) utilisées pour évaluer l'état de santé global d'un système au f...

DevOps

Culture, mouvement et pratiques visant à unifier le développement logiciel (Dev) et l'administration des infrastructures informatiques (Ops).Découvrir...

API Gateway

Passerelle servant de point d'entrée unique pour l'ensemble des requêtes vers des architectures micro-services. Elle gère le routage, la sécurité et l...

Architecture

Conception globale et structurelle d'un système informatique, définissant ses différents composants, leurs relations et les principes guidant son évol...

Artefact (Artifact)

Résultat final d'un processus de compilation ou de construction logicielle (build), tel qu'un fichier .jar, une archive zip ou une image Docker, prêt ...

Repository

Dépôt de stockage centralisé. Peut désigner un dépôt de code source (ex: Git) ou un dépôt d'artefacts et binaires (ex: Harbor, Nexus, Artifactory).

Ansible

Outil open source d'automatisation informatique (IaC) permettant la gestion des configurations, le déploiement d'applications et l'orchestration, fonc...

Articles recommandés

Aide-mémoire Docker : Les commandes essentielles

Un guide pratique regroupant toutes les commandes indispensables pour manipuler les images, les c...