Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

DOcker

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

Connectez-vous 

ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Introduction du cours
Vous avez entendu parler de Docker, mais vous ne savez pas vraiment à quoi ça
sert ? Vous voulez mettre en place un déploiement efficace de votre application, et
de manière adaptable, sur n'importe quel serveur ? Ou encore, vous voulez préparer
des environnements de développement faciles à déployer grâce aux conteneurs ?

Ce cours est fait pour vous ! 

Dans la première partie du cours, nous allons commencer par découvrir ce qu'est
un conteneur, ce qu'est Docker et comment l'installer sur votre poste de
développeur.

Dans la deuxième partie, vous allez lancer votre premier conteneur sur votre


machine en utilisant des images Docker stockées sur le Docker Hub. Puis, vous
apprendrez à écrire votre premier Dockerfile, afin de créer votre propre image
Docker personnalisée.

Enfin, dans la troisième partie, vous utiliserez Docker Compose pour orchestrer vos


conteneurs. Grâce au fichier docker-compose.yaml  , vous ferez
fonctionner plusieurs conteneurs ensemble.
Êtes-vous prêt à prendre en main la performance, la légèreté et la modularité des
conteneurs Docker ? Alors rejoignez-moi au premier chapitre ! 

À la fin de ce cours, vous serez capable de :


 installer la bonne version de Docker pour votre projet ;
 créer, lancer et partager des images Docker ;
 orchestrer des images Docker grâce à Docker Compose.
Prérequis : aucun, ce cours est accessible à tous ! 😄

Outil nécessaire : Docker 

 #

Commencer le cours

Comment ça marche ?

Table des matières

 Partie 1 - Prenez en main Docker

1. 1. Tirez un maximum de ce cours


2. 2. Découvrez les conteneurs
3. 3. Découvrez ce qu'est Docker
4. 4. Installez Docker sur votre poste
o  Quiz : Prendre en main Docker
 Partie 2 - Lancez vos images Docker avec les Dockerfiles

1. 1. Lancez votre premier conteneur en local


2. 2. Créez votre premier Dockerfile
3. 3. Utilisez des images grâce au partage sur le Docker Hub

o  Quiz : Lancer ses images Docker avec les Dockerfiles


 Partie 3 - Gérez vos images Docker avec Docker Compose

1. 1. Découvrez et installez Docker Compose


2. 2. Créez un fichier docker-compose pour orchestrer vos conteneurs
3. 3. Entraînez-vous en orchestrant vos images Docker avec Docker Compose

o  Quiz : Gérer ses images Docker avec Docker Compose


Certificat de réussite (voir un exemple)

Découvrez et installez Docker Compose


Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Vous avez un nouveau projet de site avec WordPress. Pour simplifier la gestion de


l'infrastructure, vous souhaitez déployer l'ensemble des composants dans des conteneurs
Docker. Pour cela, nous allons avoir besoin de deux conteneurs :

 un conteneur MySQL ;
 un conteneur WordPress.
Docker Compose va vous permettre d'orchestrer vos conteneurs, et ainsi de simplifier vos
déploiements sur de multiples environnements. Docker Compose est un outil écrit en Python
qui permet de décrire, dans un fichier YAML, plusieurs conteneurs comme un ensemble de
services. 
Docker Compose permet d'orchestrer plusieurs conteneurs
Installation de Docker Compose
Si vous avez utilisé Docker for Mac ou Docker for Windows, vous avez déjà la dernière
version de Docker Compose installée dans votre système.

Sur un poste Linux, cela ne sera pas le cas. Vous devez donc le télécharger puis l'installer
avec cette ligne de commande (un peu longue, oui !) :
sudo curl -L
"https://github.com/docker/compose/releases/download/1.23.2/docker-compose-
$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose && sudo chmod +x
/usr/bin/docker-compose
Vous pouvez vérifier la version de Docker Compose installée sur votre poste via :

> docker-compose --version

docker-compose version 1.23.2, build 1110ad01


