Série de webinaires : démarrez avec les conteneurs

Cet article constitue une suite d’une série de webinaires sur le déploiement et la gestion des charges de travail contenues dans la nuage. La série aborde les éléments essentiels du conteneurisme, tels que la gestion de la vie cycle des conteneurs, la déploiement d’applications multi-conteneurs, l’échelle des charges de travail, ainsi que l’utilisation de Kubernetes, en soulignant les meilleures pratiques pour exécuter des applications statuelles.Ce tutoriel comporte les concepts et les commandes couvertes dans la première séance de cette série, Introduction au conteneurisme.

Cette présentation inclut les notions et les commandes abordées lors de la première séance de la série, « Introduction aux conteneurs ».

Introduction

Docker est un plateforme permettant de déployer et de gérer des applications contenues. Les conteneurs sont populaires parmi les développeurs, les administrateurs et les ingénieurs en développement opérationnel (devops) grâce à la flexibilité qu’ils offrent.

Docker possède trois composants essentiels :

  • Moteur Docker
  • Outils Docker
  • Régistre Docker

Le moteur Docker fournit les capacités clés pour gérer les conteneurs. Il interagit avec le système d’exploitation Linux sous-jacent pour exposer des API simples qui traitent de la vie cyclique des conteneurs.

Les outils Docker sont un ensemble de commandes en ligne qui communiquent avec l’API exposée par le moteur Docker. Elles sont utilisées pour exécuter des conteneurs, créer de nouvelles images, configurer les stockages et réseaux, et effectuer beaucoup plus d’opérations qui affectent la vie cyclique d’un conteneur.

Le registre Docker est le lieu où les images de conteneurs sont stockées. Chaque image peut avoir plusieurs versions identifiées par des étiquettes uniques. Les utilisateurs téléchargent des images existantes du registre et les publient avec de nouvelles images.Docker Hub est un registre hébergé géré par Docker, Inc.. Il est également possible d’exécuter un registre dans votre propre environnement pour garder les images plus proches du moteur.

Après la fin de ce tutoriel, vous aurez installé Docker sur une instance DigitalOcean, géré des conteneurs, travaillé avec des images, ajouté la persistence, et mis en place un registre privé.

Prérequis

Pour suivir ce tutoriel, vous devrez avoir :

Par défaut, la commande docker nécessite des privilèges de root. Toutefois, vous pouvez exécuter la commande sans le préfixe sudo en exécutant docker avec un utilisateur qui fait partie du groupe docker.

Pour configurer votre Droplet de cette manière, exécutez la commande suivante : sudo usermod -aG docker ${USER}. Cela ajoutera l’utilisateur actuel au groupe docker. Ensuite, exécutez la commande suivante : su - ${USER} pour appliquer la nouvelle membresse du groupe.

Ce tutoriel suppose que votre serveur est configuré pour exécuter la commande docker sans le préfixe sudo.

Étape 1 — Installation de Docker

Après avoir SSHé sur le Droplet, exédez les commandes suivantes pour supprimer tous les paquets liés à Docker qui peuvent être déjà installés et puis installez Docker depuis la boutique officielle :

  1. sudo apt-get remove docker docker-engine docker.io
  2. sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
  3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. sudo apt-key fingerprint 0EBFCD88
  5. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  6. sudo apt-get update
  7. sudo apt-get install -y docker-ce

Après l’installation de Docker, vérifiez l’installation avec les commandes suivantes :

  1. docker info

La commande précédente montre les détails du moteur Docker déployé dans l’environnement. La prochaine commande vérifie que les outils Docker sont correctement installés et configurés. Elle devrait imprimer la version de Docker Engine et des outils.

  1. docker version

### Étape 2 – Lancement des conteneurs

Les conteneurs Docker sont lancés depuis des images existantes qui sont stockées dans le registre. Les images peuvent être stockées dans des répertoires privés ou publics. Les répertoires privés nécessitent une authentification avant de télécharger les images. Les images publiques peuvent être accessibles par tout le monde.

Pour rechercher une image nommée hello-world, exédez la commande suivante:

  1. docker search hello-world

