La virtualisation avec Docker Introduction - e

Transcription

La virtualisation avec Docker Introduction - e
La virtualisation avec Docker
Introduction
Le système de conteneur
●
Docker est un projet Open Source
●
Projet démarré en mars 2013
●
Levée de fonds (septembre 2014) : 40 millions de $
●
Système de machine virtuelle Linux légère
●
●
–
Pas d'hyperviseur
–
Partage du noyau hôte (kernel)
Basé sur le standard LXC (Linux Containers)
Entreprise : Docker, Inc.
Virtualisation sous Linux
Le projet Docker
●
●
Développeur principal : Solomon HYKES
Contributeurs : Andrea Luzzardi, Francois-Xavier
Bourlet, Jeff Lindsay
●
Licence : APACHE LICENSE 2.0
●
Écrit avec le langage GO
●
Version standard pour plateforme Linux 64bits
●
Version Boot2Docker pour Windows et OSX
●
Site web : www.docker.com
Concepts de base
●
●
●
Un conteneur Docker interagit avec le système hôte
Linux.
Les conteneurs d'un même hôte appartiennent à un
réseau virtuel.
–
Par défaut 172.17.0.0
–
Passerelle par défaut 172.17.42.1
–
Par défaut adressage DHCP
Un conteneur peut empaqueter une application et ses
dépendances et il peut être exécuté sur n'importe
quel serveur Linux.
Architecture Docker
Espace utilisateur
Conteneur A
Conteneur B
Serveur
WEB
Base
De
Données
Docker CLI
Ligne de commande
Docker Daemon
SYSTÈME D'EXPLOITATION
CPU
MÉMOIRE
Entrée/Sortie
Interface réseau
Stockage
Périphériques
Pourquoi Docker ?
●
Constat :
–
Déployer des applications sur des serveurs est
très fastidieux
●
Très pratiqué avec les forges logicielles
–
–
Les architectures logicielles sont aujourd'hui
très complexes
●
●
Intégration continue
Multiplication des couches et des services
Solution :
–
Isoler chaque service, chaque couche dans un
conteneur léger
Vision Docker
●
Brique d'infrastructure
–
●
●
Comme pour les fermes de machines en lieu et
place des super-calculateurs les conteneurs Docker
distribuent horizontalement l'infrastructure
Service
–
Chaque conteneur embarque un service ou très peu
de services (concept de micro-service)
–
Les conteneurs peuvent être déployés dans le cloud
comme solution PAAS.
Cloud
●
OpenStack, OpenShift, OpenSVC
Solution Docker
●
●
●
●
●
Docker est une solution logicielle pour les logiciels.
Docker est une couche d'abstraction qui permet de
dématérialiser la fonction serveur.
Docker simplifie la logistique liée à l'exploitation des
logiciels.
Docker est un mini-cloud à lui seul dans lequel sont
exécutés des conteneurs légers.
Très adapté au cycle de vie itératif du logiciel
–
Intégration, déploiement, exécution, test
Processus Docker (1)
●
Tout commence par une image
–
Obtenue à partir du Docker Hub
●
–
Commandes pull, run
Construite en local
●
●
Commandes commit, build
Fichier de configuration Dockerfile
Processus Docker (2)
●
Démarrage d'un conteneur à partir d'une image
–
Commandes :
●
Mode terminal avec obtention d'un prompt :
–
●
En arrière plan :
–
●
docker run -i -t [image] /bin/bash
docker run -d [image]
Options :
–
–
–
–
-P ou -p [port]
--name [nom]
--link [nom:nom]
-v [volume local:volume docker]
Gestion des conteneurs (1)
●
Liste des conteneurs actifs
–
●
Liste des conteneurs actifs et arrêtés
–
●
docker ps -a
Arrêt d'un conteneur
–
●
docker ps
docker stop [nom] ou [conteneurID]
Suppression d'un conteneur
–
docker rm [nom] ou [conteneurID]
Gestion des conteneurs (2)
●
Arrêt de tous les conteneurs
–
●
Suppression de tous les conteneurs
–
●
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Inspection d'un conteneur
–
docker inspect [conteneurID ou nom]
–
Résultat sous une forme JSON
●
Adresse TCP/IP
Gestion des images (2)
●
Liste des images
–
●
●
Obtention d'une image
–
docker run [option] [image]
–
docker pull [image]
Suppression d'une image
–
●
docker images
docker rmi [imageID]
Suppression de toutes les images
–
docker rmi $(docker images -a -q)
Création d'une image (1)
●
Obtention d'une image de base
–
●
●
docker run -i -t [image] /bin/bash
Installation des services et applications
–
# yum install
–
# scp
–
# wget
Sortie du mode terminal par exit
Création d'une image (2)
●
Sauvegarde du conteneur créé dans une image
intermédiaire
–
●
●
Configuration du ficher Dockerfile
Construction de l'image finale à l'aide du fichier
Dockerfile
–
●
docker commit [containeurID] [nom image]
docker build -t=''[nom image]'' .
Transfert d'une image locale dans le Docker Hub
–
docker push [nom image]
Exemples de fichier Dockerfile
# dockerfile pour la creation d'une image fedora avec le service SSH
FROM fedora:latest
RUN yum -y install openssh openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:dockeradmin' | chpasswd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
# dockerfile pour la creation d'une image wildfly avec ssh
FROM lecoz/wildflysshsiolapie:prefinal
EXPOSE 22 8080 9990
CMD /run.sh && tail -F /var/log/wildflylog
Récupération d'espace disque(1)
●
●
Constat
–
Les conteneurs Docker ne sont pas supprimés après
leur arrêt
–
Les images téléchargées sur une machine y restent
stockées même si inutilisées
–
Les volumes associés aux conteneurs ne sont pas
toujours supprimés
Solution
–
Par des commandes et une image Docker
Récupération d'espace disque(2)
●
Suppression des conteneurs arrêtés
–
●
Suppression des images non utilisées
–
●
docker rm -v $(docker ps -a -q -f status=exited)
docker rmi $(docker images -f "dangling=true" -q)
Suppression des volumes restants
–
Utilisation de l'image Docker (Docker Hub):
●
martin/docker-cleanup-volumes
docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker
–rm martin/docker-cleanup-volumes
Lien Docker
●
Possibilité de lier les conteneurs entre eux.
●
Permet de faire abstraction des adresses TCP/IP.
●
●
Un conteneur lié à un autre voit son fichier /etc/hosts
modifié (adresse TCP/IP nom du conteneur).
Commandes :
–
docker run -d --name nom [imageA]
–
docker run -d --link nom:nom [imageB]
Correspond au nom donné à
la commande précédente
Le lien peut avoir un nom (alias)
interne au conteneur différent
Volumes Docker
●
●
●
Possibilité de monter un volume ou un fichier local
dans un conteneur.
Tout ce qui est modifié par le conteneur est visible
au niveau local et persistant.
Volume local
Commande :
–
Volume Docker
docker run -d -v [/.../répertoire]:[/.../répertoire] [image]
Conteneur
Système d'exploitation
volume
volume
Docker et la problématique réseau
●
●
Un conteneur Docker peut être accédé depuis d'autres
machines que celle qui l'héberge
Plusieurs solutions
–
Exposition publique des ports de service
●
A la condition d'avoir des services exposés par
la commande EXPOSE dans le Dockerfile
–
Bind de la passerelle Docker sur l'interface
réseau du host
–
Adressage fixe des conteneurs dans le réseau
du host ou un réseau virtuel inter-hosts
●
Outils pipework, weave
Solution ports publics (1)
●
Commande pour rendre tous les services d'un
conteneur publics
–
docker run -d -P [image]
–
Docker crée des ports dans l'intervalle 49153
à 65535 sur le host et les mappe vers les ports
du conteneur
●
Tous les réseaux
peuvent accéder
0.0.0.0:49153-->1530/tcp
port sur le host Linux
port du conteneur Docker
Solution ports publics (2)
●
Commande pour rendre le service d'un conteneur
public avec choix du numéro de port
–
docker run -d -p [port:port] [image]
–
Exemple :
●
docker run -d -p 1530:1530 lecoz/derby
port sur le host Linux
port du conteneur Docker
Solution ports publics (3)
●
Accès au(x) service(s) depuis une machine sur le réseau
–
Avec l'adresse TCP/IP du host qui héberge
le conteneur Docker
●
●
docker run -d -p 8080:8080 lecoz/tomcat
Accès par http://192.168.0.20:8080
adresse du host Linux
●
docker run -d -p 8080:8080 -p 9990:9990
lecoz/wildfly
plusieurs ports possibles
Composition de services
●
Docker propose un outil de composition de services
–
●
Docker Compose
Cet outil permet de composer une unité de service à partir
de plusieurs conteneurs
–
Chaque composition masque la complexité du réseau
de conteneurs
–
Chaque composition devient l'interface d'administration
(surveillance des statuts, commandes, journalisation)
–
Chaque composition peut être gérée par une seule
commande (start, stop, up, etc)
Clusters Docker
●
●
Des conteneurs Docker peuvent fonctionner sur plusieurs
machines physiques et constituer une seule infrastructure
Il existe deux solutions
–
●
Docker Swarm
–
●
Docker Swarm et Kubernetes
C'est la solution native de clustering Docker. Elle permet de
constituer un virtual host à partir de plusieurs machines
physiques hébergeant des conteneurs Docker.
Kubernetes
–
C'est la solution Google pour le clustering Docker
(regroupement de conteneurs, load balancing, etc).
–
Orientation système distribué
Les bénéfices apportés par Docker
●
Déploiement et test continuel.
–
Même environnement en développement et en production.
●
●
Environnement standardisé et contrôle de version.
–
Les conteneurs se comportent comme des dépôts GIT.
●
●
Changement d'images et contrôle de version.
Isolation.
–
●
Chaque conteneur possède ses propres dépendances.
Les conteneurs sont isolés les uns des autres car autonomes
en terme de dépendances et de ressources
Sécurité.
–
Aucun accès aux processus des autres conteneurs (CPU,
réseau). Montage de /proc et /sys en read only.
Conclusion
●
Docker est d'un usage très simple.
●
Docker est bien adapté au développement logiciel
–
●
●
●
●
Installation, suppression, mise à jour,
déploiement, test, supervision.
Docker est donc une plateforme de choix pour
l'approche DevOps.
Il permet de facilement créer des images de
conteneur à partir d'autres images (décoration).
Docker s'intègre dans le Cloud (Amazon EC2, Google CE,
OpenStack, IBM BlueMix, MicroSoft Azure, etc).
Docker est un vecteur d'intégration.