0% ont trouvé ce document utile (0 vote)
0 vues61 pages

docker

Le document présente Docker, un outil de virtualisation qui permet de déployer des applications dans des conteneurs, offrant ainsi une abstraction et une automatisation au niveau du système d'exploitation. Il explique également les différences entre les machines virtuelles et Docker, ainsi que les concepts fondamentaux tels que les images, les conteneurs et les registres. Enfin, il fournit des instructions sur la gestion des conteneurs et des images, y compris la création, le téléchargement et la suppression.

Transféré par

minabintmina
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues61 pages

docker

Le document présente Docker, un outil de virtualisation qui permet de déployer des applications dans des conteneurs, offrant ainsi une abstraction et une automatisation au niveau du système d'exploitation. Il explique également les différences entre les machines virtuelles et Docker, ainsi que les concepts fondamentaux tels que les images, les conteneurs et les registres. Enfin, il fournit des instructions sur la gestion des conteneurs et des images, y compris la création, le téléchargement et la suppression.

Transféré par

minabintmina
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

VIRTUALISATION D’ENVIRONNEMENT : DOCKER

DOCKER

• Agenda

– Présentation du Docker
– Travailler avec des conteneurs docker
– Travailler avec des images docker

26/11/2024 93
Présentation de Docker

26/11/2024 94
Qu'est-ce la virtualisation ?

• Ensemble de techniques et d’outils permettant de :


– faire tourner plusieurs systèmes d’exploitation sur un serveur
– Partager des ressources
• En respectant deux principes fondamentaux :
– Le cloisonnement : chaque système d’exploitation a un fonctionnement
indépendant sans aucune interférence mutuelle
– La transparence : le fonctionnement en mode virtualisé ne modifie pas le
fonctionnement du système ni des applications

26/11/2024 95
Utilité de la virtualisation ?

• Chaque application a ses propres besoins de dépendances.


– Une application java nécessite une JDK installée,
– Une application nodejs nécessite la plateforme nodejs installée et ainsi de suite.
• Les langages de programmation (java, nodejs et python) ont tous de
nombreuses versions: quelle version faut-il vraiment installer pour une
application
• Une simple application web écoute sur le port tcp 80 et peut avoir besoin à
des ressources locales sur la machine: une instance de la même application
web se heurterait au port tcp
• La réponse à toutes ces questions concerne les machines virtuelles et les
conteneurs.

26/11/2024 96
Utilité de la virtualisation ?

• Le développeur d’applications peut exporter l’application et toutes ses


dépendances installées dans une machine virtuelle ou un conteneur
• La machine ou le conteneur fournit un environnement adéquat pour
exécuter l’application sur le serveur

Nous pouvons exécuter plusieurs instances de l’application sur le


même serveur sans entrer en conflit d’adresses ni de ressources.

26/11/2024 97
Machines virtuelles vs Docker
Rest API
CLI Dockerfile

Containers
26/11/2024 98
Machines virtuelles

• Une machine virtuelle est un ensemble de systèmes d’exploitation qui


s’exécutent les uns sur les autres en utilisant un logiciel appelé
hyperviseur (vmware, oracle virtual box et ms hyper-v)
• L’hyperviseur simule le matériel tel que la mémoire et le cpu pour la
machine virtuelle
• On peut exécuter de nombreuses instances de machines virtuelles sur
une seule machine physique

26/11/2024 99
Hyperviseur vs Docker

26/11/2024 100
Docker : Présentation

• Docker est un projet open-source qui automatise le déploiement


d'applications à l'intérieur de conteneurs de logiciels en fournissant une
couche supplémentaire d'abstraction et d'automatisation de la
virtualisation au niveau du système d'exploitation

• Pris en charge par plusieurs plates-formes cloud, notamment Amazon


EC2, Google Compute Engine et Rackspace

26/11/2024 101
Editions Docker : CE et EE

26/11/2024 102
Version de Docker CE et EE

26/11/2024 103
Docker : un LXC augmenté