Il peut y avoir plusieurs images correspondant au nom hello-world. Choisissez celle avec le nombre maximum d’étoiles, indiquant la popularité de l’image.

Vérifiez les images disponibles dans votre environnement local avec la commande suivante:

  1. docker images

Comme nous n’avons pas lancement de conteneurs, il n’y aura pas d’images. Nous pouvons maintenant télécharger l’image et la lancer localement:

  1. docker pull hello-world
  2. docker run hello-world

Si vous exédez la commande docker run sans télécharger l’image, Docker Engine va télécharger l’image et puis la lancer. Exéder la commande docker images à nouveau montrera que nous disposons de l’image hello-world locale.

Lancez maintenant un conteneur plus significatif : un serveur Web Apache.

  1. docker run -p 80:80 --name web -d httpd

Vous pouvez remarquer des options supplémentaires passées à la commande docker run. Voici une explication de ces options:

  • -p : Cela indique à Docker Engine de exposer le port du conteneur 80 sur le port du hôte 80. Comme Apache écoute sur le port 80, nous avons besoin d’exposer le port du conteneur sur le port du hôte.
  • --name : Cette option attribue un nom au conteneur en cours d’exécution. Si nous oublions cette option, Docker Engine attribuera un nom aléatoire.
  • -d : Cette option indique à Docker Engine de lancer le conteneur en mode détaché. Sans cela, le conteneur sera lancé en premier plan, bloquant l’accès au shell. En utilisant cette option, nous pouvons continuer à utiliser le shell alors que le conteneur est toujours en fonctionnement.

Pour vérifier que notre conteneur est effectivement en fonctionnement en arrière-plan, essayez cette commande :

  1. docker ps

La sortie montre que le conteneur nommé web est en cours d’exécution avec le port 80 mapé sur le port du hôte 80.

Accedez maintenant au serveur Web :

  1. curl localhost

Lancez ensuite la commande suivante pour arrêter et supprimer le conteneur en cours d’exécution :

  1. docker stop web
  2. docker rm web

Une fois exécutées, docker ps confirme que le conteneur est terminé.

Étape 3 — Ajout de stockage dans les conteneurs

Les conteneurs sont éphémérides, ce qui signifie que tout ce qui est stocké à l’intérieur d’un conteneur sera perdu lorsque le conteneur est terminé. Pour persister des données au-delà de la vie du conteneur, nous devons attacher une volume au conteneur. Les volumes représentent des répertoires du système de fichiers hôte.

Commencez par créer un nouveau répertoire sur le système de fichiers hôte:

  1. mkdir htdocs

Maintenant, lancez le conteneur avec une nouvelle option pour montrer le répertoire htdocs. Cette directive pointe le répertoire htdocs du conteneur vers le racine du serveur Web Apache. Tout changement apporté dans ce répertoire sera visible à la fois dans les emplacements.

  1. docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd

Lancez le conteneur avec une nouvelle option pour montrer le répertoire htdocs. Tout changement apporté dans ce répertoire sera visible à la fois dans les emplacements.

Accédez au répertoire depuis le conteneur en exécutant la commande suivante:

  1. docker exec -it web /bin/bash

Cette commande attache notre terminal à la boucle de commandes du conteneur en mode interactif. Vous devriez voir que vous êtes maintenant déposé dans le conteneur.

Naviguez dans le répertoire htdocs et créez simplement un fichier HTML. Finalement, sortez de la shell du conteneur:

  1. cd /usr/local/apache2/htdocs
  2. echo '<h1>Hello World from Container</h1>' > index.html
  3. exit

Exécutez la commande suivante curl localhost et vous verrez que le serveur Web renvoie la page que vous avez créée.

Nous pouvons non seulement accéder à cette page depuis le hôte, mais également la modifier:

  1. cd htdocs
  2. cat index.html
  3. echo '<h1>Hello World from Host</h1>' | sudo tee index.html >/dev/null

Exécuter curl localhost de nouveau confirme que le serveur Web renvoie la page créée depuis le hôte.