À la découverte du CLI de Docker Compose
Pour utiliser le CLI (Command Line Interface) de Docker Compose, nous avons besoin d'un
fichier docker-compose.yml que nous allons créer dans le prochain chapitre ! Mais avant de
le créer, nous allons commencer par découvrir ensemble l'interface en ligne de commande
(CLI) qui nous permet d'utiliser le fichier docker-compose.yml  .
Le CLI de Docker Compose et celui de Docker sont très proches. Par exemple, si vous
souhaitez récupérer l'ensemble des images décrites dans votre fichier docker-compose.yml et
les télécharger depuis le Docker Hub, vous devez faire un docker-compose pull  . Du côté
de Docker, la commande serait un docker pull  .
Le fait que les deux interfaces en ligne de commande soient très similaires nous évite
d'apprendre un nouveau CLI. Si vous connaissez celui de Docker, vous savez globalement
utiliser celui de Docker Compose !
Cependant, nous allons quand même voir ensemble les principales commandes que vous
pourriez avoir besoin d'utiliser et de connaître pour votre utilisation de Docker Compose.
Démarrer une stack Docker Compose
Si vous souhaitez lancer la création de l'ensemble des conteneurs, vous devez lancer la
commande docker-compose up (pour rappel, vous faites un docker run pour lancer un seul
conteneur). Vous pouvez ajouter l’argument -d pour faire tourner les conteneurs en tâche
de fond.
Nous appelons stack un ensemble de conteneurs Docker lancés via un seul et unique fichier
Docker Compose.
Voir le statut d'une stack Docker Compose
Après avoir démarré une stack Docker Compose, vous aurez certainement besoin de voir si
l'ensemble des conteneurs sont bien dans un état fonctionnel, et prêts à rendre un service.

Pour cela, vous allez utiliser la commande docker-compose ps qui vous affichera le retour
suivant :

ADD CONTENT
Voir les logs d'une stack Docker Compose
Votre stack Docker Compose est maintenant fonctionnelle, et l'ensemble des services
répondent bien ; mais vous pourriez avoir besoin de voir les logs de vos conteneurs. Pour cela,
vous devez utiliser la commande docker-compose logs -f --tail 5.
Celle-ci permet de voir l'ensemble des logs sur les différents conteneurs de façon continue,
tout en limitant l'affichage aux 5 premières lignes.

Ainsi, si nos conteneurs fonctionnent depuis longtemps, nous n'aurons pas à attendre plusieurs
secondes, ni à voir de nombreux logs qui ne nous intéressent pas.

Arrêter une stack Docker Compose


Si vous souhaitez arrêter une stack Docker Compose, vous devez utiliser la
commande docker-compose stop  . Cependant, celle-ci ne supprimera pas les différentes
ressources créées par votre stack.
Ainsi, si vous lancez à nouveau un docker-compose up -d  , l'ensemble de votre stack sera
tout de suite à nouveau fonctionnel.
Si vous souhaitez supprimer l'ensemble de la stack Docker Compose, vous devez utiliser la
commande docker-compose down qui détruira l'ensemble des ressources créées.
Valider une stack Docker Compose
Lors de l'écriture d'un fichier docker-compose, nous ne sommes pas à l’abri d'une erreur.
Pour éviter au maximum cela, vous devez utiliser la commande docker-compose config qui
vous permettra de valider la syntaxe de votre fichier, et ainsi d'être certain de son bon
fonctionnement.
Si nous créons une erreur dans notre stack, en remplaçant "image" par "images", par exemple,
nous aurons le résultat suivant :

➜ docker-compose config

ERROR: The Compose file './docker-compose.yml' is invalid because:

Unsupported config option for services.db: 'images'


En résumé
Vous connaissez maintenant les commandes principales pour utiliser une stack Docker
Compose. Voici les commandes les plus importantes :

 docker-compose up -d vous permettra de démarrer l'ensemble des conteneurs en


arrière-plan ;
 docker-compose ps vous permettra de voir le statut de l'ensemble de votre stack ;
 docker-compose logs -f --tail 5 vous permettra d'afficher les logs de votre
stack ;
 docker-compose stop vous permettra d'arrêter l'ensemble des services d'une stack ;
 docker-compose down vous permettra de détruire l'ensemble des ressources d'une
stack ;
 docker-compose config vous permettra de valider la syntaxe de votre
fichier docker-compose.yml  .
Mais passons sans plus attendre à un exemple concret ! Et créons notre première stack
Docker Compose !

Créez un fichier docker-compose pour orchestrer vos


conteneurs
Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Créez votre fichier docker-compose.yml


Nous avons vu dans le chapitre précédent comment utiliser l'interface en ligne de commande
de Docker Compose ; vous allez maintenant apprendre à créer un fichier docker-
compose.yml  .
Pour rappel, vous avez un nouveau projet de site avec WordPress, et vous souhaitez
simplifier la gestion de l'infrastructure. Vous devez maintenant réaliser un déploiement en
production, où l'ensemble des composants sont dans des conteneurs Docker. Pour cela, vous
allez avoir besoin de plusieurs composants :
 une base de données MySQL ;
 le système de fichiers WordPress.

Structure de notre Docker Compose


Vous devez commencer par créer un fichier docker-compose.yml à la racine de votre projet.
Dans celui-ci, nous allons décrire l'ensemble des ressources et services nécessaires à la
réalisation de votre POC.
Décrivez votre premier service : db
Définissez la version de Docker Compose
Un fichier docker-compose.yml commence toujours par les informations suivantes :

version: '3'
L'argument version permet de spécifier à Docker Compose quelle version on souhaite
utiliser, et donc d'utiliser ou pas certaines versions. Dans notre cas, nous utiliserons la version
3, qui est actuellement la version la plus utilisée.
Déclarez le premier service et son image
Nous allons maintenant déclarer notre premier service, et donc créer notre stack WordPress !

L'ensemble des conteneurs qui doivent être créés doivent être définis sous
l'argument services  . Chaque conteneur commence avec un nom qui lui est propre ; dans
notre cas, notre premier conteneur se nommera db  .

services:

db:

image: mysql:5.7
Puis, vous devez décrire votre conteneur ; dans notre cas, nous utilisons
l’argument image qui nous permet de définir l'image Docker que nous souhaitons utiliser.
Nous aurions pu aussi utiliser l’argument build en lui spécifiant le chemin vers notre fichier
Dockerfile ; ainsi, lors de l’exécution de Docker Compose, il aurait construit le conteneur via
le Dockerfile avant de l’exécuter.
Définissez le volume pour faire persister vos données

services:

db:

image: mysql:5.7

volumes:

- db_data:/var/lib/mysql
Pour rappel, nous avons vu précédemment que les conteneurs Docker ne sont pas faits pour
faire fonctionner des services stateful, et une base de données est par définition un service
stateful. Cependant, vous pouvez utiliser l'argument volumes qui vous permet de stocker
l'ensemble du contenu du dossier /var/lib/mysql dans un disque persistant. Et donc, de
pouvoir garder les données en local sur notre host.
Cette description est présente grâce à la ligne db_data:/var/lib/mysql  . db_data est un
volume créé par Docker directement, qui permet d'écrire les données sur le disque hôte sans
spécifier l'emplacement exact. Vous auriez pu aussi faire
un /data/mysql:/var/lib/mysql qui serait aussi fonctionnel.
Définissez la politique de redémarrage du conteneur

services:

db:

image: mysql:5.7

volumes:

- db_data:/var/lib/mysql

restart: always
Un conteneur étant par définition monoprocessus, s'il rencontre une erreur fatale, il peut être
amené à s'arrêter. Dans notre cas, si le serveur MySQL s'arrête, celui-ci redémarrera
automatiquement grâce à l'argument restart: always  .
Définissez les variables d'environnement

services:

db:

image: mysql:5.7

volumes:

- db_data:/var/lib/mysql

restart: always

environment:

MYSQL_ROOT_PASSWORD: somewordpress

MYSQL_DATABASE: wordpress

MYSQL_USER: wordpress

MYSQL_PASSWORD: wordpress
L'image MySQL fournie dispose de plusieurs variables d'environnement que vous pouvez
utiliser ; dans votre cas, nous allons donner au conteneur les valeurs des différents mots de
passe et utilisateurs qui doivent exister sur cette base. Quand vous souhaitez donner des
variables d'environnement à un conteneur, vous devez utiliser l'argument environment  ,
comme nous l'avons utilisé dans le fichier docker-compose.yml ci-dessus.
Décrivez votre second service : WordPress
Dans le second service, nous créons un conteneur qui contiendra le nécessaire pour faire
fonctionner votre site avec WordPress. Cela nous permet d'introduire deux arguments
supplémentaires.

services:

wordpress:

depends_on:

- db

image: wordpress:latest

ports:

- "8000:80"

restart: always

environment:

WORDPRESS_DB_HOST: db:3306

WORDPRESS_DB_USER: wordpress

WORDPRESS_DB_PASSWORD: wordpress

WORDPRESS_DB_NAME: wordpress
Le premier argument, depends_on  , nous permet de créer une dépendance entre deux
conteneurs. Ainsi, Docker démarrera le service db avant de démarrer le service WordPress.
Ce qui est un comportement souhaitable, car WordPress dépend de la base de données pour
fonctionner correctement.
Le second argument, ports  , permet de dire à Docker Compose qu'on veut exposer
un port de notre machine hôte vers notre conteneur, et ainsi le rendre accessible depuis
l'extérieur.
Voici le fichier docker-compose.yml dans sa version finale :

version: '3'

services:

db:

image: mysql:5.7

volumes:
- db_data:/var/lib/mysql

restart: always

environment:

MYSQL_ROOT_PASSWORD: somewordpress

MYSQL_DATABASE: wordpress

MYSQL_USER: wordpress

MYSQL_PASSWORD: wordpress

wordpress:

depends_on:

- db

image: wordpress:latest

ports:

- "8000:80"

restart: always

environment:

WORDPRESS_DB_HOST: db:3306

WORDPRESS_DB_USER: wordpress

WORDPRESS_DB_PASSWORD: wordpress