Définition de LXC :
• LXC est un ensemble d'outils en espace utilisateur permettant de
contrôler les LinuX Containers, un mécanisme léger de système virtuel.

• LXC implémente des systèmes virtuels complets en partant de chroot,


en ajoutant des mécanismes de gestion des ressources et d'isolation à
l'infrastructure de gestion de processus existante de Linux

• Les LXC implémentent la gestion de ressources et leur isolation via


l’appel système clone et newinstance

26/11/2024 104
Docker : un LXC augmenté

• L'idée consiste à utiliser LXC comme base, puis à ajouter des capacités
de niveau supérieur
• Docker autorise la portabilité entre machines (qui exécutent aussi
Docker) et permet ainsi à une application et à ses composants d'exister
en tant qu'objet mobile unique.
• Avec LXC, déplacer une application sur une autre machine peut
introduire des différences susceptibles d'empêcher le conteneur de
l'application de s'exécuter.

26/11/2024 105
Architecture du docker

26/11/2024 106
Terminologie Docker

• Architecture Client/Serveur :
– Serveur = moteur ou daemon,
– Client = docker CLI
• Le client Docker communique avec le Docker daemon pour construire et gérer les conteneurs
• Le client Docker et le daemon Docker peuvent tourner sur la même machine, comme sur des
machines différentes
– Api REST qui permet de communiquer avec le daemon
• Docker File : C’est un fichier contenant l’ensemble des
commandes pour construire une image. Ce fichier
descriptif permet de construire automatiquement des
images.
26/11/2024 107
Terminologie Docker

• Image : Ensemble des couches


• Conteneur : Elément manipulable et accessible en écriture
• Registre : Une bibliothèque où les images sont stockées et peuvent être
extraites pour générer des conteneurs afin d’exécuter les services ou les
applications web
• 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]
• Orchestrateur : gère un pool de ressources serveurs ( swarm, kubernetes,
mesos, rancher…)

26/11/2024 108
Docker : Architecture

26/11/2024 109
Docker : Architecture

26/11/2024 110
Docker : Images

• Les images sont un modèle binaire en


lecture seule utilisé pour créer des
conteneurs (Une image est une
représentation statique de
l’application ou du service, de sa
configuration et de ses dépendances).

26/11/2024 111
Docker : Images

• Une image contient l’application ou le service, sa configuration et de ses


dépendances

• L’image contient également des métadonnées décrivant les capacités et les


besoins du conteneur.

• Les images sont utilisées pour stocker, déployer et exécuter des applications.

• Utilisé pour générer des conteneurs

26/11/2024 112
Docker : Container

• Un conteneur est une instance active (started) ou inactive (stopped) d’une