Arrêtez le conteneur avec la commande suivante. (La -f force Docker à terminer sans arrêter d’abord.)

  1. docker rm -f web

Étape 4 — Création d’images

Besides déployer des images existantes dans le registre, vous pouvez créer votre propre image et la stocker dans le registre.

Vous pouvez créer de nouvelles images à partir de conteneurs existants. Les modifications apportées au conteneur sont d’abord committées puis les images sont étiquetées et publiées dans le registre.

Lancez à nouveau le conteneur httpd et modifiez le fichier par défaut :

  1. docker run -p 80:80 --name web -d httpd
  2. docker exec -it web /bin/bash
  3. cd htdocs
  4. echo '<h1>Welcome to my Web Application</h1>' > index.html
  5. exit

Le conteneur est maintenant en marche avec un index.html personnalisé. Vous pouvez le vérifier avec curl localhost.

Avant de committer le conteneur modifié, il est une bonne idée de l’arrêter. Après quoi, exécutez la commande suivante pour commiter :

  1. docker stop web
  2. docker commit web doweb

Confirmez la création de l’image avec la commande docker images. Elle montre que l’image doweb que vous avez justement créée est présente.

Pour étiqueter et stocker cette image dans Docker Hub, exécutez les commandes suivantes pour la déposer dans le registre public :

  1. docker login
  2. docker tag your_docker_hub_username/doweb
  3. docker push your_docker_hub_username/doweb

Vous pouvez vérifier la nouvelle image sur Docker Hub à travers le navigateur ou la ligne de commande.

Étape 5 — Lancement du registre privé

Il est possible d’exécuter le registre en environnement privé pour garder les images plus sécurisées. Cela réduit également la latence entre le moteur Docker et le dépository d’images.

Le registre Docker est disponible comme une conteneur qui peut être lancé comme tout autre conteneur. Comme le registre contient plusieurs images, il est une bonne idée de lui attacher un volume de stockage.

  1. docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry

Noticez que le conteneur est lancé en arrière-plan avec le port 5000 exposé et le répertoire registry mappé sur le système de fichiers du hôte. Vous pouvez vérifier que le conteneur est en cours d’exécution en exécutant la commande docker ps.

Nous pouvons maintenant étiqueter une image locale et la publier dans le registre privé. Lets tirons d’abord le conteneur busybox de Docker Hub et l’étiquettez.

  1. docker pull busybox
  2. docker tag busybox localhost:5000/busybox
  3. docker images

La commande précédente confirme que le conteneur busybox est maintenant étiqueté avec localhost:5000, donc, faites le dépôt de l’image dans le registre local.

  1. docker push localhost:5000/busybox

Avec l’image déposée dans le registre local, essayez de la retirer de l’environnement et de la tirer de nouveau du registre.

  1. docker rmi -f localhost:5000/busybox
  2. docker images
  3. docker pull localhost:5000/busybox
  4. docker images

Nous avons effectué le cycle complet de tirage de l’image, d’étiquetage, de dépôt dans le registre local, et finalement de tirage.

Il peut arriver des cas où vous voulez exécuter le registre sur un hôte dédié. Le moteur Docker en运行 sur différents ordinateurs va communiquer avec le registre distant pour tirage et dépôt d’images.

Puisque le registre n’est pas sécurisé, nous devons modifier la configuration de Docker Engine pour autoriser l’accès à un registre non sécurisé. Pour ce faire, éditez le fichier daemon.json situé à /etc/docker/daemon.json. Créez le fichier s’il n’existe pas.

Ajoutez l’entrée suivante :

Editing /etc/docker/daemon.json
{
  "insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}

Remplacez REMOTE_REGISTRY_HOST par le nom d’hôte ou l’adresse IP du registre distant. Redémarrez Docker Engine pour s’assurer que les modifications de configuration sont appliquées.

##Conclusion
Ce tutoriel vous a aidé à vous familiariser avec Docker. Il a couvert les concepts essentiels, y compris l’installation, la gestion des conteneurs, la gestion des images, l’espace de stockage et le registre privé. Les prochaines séances et articles de cette série vous aideront à passer aux concepts avancés de Docker.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker