Vous êtes sur la page 1sur 40

Introduc*on

au « Docker »

Un conteneur Linux, qu'est-ce que c'est ?

•  Un conteneur Linux est une enveloppe virtuelle qui permet


de packager une application avec tous les éléments dont
elle a besoin pour fonctionner :
•  fichiers source, runtime, librairies et dépendances.

•  Les conteneurs sont isolés du reste du système. Ils sont


packagés en un ensemble cohérent et prêt à être déployé
sur un serveur et son OS.
•  portables et fonctionnent de la même manière dans les
environnements de développement, de test et de production.
•  déplacer l’application jusqu'en production sans aucun effet
secondaire.

05/03/20 2
Conteneurs versus machines virtuelles

05/03/20 Wajdi LouaA - EISINT 2012 3


05/03/20 4
Conteneurs versus machines virtuelles
•  La virtualisation permet aux systèmes d'exploitation
(Windows ou Linux) de s'exécuter simultanément sur un
seul système matériel.
•  Les conteneurs partagent le même noyau de système
d'exploitation et isolent les processus de l'application du
reste du système.
•  n'installe pas d'OS à proprement parler, mais un rootfs (le / d'un
unix/Linux) qui est appelé image, qui contient les bibliothèques
et les binaires nécessaires

05/03/20 5
Avantages et inconvénients des
conteneurs
•  Avantages
•  Créer un conteneur est vraiment plus rapide que lancer une VM.
•  Mais une VM offre une meilleure isolation.

•  Les images de conteneurs Linux permettent d'assurer la portabilité et le contrôle des


versions des applications.
•  Les développeurs ont ainsi la garantie que ce qui fonctionne sur leur ordinateur fonctionnera aussi dans l'environnement de
production.

•  Un conteneur Linux mobilise moins de ressources qu'une machine virtuelle.

•  Inconvénients
•  doivent être compatibles avec le système sous-jacent => ce n'est pas cross-platform.
•  les OS Linux ARM exécutent des conteneurs Linux ARM, les OS Linux x86 exécutent des conteneurs Linux
x86 et les OS Windows x86 exécutent des conteneurs Windows x86.

05/03/20 6
Qu'est-ce que Docker ?
•  Docker est un outil qui peut empaqueter une application
et ses dépendances dans un conteneur virtuel, qui
pourra être exécuté sur n'importe quel serveur Linux.

•  Docker étend le format de conteneur Linux standard,


LXC, avec une API de haut niveau fournissant une
solution de virtualisation qui exécute les processus de
façon isolée.

05/03/20 7
Docker, pour quoi faire ?
•  Le déploiement : puisque Docker a pour vocation de conteneuriser des
applications, il devient simple de créer un conteneur pour une application, et
la dispatcher.
•  Un conteneur qui fonctionne sur une machine avec une distribution X,
fonctionnera sur une autre machine avec une distribution Y.

•  Le développement : cela permet de facilement avoir le même


environnement de développement qu'en production.
•  Cela permet également de pouvoir sur la même machine, tester avec plusieurs
versions d'un même logiciel.

•  Installer des applications : étant donné que Docker propose une multitude
d'outils, il est facile et rapide d'installer une application:
•  bien souvent une seule ligne de commande suffit pour avoir par exemple notre
nextcloud fonctionnel.

05/03/20 8
Docker : structure et foncAons
•  La plateforme open source repose sur trois composants
de base : pour faire fonctionner les conteneurs, les
utilisateurs ont simplement besoin du
•  Docker-Image
•  Docker-Hub
•  Docker-Engine (Moteur Docker)

05/03/20 9
Image Docker
•  Tout comme les machines virtuelles, les conteneurs Docker sont basés sur
des images.
•  Une image est un modèle en lecture seule qui conAent toutes les instrucAons
dont le moteur Docker a besoin afin de créer un conteneur Docker.
•  Une image portable d’un conteneur est décrite comme image Docker sous la
forme d’un fichier texte, on parle alors d’un Dockerfile.
•  Si un conteneur doit être démarré sur un système, un paquet avec l’image
correspondante est chargé en premier, si elle n’existe pas localement.
L’image chargée fournit le système de fichiers requis pour l’exécuAon, y
compris tous les paramètres..