WORDPRESS_DB_NAME: wordpress

volumes:

db_data: {}
Lancez votre stack Docker Compose
Quand vous lancerez vos conteneurs avec la commande docker-compose up -d  , vous
devriez avoir le résultat suivant :

$ docker-compose up -d

Creating network "my_wordpress_default" with the default driver

Pulling db (mysql:5.7)...

5.7: Pulling from library/mysql

efd26ecc9548: Pull complete

a3ed95caeb02: Pull complete

...

Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de

Status: Downloaded newer image for mysql:5.7

Pulling wordpress (wordpress:latest)...

latest: Pulling from library/wordpress

efd26ecc9548: Already exists

a3ed95caeb02: Pull complete

589a9d9a7c64: Pull complete

...

Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6

Status: Downloaded newer image for wordpress:latest

Creating my_wordpress_db_1

Creating my_wordpress_wordpress_1
Lors de l'exécution de cette commande, Docker Compose commence par vérifier si nous
disposons bien en local des images nécessaires au lancement des stacks. Dans le cas contraire,
il les télécharge depuis une registry, ou les build via un docker build  .
Puis celui-ci lance les deux conteneurs sur votre système ; dans notre cas, vous pourrez voir le
résultat en vous ouvrant l'URL suivante dans votre navigateur :  http://127.0.0.1:8000  .
Votre site WordPress fonctionnel !
En résumé
Vous savez maintenant utiliser les commandes de base de Docker Compose, et créer un
fichier docker-compose.yml pour orchestrer vos conteneurs Docker.
Pour rappel, voici les arguments que nous avons pu voir dans ce chapitre :

 image qui permet de spécifier l'image source pour le conteneur ;


 build qui permet de spécifier le Dockerfile source pour créer l'image du conteneur ;
 volume qui permet de spécifier les points de montage entre le système hôte et les
conteneurs ;
 restart qui permet de définir le comportement du conteneur en cas d'arrêt du
processus ;
 environment qui permet de définir les variables d’environnement ;
 depends_on qui permet de dire que le conteneur dépend d'un autre conteneur ;
 ports qui permet de définir les ports disponibles entre la machine host et le
conteneur.
Rejoignez-moi dans le chapitre suivant pour vous entraîner à utiliser Docker Compose.

Entraînez-vous en orchestrant vos images Docker avec


Docker Compose
Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !
À vous de jouer !
Jean, un de vos amis, est développeur dans une école d'informatique. Il vient tout juste de
finaliser son premier projet en Python. Il s’agit d’une API qui va permettre d’enregistrer des
élèves dans une base de données Redis.

Avant d’avancer plus loin dans son code, il vous demande s'il est possible d’utiliser Docker
pour pouvoir présenter son application à ses collègues depuis n’importe quel poste
informatique. En effet, ces derniers ne travaillent pas tous sous le même système
d’exploitation.

Jean vous a partagé son dossier de projet où vous retrouverez l’ensemble de son code. 

Il vous recommande de lire en priorité le fichier README pour prendre connaissance des


prérequis nécessaires au bon fonctionnement du code :

 Python 3.8 ou supérieur ;


 Une base de données Redis.
Vous n’avez pas besoin de télécharger Python ou Redis en amont sur votre ordinateur. Juste
leur image suffit. 
Vous divisez le travail en deux parties :

1. Créer une image du code avec un fichier Dockerfile.


2. Faire tourner ce code à l'aide d'une base de donnée Redis avec un fichier docker-
compose.
Si vous croisez une erreur de connexion de type Redis Connexion Error, c’est normal.
Pour que l’application de Jean fonctionne correctement, il faut instancier une base de données
Redis. 
Vous livrerez à Jean un fichier Dockerfile et un docker-compose afin qu’il puisse présenter
l’API à ses collègues.

Une fois que le projet de Jean tourne, vous pouvez visiter l’API en tapant  localhost:5000 
dans le navigateur.
Vérifiez votre travail avec les fichiers corrigés Dockerfile et docker-compose !

Gérer ses images Docker avec Docker Compose


Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Compétences évaluées

 Gérer ses images Docker avec Docker Compose


 Question 1

Docker-compose sert à :

o Orchestrer plusieurs conteneurs


o Générer plusieurs fichiers Dockerfile
o Installer la dernière version de Docker
 Question 2

À quoi sert le paramètre --tail de la commande docker-compose logs --tail ?

o Il permet d’afficher les derniers logs du conteneur


o Il permet d’afficher les logs de manière continue
o Il permet de cacher les logs du conteneur
 Question 3

Quelle commande va nous permettre de faire tourner nos conteneurs en arrière-


plan ?

o docker-compose exec -e
o docker-compose ps --services

Vous aimerez peut-être aussi