Apprendre le vocabulaire de Docker

Vidéo sur Youtube Le play Youtube

L'objectif n'est pas forcément d'apprendre tout le vocabulaire de Docker par cœur. Beaucoup de choses seront assimilées plus tard en les pratiquant 😉.

Mais il est avantageux de passer en revue la signification de certains mots. Bien entendu, les définitions seront répétées tout au long du cours.

Conteneur

On a déjà évoqué le concept de conteneur dans la leçon précédente. C'est comme une enveloppe qui contient différents programmes pour son bon fonctionnement.

Mais comment peut-on créer un conteneur ?

Grâce à une image.

Image

L'image contient toutes les informations nécessaires pour créer un conteneur. Ou en d'autres termes, le conteneur va se baser sur une image pour se construire.

Pour ceux qui sont développeurs et qui connaissent la programmation orientée objet, l'image est comme une classe et le conteneur est une instance de cette image.

Créer un conteneur à partir d'une image dans Docker

Dans cet exemple, nous avons la représentation de deux images (A et B). Ces deux images sont différentes grâce à leurs formes (ces formes symbolisent la quantité et le contenu des programmes que chaque image contient).

Comme vous pouvez le voir, nous avons créé deux conteneurs à partir de l'image A et un conteneur à partir de l'image B.

Qu'est-ce que cela signifie ?

Les deux conteneurs A contiennent les informations ou programmes que contiennent l'image A. Par contre, les deux conteneurs sont indépendants l'un de l'autre. Si nous modifions un des conteneurs, la modification n'est pas reproduite dans l'autre. Eh bien évidemment, elle n'est pas reproduite dans l'image qui un modèle copié lors de la création du conteneur.

De même, le conteneur B prend pour base l'image B.

Docker Hub

Nous allons maintenant apprendre la signification du Docker hub.

Le Docker Hub est une archive contenant toutes les images disponibles (officielles ou non officielles).

On peut dire que c'est l'équivalent de npm pour JavaScript ou de packagist pour PHP.

Toutes ces images sont disponibles et chaque utilisateur à la possibilité de les télécharger grâce à une commande (nous verrons plus tard comment faire).

Le Docker Hub

Dans l'image ci-dessus qui est une photo de la page du Docker Hub, il y a deux flèches bleues. L'une d'elles indique à quel endroit nous pouvons rechercher des images. L'autre (explore) permet de parcourir la liste des images officielles et non officielles.

Les images officielles sont révisées et publiées par Docker.

Dockerfile

Le Dockerfile est un fichier. Le nom de celui-ci doit être absolument "Dockerfile" et ne doit pas contenir d'extension.

Ce fichier contient des informations qui nous permettront de créer une image à partir d'une autre image.

En effet, une image est basée sur une autre.

Par exemple, dans le Docker hub, il existe une image toute simple d'Ubuntu.

Grâce à un Dockerfile, on pourrait créer une autre image qui se baserait sur Ubuntu, mais en plus, on ajouterait un programme (par exemple PHP).

Nous aurions ainsi une nouvelle image avec Ubuntu et PHP.

Grâce à cela, lorsque nous créerons un conteneur basé sur notre image personnalisée (Ubuntu + PHP), celui-ci contiendra directement Ubuntu et PHP.

Ci-dessous, un autre exemple d'un fichier Dockerfile. On y retrouve l'image de base qui est une version de PHP avec Apache (et également, une version de Linux pour faire tourner les programmes). À la suite, nous voyons d'autres instructions qui seront exécutées.

FROM php:7.4-apache

RUN apt-get update
RUN apt-get -y install vim
RUN docker-php-ext-install pdo_mysql
RUN apt-get install -y libicu-dev && docker-php-ext-configure intl && docker-php-ext-install intl
RUN a2enmod rewrite 

Nous verrons comment produire et utiliser un Dockerfile dans ce cours.

docker-compose.yml

Le docker-compose.yml est un fichier qui permet d'utiliser plusieurs conteneurs et de les connecter si nécessaire. C'est un outil puissant qui donnera la possibilité de rendre certains fichiers, choisis par nous-mêmes persistants. Nous verrons ensemble plus tard ce que cela signifie.

L'extension .yml est un équivalent de .xml ou .json (données textuelles) mais avec un format différent.

L'exemple qui suit vous propose de découvrir un fichier de ce type.

version: '3'

services:   
 my_ubuntu_1: 
   image: celtak/ubuntu-ping-ip     
   container_name: celtak_ubuntu_1     
   stdin_open: true 
   tty: true

 my_ubuntu_2:
   image: celtak/ubuntu-ping-ip     
   container_name: celtak_ubuntu_2     
   stdin_open: true
   tty: true 

⚠️ Si vous ne comprenez pas ce qui est indiqué, ne vous inquiétez pas. Cela sera expliqué plus tard.