05/03/20 10
Qu'est-ce que le docker Hub ?
•  Le Docker-Hub est un registre basé sur le Cloud pour les référenAels
(dépôts) de logiciels, en d’autres termes une sorte de bibliothèque pour
les images Docker.
–  un store ou les uAlisateurs de docker peuvent partager leurs images.
•  Plusieurs images sont disponibles (des images de base et des images
préconfigurées)
–  Les images de base officielles ont été créées par l'équipe de développement de docker.
•  Le service en ligne est divisé en un espace public et un espace privé.
–  L’espace public offre aux uAlisateurs la possibilité de télécharger leurs propres images et
de les partager avec la communauté.
–  Les images téléchargées dans une zone privée du registre ne sont pas accessibles au
public et peuvent, par exemple, être partagées au sein de l’entreprise ou avec des amis
et des connaissances.
•  Il est accessible via : heps://hub.docker.com

05/03/20 11
Qu'est-ce que le docker Hub ?

Le nom de l'image => Généralement sous la forme USER/IMAGE_NAME, sauf dans le cas d'une image officielle, où
c'est seulement IMAGE_NAME

Le nombre de stars => Le système de notation

Le nombre de pulls => Le nombre de téléchargements

05/03/20 12
Docker-Engine
•  Le cœur du projet Docker est le moteur Docker (Docker-Engine). Il s’agit
d’une applicaAon client-serveur open source, dont la version actuelle est
disponible pour les uAlisateurs sur toutes les plateformes établies.

•  L’architecture de base du Docker-Engine peut être divisée en trois


composants :
–  Daemon avec des foncAons serveur,
•  Le daemon docker s’exécute en arrière-plan sur le système hôte et sert à contrôler le moteur Docker de manière
centralisée. Dans ceee foncAon, il crée et gère toutes les images, conteneurs ou réseaux.
–  Interface de programmaAon (API) basée sur le paradigme de programmaAon REST
•  le REST-API spécifie un ensemble d’interfaces qui permeeent à d’autres programmes de communiquer et de donner
des instrucAons au daemon Docker.
–  Terminal du système d’exploitaAon (Command-Line Interface, CLI) comme interface
uAlisateur (client).
•  Il interagit avec le daemon via l’API REST et permet aux uAlisateurs de le contrôler grâce aux scripts ou aux entrées
uAlisateur.

05/03/20 13
Architecture Docker

-  Docker permet aux utilisateurs de démarrer, d’arrêter et de gérer les conteneurs logiciels directement à partir du
terminal (client).

-  Le daemon (serveur) est adressé à l’aide de la commande Docker et d’instructions comme build (créer), pull
(télécharger) ou run (démarrer).

-  La commande docker build indique au Docker-Daemon de créer une image (ligne pointillée) à partir d’un Dockerfile

-  La commande docker pull (ligne pointillé) permet de télécharger l’image à partir d’un référentiel dans le Docker-Hub

05/03/20 14
Ges*on des images et des conteneurs
Télécharger Docker-Images
•  Vous trouverez l’image whalesay en vous rendant sur la page d’accueil de Docker Hub et en
tapant whalesay dans la barre de recherche à droite du logo de Docker.
•  Dans les résultats de la recherche, cliquez sur la ressource docker/whalesay pour accéder au
Repository public de ceee image.

05/03/20 16
Télécharger Docker-Images
•  Dans la zone d’en-tête de la page, les uAlisateurs trouveront le nom de l’image, la catégorie du
Repository et l’heure du dernier téléchargement (last pushed).

•  Short DescripAon : courte descripAon de la ressource