image
• Un conteneur enveloppe l’application d’un logiciel dans une boîte invisible
avec tout ce dont il a besoin pour s’exécuter (système d'exploitation, code de
l'application, runtime, outils système et les librairies).
• Les conteneurs sont légers, portables et permettent aux développeurs de
créer, déployer et exécuter efficacement des applications distribuées.
• Les conteneurs permettent à une application d’être empaquetée et déplacée
facilement, augmentant ainsi la simplicité d'une infrastructure.

26/11/2024 113
Docker : Registre (Registry)

• Les registres Docker sont des services qui fournissent des emplacements
à partir desquels vous pouvez stocker et télécharger des images.

26/11/2024 114
Labs

Installation Docker CE

26/11/2024 115
Travailler avec des conteneurs
docker

26/11/2024 116
Rechercher une image
• Les images sont disponibles dans un registre Docker privé ou publique

# docker search motif

# docker search --filter is-official=true --filter stars=3 fedora

# docker search --help

26/11/2024 117
Télécharger une image
# docker pull NAME[:TAG]

# docker pull image:tag Télécharger un version spécifique d’une image

# docker pull --all-tags centos Télécharger toutes les versions d’une image

# docker pull --help


26/11/2024 118
Lister des images

• Les images peuvent être extraites depuis un registre, importées via la


commande docker ou créées via des Dockerfiles.
# docker images

# docker images --filter "name=nginx"

# docker images --help


26/11/2024 119
Démarrer un conteneur
# docker run [ OPTIONS ] IMAGE[:TAG] [COMMAND] [ARG...]

• -i démarre le conteneur en mode interactif


• -t alloue un pseudo-tty et l'attache à l'entrée standard
• -d : démarrer le conteneur en arrière-plan
• --rm : Supprimer le conteneur une fois terminé
• --read-only : interdit la modification sur le système de fichiers racine
# ID=$(docker create -t -i centos bash)
# docker start -a -i $ID
26/11/2024 120
Lister des conteneurs

• Nous pouvons lister les conteneurs en cours d'exécution et arrêtés.


# docker ps [ OPTIONS ]

# docker ps –a Lister les conteneurs en cours d'exécution et arrêté

# docker ps –aq Renvoyer uniquement les ID de conteneur de tous les


conteneurs

# docker ps --help

26/11/2024 121
Consulter les logs des conteneurs

• Si le conteneur émet des journaux ou une sortie sur STDOUT/STDERR,


nous pouvons les obtenir sans nous connecter au conteneur.
# docker logs [-f|--follow[=false]][-t|--timestamps[=false]] CONTENEUR

Lister les conteneurs en cours d'exécution et arrêté

# docker logs –t -f

# docker logs --help


26/11/2024 122
Arrêter un conteneur
# docker stop [-t|--time[=10]] CONTAINER [CONTAINER...]

# docker stop $(docker ps -q)

Arrêter les conteneurs


en cours d'exécution

# docker stop --help

26/11/2024 123
Supprimer un conteneur

• Nous pouvons supprimer un conteneur de manière permanente, mais


avant cela, nous devons arrêter le conteneur ou utiliser l'option forcer.
# docker rm [ OPTIONS ] CONTAINER [CONTAINER...]

rm
Lister les conteneurs en cours d'exécution et arrêté

-f : Forcer la suppression
# docker rm –help

26/11/2024 124
Définition de la stratégie de redémarrage
sur un conteneur
# docker run --restart=POLICY [ OPTIONS ] IMAGE[:TAG] [COMMAND] [ARG...]

Vous avez le choix entre trois stratégies de redémarrage:


– no: ne pas démarrer le conteneur s'il meurt
– on-failure: redémarrer le conteneur s'il échoue avec un code de sortie
différent de zéro Lister les conteneurs en cours d'exécution et arrêté

– always: redémarrer toujours le conteneur sans se soucier du code retour

# docker run --restart=on-failure:3 -d -i -t fedora /bin/bash

ne redémarrer le conteneur que trois fois, en cas d'échec.


26/11/2024 125
Exposer des ports

Exposez un port ou une plage de ports

# docker run --expose=PORT [ OPTIONS ] IMAGE[:TAG] [COMMAND] [ARG...]

Lister les conteneurs en cours d'exécution et arrêté

26/11/2024 126
Exécuter un nouveau processus dans un
conteneur en cours d'exécution
• L'option exec permet d’injecter un nouveau processus dans un
conteneur en cours d'exécution.
# docker exec [-d|--detach[=false]] [--help] [-i|--interactive[=false]]
[-t|--tty[=false]] CONTAINER COMMAND [ARG...]

# docker exec --help

26/11/2024 127
Examiner un container

Examiner les processus en cours d' exécution à l'intérieur d’un container :


# docker top [OPTIONS] NAME|ID

Examiner les statistiques d’utilisation (cpu, ram, net, bloc i/o...) pour un ou
plusieurs containers en cours de fonctionnement :
# docker stats [OPTIONS] [NAME|ID]

26/11/2024 128
Examiner un container

Lors du débogage, de l'automatisation, etc., nous aurons besoin des détails de


configuration du conteneur. Docker fournit la commande inspect pour les
obtenir facilement utilisant le format Go :
# docker inspect [OPTIONS] NAME|ID [NAME|ID...]

# docker inspect --format='{{.[Link]}}' $ID

# docker inspect --help

26/11/2024 129
Labs

Manipulation des conteneurs avec le CLI

26/11/2024 130
Travailler avec des images docker

26/11/2024 131
Créer un compte avec Docker Hub

• Il s'agit d'un registre public sur lequel vous pouvez héberger des images à la fois
publiques et privées, les partager et collaborer avec d'autres.
• Il est intégré à GitHub, Bitbucket et peut déclencher des builds automatisés.
• Un référentiel peut contenir différentes versions d'une image.
• Par défaut, un référentiel privé + plusieurs référentiels publics
[Link]
# docker login

26/11/2024 132
Créer une image à partir du conteneur
(1/2)
Il existe plusieurs façons de créer des images, l'une consiste à valider
manuellement des couches et l'autre à utiliser Dockerfiles.
# docker commit -a|--author[=""] -m|--message[=""] CONTAINER [REPOSITORY[:TAG]]

# docker commit -a "JEMAL" -m "Centos Avec HTTPD" c83ff3f4c9e2 jmlhmd/centos:httpd

26/11/2024 133
Créer une image à partir du conteneur
(2/3)

26/11/2024 134
Créer une image à partir du conteneur
(3/3)
Pour rechercher des fichiers modifiés depuis le démarrage du conteneur:
# docker diff Conteneur

Liste des préfixes avant chaque entrée de la sortie:


• A: C'est pour dire qu’un fichier / répertoire
a été ajouté
• C: C'est pour dire qu’un fichier / répertoire
a été modifié
• D: C'est pour dire qu’un fichier / répertoire
a été supprimé

26/11/2024 135
Publication d'une image dans le registre

# docker push NAME[:TAG] Public (Docker hub)

# docker push [REGISTRYHOST/][USERNAME/]NAME[:TAG] Privé

# docker push --help

26/11/2024 1 136
3
Historique d'une image
# docker history [ OPTIONS ] IMAGE

# docker inspect --format='{{.Comment}}’ jemal/centos:httpd

# docker history --help

26/11/2024 137
Supprimer une image
# docker rmi [ OPTIONS ] IMAGE [IMAGE...]

# docker stop `docker ps -q` Arrêter tous les conteneurs

# docker rm `docker ps -a -q` Supprimer tous les conteneurs

# docker rmi `docker images -q` Supprimer toutes les images

26/11/2024 138
Exporter/Importer une image (1/2)
# docker save [-o|--output=""] IMAGE [:TAG] Image

# docker export CONTAINER > [Link] Conteneur

# docker import URL|- [REPOSITORY[:TAG]]

26/11/2024 139
Exporter/Importer une image (2/2)

Docker export = docker commit + docker save

26/11/2024 140
Création d'images à l'aide de Dockerfile

• Les images Docker peuvent être créées de 2 manières différentes:


– En travaillant sur un conteneur, puis en le sauvegardant en exécutant la
commande docker commit
– En modifiant un fichier Docker dans le système de fichiers hôte et en exécutant la
commande docker build

26/11/2024 141
Création d'images à l'aide de Dockerfile

• Exemple :
FROM centos:latest
MAINTAINER JEMAL
CMD date
# docker build .

L’option -t spécifie le nom du référentiel


ou de la balise pour l'image

26/11/2024 142
Le format du Dockerfile

• FROM : La première instruction de tout Dockerfile, qui définit l'image de


base pour les instructions suivantes. [OBLIGATOIRE]
FROM <images>:<tag>
FROM ubuntu Par défaut, le tag est latest
FROM devops/ubuntu-ssh:16.04
• LABEL : En utilisant l'étiquette, vous pouvez organiser les images de
manière appropriée. Ceci est utile pour définir l'adresse du responsable,
le nom du fournisseur, la version de l'image, la date de sortie, etc.
LABEL maintainer= “jemal@[Link]" LABEL LABEL maintainer= "jemal@[Link]" \
vendor= “FR" vendor= "FR" \
LABEL [Link]="0.0.1" [Link]="0.0.1"
46
26/11/2024 143
Le format du Dockerfile

• MAINTAINER: définit l'auteur de l'image générée


MAINTAINER <name>
• RUN : exécuter n'importe quelle commande sur l'image pendant la
construction
RUN <command> <param1> ... <pamamN> Comme shell (sh -c)
RUN ["executable", "param1",...,"paramN" ] Comme exécutable
RUN apt-get update
RUN apt-get install -y apache2 automake build-essential
curl
RUN apt-get update && apt-get install -y \ automake \
build-essential \ curl \
26/11/2024 144
Le format du Dockerfile

• CMD : utilisé pour exécuter le service ou le logiciel contenu par votre


image, ainsi que les éventuels arguments lors du lancement du
conteneur.
CMD ["executable", "param1",...,"paramN" ] Comme exécutable

CMD <command> <param1> ... <pamamN> Comme shell (sh -c)

CMD ["param1", ... , "paramN"] fournir des arguments à ENTRYPOINT.

• Exemple: pour démarrer le service Apache lors du lancement du


conteneur
CMD ["apache2ctl", "-D", "FOREGROUND"]

26/11/2024 145
Le format du Dockerfile

• ENTRYPOINT : Spécifier une commande ou un exécutable comme point


d’entrée du conteneur
ENTRYPOINT ["executable", "param1",...,"paramN"] Comme exécutable

ENTRYPOINT <command> <param1> ... <pamamN> Comme shell (sh -c)

ENTRYPOINT [Link]

• WORKDIR : définit le répertoire de travail pour les instructions


RUN, CMD et ENTRYPOINT
WORKDIR <PATH>

WORKDIR /opt
26/11/2024 146
Le format du Dockerfile

• ADD : copier des fichiers et des répertoires du système hôte vers l'image
pendant la construction.
ADD <src> <dest>

ADD ["<src>"... "<dest>"] Pour le chemin contenant des espaces

ADD [Link] /[Link]

• COPY : Similaire à ADD, copier les fichiers de la source vers la


destination
COPY ["<src>"... "<dest>"]

COPY html/* /var/www/html/


COPY *.conf /etc/apache2/sites-available/
26/11/2024 147
Le format du Dockerfile

• VOLUME: créer un point de montage avec le nom donné et le marquera


comme point de montage du volume externe
VOLUME ["/data"]

VOLUME /data

• EXPOSE : exposer les ports réseau du conteneur sur lesquels il


écoutera au moment de l'exécution
EXPOSE <port> [<port> ... ]

EXPOSE 80
EXPOSE 443

26/11/2024 148
Le format du Dockerfile

• ENV : Définir des variables d'environnement pour un service spécifique


du conteneur.
ENV <key> <value>

ENV PATH=$PATH:/usr/local/pgsql/bin/
ENV CONT_IMG_VER=v1.0.0

• USER : Définir le nom d'utilisateur (ou UID) à utiliser lors de


l'exécution de l'image et pour toutes les instructions RUN, CMD et
ENTRYPOINT
USER <username>/<UID>

USER patrick

26/11/2024 149
Exemples du Dockerfile (1/2)

• Affichage d’un FROM ubuntu:14.04


message en entrée ENTRYPOINT ["/bin/echo"]

FROM centos:7
• Empaquetage du Maintainer jmlhmd@[Link]
serveur Apache RUN yum update -y && yum clean all
dans un conteneur RUN yum install httpd -y && yum clean all

RUN echo "Ceci est un exemple pour créer une image basé \
sur Centos avec Le serveur Web pré-installé" \
> /var/www/html/[Link]

ENTRYPOINT apachectl "-DFOREGROUND"

26/11/2024 150
Exemples du Dockerfile (2/2)

• Empaquetage
d'une application FROM ubuntu:14.04
Flask dans un
RUN apt-get update
conteneur RUN apt-get install -y python
RUN apt-get install -y python-pip
RUN apt-get clean all
RUN pip install flask

ADD [Link] /tmp/[Link] EXPOSE 5000

CMD ["python","/tmp/[Link]"]

26/11/2024 151
Labs

Manipulation des Dockerfiles

26/11/2024 152

Vous aimerez peut-être aussi