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 :
-
Un serveur Ubuntu 16.04 créé en suivant cette tutorial de configuration initiale du serveur Ubuntu 16.04, incluant un utilisateur sans root avec sudo et un pare-feu.
- Aucun compte n’est associé à Docker Hub. Cet aperçu de Docker Hub vous aidera à commencer.
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 :
Après l’installation de Docker, vérifiez l’installation avec les commandes suivantes :
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.
### É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:
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:
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:
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.
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 conteneur80
sur le port du hôte80
. Comme Apache écoute sur le port80
, 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 :
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 :
Lancez ensuite la commande suivante pour arrêter et supprimer le conteneur en cours d’exécution :
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:
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.
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:
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:
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:
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.)
É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 :
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 :
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 :
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.
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.
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.
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.
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 :
{
"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