•  Full DescripAon : descripAon complète, généralement accompagnée d’un mode d’emploi
•  Docker Pull Command : ligne de commande pour télécharger l’image depuis le Repository (pull)
•  Owner : informaAons sur le créateur du Repository
•  Comments : zone de commentaires en bas de page
05/03/20 17
Télécharger Docker-Images
•  Pour télécharger une image, uAlisez la commande docker pull selon le
schéma de base suivant :
–  $ docker pull [OPTIONS] NAME [:TAG|@DIGEST]
•  La commande docker pull indique au daemon de charger une image à parAr
du Repository.
•  Vous déterminez l’image en spécifiant le nom de l’image (NAME).
•  Indiquer au Docker comment exécuter la commande souhaitée (OPTIONS).
•  La spécificaAon des tags (:TAG) et des numéros d’idenAficaAon uniques
(@DIGEST) permeeent de télécharger une version spécifique d’une image.
•  Exemple: $ docker pull docker/whalesay
–  Remarque: Si vous souhaitez démarrer un conteneur, le daemon Docker télécharge
automaAquement les images du référenAel qu’il ne trouve pas sur le système local.

05/03/20 18
Afficher toutes les images du Docker sur le
système local
•  Si vous n’êtes pas sûr d’avoir déjà téléchargé une image spécifique, vous
pouvez charger une vue d’ensemble de toutes les images sur votre système:
–  $ sudo docker image ls

•  La commande docker image donne tout sur les images locales, y compris la
taille du fichier, la balise et l’ID de l’image.

–  Lorsque vous démarrez un conteneur, l’image sous-jacente est téléchargée sous forme de copie à parAr
du référenAel et stockée de façon permanente sur votre ordinateur.
–  Un nouveau téléchargement n’est lancé que si la source de l’image change, par exemple si une version
plus récente est disponible dans le référenAel.
•  Pour supprimer une image: $ docker image rm [nom ou ID Image]:[tag]

05/03/20 19
Démarrer Docker-Images en tant que
conteneurs
•  Pour démarrer une image du docker, uAlisez la commandedocker run selon le
schéma de base suivant :
–  $ docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG...]
•  La seule parAe obligatoire de la commande docker run est le nom de l’image
du docker désiré.
•  D’autres configuraAons opAonnelles peuvent être définies par des arguments
supplémentaires (ARG....).
–  Permeere d’ajouter des uAlisateurs ou de transmeere des variables d’environnement.
•  Exemple: $ docker run docker/whalesay cowsay boo
–  le daemon recherche d’abord l’image désirée dans le répertoire du fichier local. Comme
aucun paquet du même nom n’est trouvé ici, une extracAon du dépôt docker est iniAée.
Ensuite, le démon démarre le programme modifié de cowsay.

05/03/20 20
Afficher tous les conteneurs sur le système

•  Pour afficher une vue d’ensemble de tous les conteneurs exécutés sur le
système, uAliser la commande docker ps en combinaison avec l’opAon --all
(brièvement: -a):
–  $ sudo docker ps –a

•  La sorAe du terminal comprend des informaAons telles que l’ID du conteneur
respecAf, l’image sous-jacente, la commande exécutée lorsque le conteneur a été
démarré, l’heure à laquelle le conteneur respecAf a été démarré et l’état actuel.

05/03/20 21
Démarrer Docker-Images en tant que
conteneurs
•  Pour démarrer une image du docker, uAlisez la commandedocker run selon le
schéma de base suivant :
–  $ docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG...]
•  La seule parAe obligatoire de la commande docker run est le nom de l’image
du docker désiré.
•  D’autres configuraAons opAonnelles peuvent être définies par des arguments
supplémentaires (ARG....).
–  Permeere d’ajouter des uAlisateurs ou de transmeere des variables d’environnement.
•  Exemple: $ docker run docker/whalesay cowsay boo
–  le daemon recherche d’abord l’image désirée dans le répertoire du fichier local. Comme
aucun paquet du même nom n’est trouvé ici, une extracAon du dépôt docker est iniAée.
Ensuite, le démon démarre le programme modifié de cowsay.

05/03/20 22
Stopper, démarrer et supprimer un docker

•  $docker stop (Nom ou ID du conteneur) pour stopper le conteneur.


•  $docker start (Nom ou ID du conteneur) pour démarrer un conteneur
stoppé.
•  $docker rm (Nom ou ID du conteneur) pour supprimer un conteneur stoppé.

