Docker
Imane chlioui
Introduction
Il permet d’automatiser le déploiement d’applications et de leurs dépendances dans
différents conteneurs isolés.
Il a été développé par Solomon Hykes à la base comme projet interne de DotCloud
en tant qu’évolution de solutions open-source déjà existantes au sein de la société.
Docker a été distribué en open-source la première fois le 13 mars 2013. Début 2017,
il y a 1600 contributeurs sur le Github de l’application.
Lexique
Conteneur : Image exécutable d’un environnement complet incluant code,
librairies, outils et configuration
Image : template de conteneur en read-only contenant un systeme de base et une
application.
Docker HUB : Dépôt public d’images mises à disposition par Docker
DockerHub ([Link]
Dockerfile : fichier texte de description d’une image
Lexique
Docker Compose : fichier texte (yaml) de description d’un ensemble de conteneurs
Docker Machine : Outil de déploiement des hôtes Docker sur différentes plateformes
(Mac, Windows) : [Link]
([Link]
Orchestrateur : gère un pool de ressources serveurs ( Swarm, Kubernetes, Mesos,
Rancher…)
Registry : Dépôt privé d’images Docker
Docker
Il s’agit d’une plateforme logicielle open source permettant de
Créer,
Déployer
Gérer des containers d’applications virtualisées sur un système d’exploitation.
Chaque container exécuté partage les services du système d’exploitation.
Initialement créé pour fonctionner avec la plateforme Linux, Docker fonctionne
désormais avec d’autres OS tels que Microsoft Windows ou Apple macOS
Docker
Docker est composé de trois éléments :
le daemon Docker qui s’exécute en arrière-plan et qui s’occupe de gérer les
conteneurs (Containerd avec runC)
une API de type REST qui permet de communiquer avec le daemon
Le client en CLI (command line interface) : commande docker
Par défaut, le client communique avec le daemon Docker via un socket Unix
(/var/run/[Link]) mais il est possible d’utiliser un socket TCP.
Conteneur
Il s’agit d’un ensemble de processus logiciels léger et indépendant regroupant tous les
fichiers nécessaires à l’exécution des processus:
• Code
• Runtime
• Outils système
• Bibliothèque
• Paramètres
Ils peuvent être utilisés pour exécuter des applications Linux ou Windows.
les containers se partagent le même noyau de système d’exploitation et isolent les
processus de l’application du reste du système.
Qu’est ce que docker vous permet de
faire?
Proposer/diffuser des applications dans un environnement maitrisé (Docker/Dockerfiles)
Problèmes de versions et de dépendances pour une application
Versions de dépendances : Version spécifique d’OS,
installations personnelles ...
Proposer un package binaire universel
Documenter la procédure d’installation pour soi-même ou les curieux
⇒ Répétabilité, consistance
Déployer un ensemble d’applications (docker-compose)
Description du fonctionnement d’un ensemble de services et de leurs interactions
Par exemple: Apache + PHP + Mariadb + Redis
Passage à l’échelle d’un ensemble d’applications
(docker-compose/swarm) : multi-hôtes
Augmenter le nombre de service lancé avec répartition de charge entre plusieurs machines.
Docker File
• Utiliser par Docker pour créer des containers.
•C’est un fichier texte, qui contient toutes les commandes que l’utilisateur va faire
pour assembler l’image
•Construit via la commande « docker build »
Docker File
Les commandes que doit contenir un dockerfile sont les suivantes :
ADD Copie un fichier de l’hôte vers le conteneur
CMD Définit les commandes par défaut à exécuter, ou à passer à ENTRYPOINT
ENTRYPOINT Définit le point d’entrée d’une application dans le conteneur
ENV Définit les variables d’environnement (Exemple : “clé = valeur”)
EXPOSE Expose un port du conteneur vers l’hôte (fonctionne de la même manière que la commande
“docker run -p”)
FROM Définit l’image à utiliser
MAINTAINER Définit l’auteur du fichier
Docker File
RUN Démarre une commande à l’intérieur du conteneur
USER Définit l’utilisateur pouvant exécuter l’image
VOLUME Monte un dossier de l’hôte sur le conteneur
WORKDIR Définit le dossier pour les directives CMD à exécuter
LABEL Ajoute des metadata à une image Docker
COPY Copie les fichier de [src] et les ajoute au chemin [dest]
ONBUILD Ajoute un déclencheur pour que l’instruction soit exécutée plus tard.
Docker compose
le Docker Compose est un outil permettant de faciliter la gestion des applications
Docker à conteneurs multiples, comme :
• Démarrer, arrêter et reconstruire des services
• Afficher le statut des services en cours d'exécution
• Diffuser la sortie des logs des services en cours d'exécution
• Exécuter une commande unique sur un service
• etc ...
Docker compose
Les commandes que doit contenir un [Link] sont les suivantes :
Version: dépend de la version du moteur Docker installé
Services: Les services ne sont en réalité que des conteneurs
Image: l’image du conteneur
Container_name: nom du contenneur
Restart: le comportement du conteneur en cas d'arrêt du processus ;
Volumes: les points de montage entre le système hôte et les conteneurs ;
Environnement: surcharger les variables d’environnement à utiliser.
Ports: les ports disponibles entre la machine host et le conteneur.
Depends_on: indique les dépendances du service
Build: le Dockerfile source pour créer l'image du conteneur ;
Volume: Pour définir le volume à utiliser
Network: Pour définir un réseau
Docker-compose