Docker Presentation

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 29

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

Docker CLI

Ligne de commande
Base
Serveur
De
Docker Daemon WEB
Données

SYSTÈME D'EXPLOITATION

Entrée/Sortie
CPU MÉMOIRE
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
– Intégration continue
– Les architectures logicielles sont aujourd'hui
très complexes
● 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)
● Cloud
– Les conteneurs peuvent être déployés dans le cloud
comme solution PAAS.
● 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 :
– docker run -i -t [image] /bin/bash
● En arrière plan :
– 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
– docker ps
● Liste des conteneurs actifs et arrêtés
– docker ps -a
● Arrêt d'un conteneur
– docker stop [nom] ou [conteneurID]
● Suppression d'un conteneur
– docker rm [nom] ou [conteneurID]
Gestion des conteneurs (2)
● Arrêt de tous les conteneurs
– docker stop $(docker ps -a -q)
● Suppression de tous les conteneurs
– 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
– docker images
● Obtention d'une image
– docker run [option] [image]
– docker pull [image]
● Suppression d'une image
– 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
– docker commit [containeurID] [nom image]
● Configuration du ficher Dockerfile
● Construction de l'image finale à l'aide du fichier
Dockerfile
– 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
– docker rm -v $(docker ps -a -q -f status=exited)
● Suppression des images non utilisées
– 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é à Le lien peut avoir un nom (alias)


la commande précédente 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 Volume Docker
● Commande :
– docker run -d -v [/.../répertoire]:[/.../répertoire] [image]

Conteneur volume

Système d'exploitation 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
● 0.0.0.0:49153-->1530/tcp

Tous les réseaux port sur le host Linux port du conteneur Docker
peuvent accéder
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 et Kubernetes
● Docker Swarm
– 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.
● Chaque conteneur possède ses propres dépendances.
● 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.
– 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.

Vous aimerez peut-être aussi