05/03/20 23
ManipulaAon des conteneurs
•  démarrons maintenant Nginx (serveur HTTP + reverse proxy) en container et
exposons le port 80 sur le port 8000 de notre machine.:
–  $ docker run -p 8000:80 --name nginx_name -d nginx

05/03/20 24
CréaAon d’une image
•  Une image docker est une succession de couches (layers) qui conAennent une liste de
modificaAons du système de fichiers.
–  On peut faire une analogie avec GIT où chaque layer serait un commit.
•  Au moment de la créaAon d’un container un layer est ajouté au-dessus de ceux de l’image.


05/03/20 25

CréaAon d’images Docker

05/03/20 26
Dockerfile: instrucAons

Les instrucAons de Dockerfile:



•  FROM qui vous permet de définir l'image source ;
•  RUN qui vous permet d’exécuter des commandes dans votre conteneur ;
•  ADD qui permet d'ajouter des fichiers dans votre conteneur ;
•  WORKDIR qui vous permet de définir votre répertoire de travail ;
•  EXPOSE qui permet de définir les ports d'écoute par défaut ;
•  VOLUME qui permet de définir les volumes u*lisables ;
•  CMD qui permet de définir la commande par défaut lors de l’exécuAon de vos
conteneurs Docker.


Exemple d’un Dockerfile
•  FROM debian:9

•  RUN apt-get update -yq \


•  && apt-get install curl gnupg -yq \
•  && curl -sL heps://deb.nodesource.com/setup_10.x | bash \
•  && apt-get install nodejs -yq \
•  && apt-get clean -y

•  ADD . /app/
•  WORKDIR /app
•  RUN npm install

•  EXPOSE 2368
•  VOLUME /app/logs

•  CMD npm run start

05/03/20 28
Dockerfile
•  Le Dockerfile (toujours avec une majuscule) est un fichier qui conAent toutes
les instrucAons pour créer une image, comme des métadonnées
(Mainteneur, label, etc.), ou même les commandes à exécuter pour installer
un logiciel.
•  Chaque instruc*on que nous allons donner dans notre Dockerfile va créer
une nouvelle layer correspondant à chaque étape de la construcAon de
l'image, ou de la receee.

05/03/20 29
Architecture en couche

Ubunt18:latest

05/03/20 30
CréaAon des images Docker
Tutorial:
•  Jusqu’à présent, docker/whalesay uAlise le programme linux
cosway et foncAonne de telle manière qu’il faut meere les mots
dans la bouche de la baleine.
–  & docker run docker/whalesay cowsay boo



•  Cependant, il serait plus intéressant que le script génère
automaAquement de nouvelles sorAes de texte
–  UAliser le programme linux fortunes: générer des citaAons humorisAques

05/03/20 31
Créer des images Docker
Tutorial:
•  Jusqu’à présent, docker/whalesay uAlise le programme linux
cosway et foncAonne de telle manière qu’il faut meere les mots
dans la bouche de la baleine.
–  & docker run docker/whalesay cowsay boo



•  Cependant, il serait plus intéressant que le script génère
automaAquement de nouvelles sorAes de texte
–  UAliser le programme linux fortunes: générer des citaAons humorisAques

05/03/20 32
Créer des images Docker
Tutorial:
•  Créer un répertoire nommé mydockerbuild
–  $ mkdir mydockerbuild
–  $ cd mydockerbuild
•  Dans le rep. “mydockerbuild”, créer un fichier texte déclaraAf
Dockerfile
–  $ nano Dockerfile
•  Écrire un fichier docker :
–  Dockerfile sert de modèle pour votre propre image.
–  Exemple: uAlisez l’image de démonstraAon de docker/whalesay comme modèle.
•  Incluez-le dans votre fichier docker à l’aide de la commande FROM.
•  UAlisez la balise :latest pour pointer vers la dernière version de l’image.
–  FROM docker/whalesay:latest

