Vous êtes ici

Docker : La virtualisation allégée à l'aide des conteneurs

Présentation : Docker c’est en gros un système de virtualisation allégé. Au lieu de virtualiser tout un environnement : CPU, Mémoire, etc… Nous avons plutôt à faire à un système de conteneur. C’est-à-dire que Docker se base sur LXC, lancer une machine sur Docker revient à lancer un système dans le système qui est totalement isolé (réseau, système de fichiers, processus, ressources).

Avantage :

-          Facilité d’administration

-          Rapidité de déploiement et facilité

-          Légèreté

-          Pas besoin d’Hyperviseur, une simple machine linux suffit

-          Automatisation de déploiement simplifié (notamment à l’aide des Dockerfile vu dans la suite)

Nous allons donc voir comment l’installer et comment l’utiliser.

1) Installation (la méthode décrite permet d’installer la version la plus à jour) :

- Ajout de la source pour apt : sudo vi /etc/apt/sources.list.d/docker.list

- Télécharger la clé GPG associée à la source précédemment ajoutée :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

- Mettre à jour les sources : sudo apt-get update

- Installer docker : sudo apt-get install lxc-docker

-Test de l'installation : sudo docker run -i -t ubuntu /bin/bash

La commande précédente a pour but d'exécuter un bash sur une image ubuntu, à la fin de l'exécution, vous êtes dans un conteneur virtuel d'ubuntu. La simple commande exit va fermer le bash et donc éteindre le conteneur virtuel. Pour ne pas éteindre le conteneur en le quittant : il faut utiliser la combinaison de touches suivante : CTRL+P suivi de CTRL+Q

 

2) utilisation de base

Toutes les commandes doivent être passées en root.

-          Récupérer une image depuis les serveurs docker :

docker pull centos

Va récupérer une image centos

-          Consulter les images disponibles :

docker images

-          Supprimer une image

docker rmi image_id

-          Mise en place d’une machine utilisant cette image ubuntu et lancer un bash :

docker run –i –t ubuntu /bin/bash

Un simple exit va terminer le bash et donc également stopper la machine.

-          Voir les différentes machines existantes :

docker ps –a

Ici nous pouvons voir que nous avons 3 machines, toutes les 3 stoppées

-          Supprimer une machine :

docker rm id_conteneur

-          Remettre en fonction une machine :

docker start id_conteneur

Ici la machine démarrée passe en status UP

-          Se connecter à une machine démarrée :

docker attach id_conteneur

A ce moment nous sommes dans le conteneur. Par contre, lorsque vous ferrez exit, vous quitterez le conteneur et celui-ci va stopper, il faut utiliser la combinaison de touches suivante : CTRL+P suivi de CTRL+Q , pour ne pas stopper le conteneur.

Pour démarrer le conteneur sans que les commandes ctrl-c etc, ne soient communiquer à votre hôte mais bien uniquement au conteneur, il faut lors de l’attachement ajouter le paramètre : --sig-proxy=false

Le plus simple pour se connecter au conteneur reste encore SSH, tout simplement. Nous allons voir ensuite que le conteneur, dispose d’une interface réseau pleinement fonctionnelle.

-          Stopper un conteneur :

docker stop conteneur_id

-          Redémarrer un conteneur :

docker restart conteneur_id

3) Utilisation avancée

-              Sauvegarder un conteneur dans une nouvelle image :

Sur mon image existante, je décide d’installer openssh-server, et j’aimerai avoir une sauvegarde de cette image pour déployer automatiquement mon prochain conteneur avec ssh d’installé, ou tout simplement, je désire sauvegarder mon conteneur.

docker commit image_id nom_de_mon_image

Ici je désire sauver l’image ayant pour id a1198b4aae93 en une nouvelle image nommée ubuntu/imagessh

-          Export/import d’une image

Nous allons voir ici comment exporter une image pour pouvoir la sauvegarder tout simplement, et nous allons également voir comment l’importer pour pouvoir la réutiliser sur une autre machine :

L’export de notre image :

docker save ubuntu/imagessh > ~/imagessh.tar

Mon image va donc être exportée en fichier tar dans mon home avec pour nom imagessh.tar

Import de cette image :

docker load < ~/imagessh.tar

L’image va être importée dans ma bibliothéque d’images docker.

-          Lancer une image en mappant un port

De base lorsque que nous lançons un conteneur, celui-ci dispose d’une adresse IP, cependant aucun port n’est mappé vers l’exterieur. Nous allons donc ici, mapper le port 22 de notre conteneur en port 9022 sur notre hôte. Le port 9022 sera donc accessible de l’extérieur et redirigera sur le port SSH de notre conteneur. Pour cela :

Il faut ajouter le paramètre p , donc –p 22 :9022, la paramètre –p 22 aura pour effet de juste natter le port 22 pour le rendre accessible depuis l’hôte. Il est bien sur possible de cumuler ce paramètre : -p 22 –p 80

docker run –i –t –p 9022:22 ubuntu/imagessh /bin/bash

Une fois connecté sur mon contenteur, je lance le service ssh.

Je sors de mon conteneur.

Je le démarre : docker start id_conteneur

Et je peux constater la redirection de mon port 22 vers le 9022 :

docker ps –a

-          Récupérer des infos sur un conteneur :

docker inspect conteneur_id

Par exemple, je veux l’adresse IP de mon conteneur :

docker inspect conteneur_id | grep IPAddress

-          Partager un volume hôte avec un conteneur

Créer un répertoire sur la machine hôte : mkdir /mnt/partage

Puis lancer un conteneur avec ce paramètre : -v /mnt/partage:/opt/partage (/opt/partage est le reprertoire voulu dans le conteneur) :

docker run –i –t –v /mnt/partage:/opt/partage ubuntu/imagessh /bin/bash

-          Configurer une image automatiquement avec dockerfiles

Créer un fichier dockerfiles :

Créer un nouveau repertoire : mkdir monimage

Créer le fichier dockerfile : Vi Dockerfile :

FROM ubuntu
MAINTAINER  Aurelien [email protected]
RUN apt-get update
RUN apt-get install -y openssh-server
EXPOSE 22
ENTRYPOINT /etc/init.d/ssh start

Ensuite, il ne reste plus qu’à lancer la construction de l’image :

docker build –t monimage ~/monimage

Et donc, lors du deploiement du conteneur :

Il execute bien la commande demandée en ENTRYPOINT. J’ajoute dans la commande ENTRYPOINT :

ENTRYPOINT /etc/init.d/ssh start && /bin/bash

Pour m’ouvrir une console bash au lancement du conteneur.

Bien sur dans cet exemple, j’installe simplement un serveur SSH. Il est bien sur possible de faire des choses bien plus interessantes comme mettre en place un serveur Web + BDD avec une configuration fonctionnelle. Il est possible de modifier des fichiers ou des variables depuis le dockerfile.

IMPORTANT : Pour quitter un conteneur attaché sans le fermer, il faut utiliser la combinaison de touche suivante : CTRL+P suivi de CTRL+Q

Voila la base du fonctionnement de Docker, c’est un outils très performant pour du développement, de l’isolation d’application ou de service sur une même machine. Il y a openvz également qui fonctionne sur ce principe que nous verrons plus tard.

Pour plus d’information sur Docker : docs.docker.com

 

www.le-gas.fr : Le guide de l'admin Systeme