05/03/20 33
Créer des images Docker
Tutorial:
•  UAlisez la commande suivante pour meere à jour l’index de vos
paquets locaux et installer des fortunes :
–  $ RUN apt-get -y update && apt-get install -y fortunes
•  Vous définissez ensuite une instrucAon CMD
–  $ CMD /usr/games/fortune -a | cowsay
–  => pour afficher la sorAe via le programme cowsay dans le terminal

05/03/20 34
Créer des images Docker
Tutorial:
•  Finalement, Créer une image depuis Dockerfile
–  Lancez la créaAon de l’image avec la commande docker build.
•  => produire l’image en respectant à la leere les commande du Dockerfile
–  Voici quelques opAons liées à la commande build :
•  -t => permet de nommer et de faire un tag (name:tag) sur l’image produite
•  -f => permet de spécifier un Dockerfile (qui n’est pas dans le répertoire courant)

•  Ex: créer une image nommée docker-whale:


–  $ docker build -t docker-whale .
•  Le point final indique que le fichier dockerfile se trouve dans le répertoire sélecAonné.

•  Démarrer un conteneur à parAr de l’image nouvellement créée:


–  $ sudo docker run docker-whale

05/03/20 35
Marquez les images de Docker et
téléchargez-les sur le Docker Hub
•  Si vous voulez charger votre image docker-whale auto-créée dans
le hub pour la rendre disponible à la communauté ou à un groupe
de travail, vous devez d’abord la lier à un référenAel du même nom
dans votre espace personnel.
–  Dans la terminologie de Docker, ceee étape s’appelle le balisage (Tagging).

05/03/20 36
Marquez les images de Docker et
téléchargez-les sur le Docker Hub
•  Etape 1:
–  1. Créer un repository : connectez-vous au Docker Hub avec votre ID Docker
et votre mot de passe personnel et créez un repository public nommé
docker-whale.

05/03/20 37
Marquez les images de Docker et
téléchargez-les sur le Docker Hub
•  Etape 2:
–  Tags Image: marquez l’image docker-whale à l’aide de la commande docker
tag dans la ligne de commande selon le schéma suivant :
•  $ docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
•  Exemple: $ docker tag 4419af61d32d myfreedockerid/docker-whale:latest
–  Vérifiez si l’image a été correctement balisée dans l’aperçu via docker
images. Le nom du référenAel devrait contenir votre idenAfiant Docker.

05/03/20 38
Marquez les images de Docker et
téléchargez-les sur le Docker Hub
•  Etape 3
–  Télécharger une image : Pour télécharger l’image, vous devez d’abord vous
connecter au Docker Hub. Ceci se fait avec la commande docker login :
•  $ sudo docker login
•  Le terminal vous invite à entrer votre nom d’uAlisateur (Docker ID) et votre mot de passe.
–  Si la connexion a réussi, uAlisez la commande docker push pour télécharger
votre image vers le Repository nouvellement créé.
•  $ sudo docker push myfreedockerid/docker-whale
•  Connectez-vous au Docker-Hub via votre navigateur pour voir l’image téléchargée.
–  Si vous voulez télécharger plus d’une image par repository, uAlisez des
balises différentes pour offrir vos images dans différentes versions:
•  myfreedockerid/docker-whale:latest
•  myfreedockerid/docker-whale:version1
•  myfreedockerid/docker-whale:version

05/03/20 39
Autre exemple de créaAon d’une image
Docker

Pour illustrer la créaAon de notre Dockerfile, nous allons uAliser le code de
l'applicaAon présente sur le repository suivant :
heps://github.com/OpenClassrooms-Student-Center/ghost-cms.
L'applicaAon possède déjà un Dockerfile foncAonnel

$ git clone heps://github.com/OpenClassrooms-Student-Center/ghost-cms
$ cd ghost-cms
$ cat Dockerfile (pour l’afficher)
$ docker build -t ocr-docker-build .
(on donne le nom ocr-docker-build à l’image, le dockerfile_folder
est le dossier courant)
$ docker run -d -p 2368:2368 ocr-docker-build

puis ouvrir hep://X.X.X.X:2368/ pour vérifier

Vous aimerez peut-être aussi