Docker

Docker



1. Introduction à Docker

Docker est une plateforme open-source qui permet de développer, expédier et exécuter des applications dans des conteneurs. Les conteneurs sont des environnements d'exécution légers et isolés qui permettent aux applications de fonctionner de manière cohérente, quel que soit l'endroit où elles sont déployées.

L'une des principales raisons pour lesquelles Docker est populaire est sa capacité à simplifier le processus de déploiement d'applications, en permettant aux développeurs de "conditionner" une application avec toutes ses dépendances dans un conteneur, puis de déployer ce conteneur sur n'importe quel système compatible.

1.1. Qu'est-ce qu'un conteneur ?

Un conteneur est une unité d'exécution autonome qui regroupe tout ce dont une application a besoin pour fonctionner : le code, les bibliothèques, les outils système, et les dépendances. Il permet d'exécuter une application de manière isolée sur un système hôte.

1.2. Docker vs Machines Virtuelles

Contrairement aux machines virtuelles (VM), qui virtualisent le matériel de l'hôte et exécute un système d'exploitation complet pour chaque machine, Docker virtualise le système d'exploitation, permettant à plusieurs conteneurs d'exécuter des applications indépendantes sur un même noyau Linux, tout en étant légers et rapides.


2. Installation de Docker sur Linux

2.1. Prérequis

Avant d'installer Docker, il est recommandé d'avoir une version récente de Linux. Les distributions courantes comme Ubuntu, CentOS, et Debian sont bien supportées.

2.2. Installation sur Ubuntu/Debian

Étape 1 : Mise à jour des paquets
sudo apt-get update

Étape 2 : Installation des dépendances nécessaires
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

Étape 3 : Ajout de la clé GPG de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Étape 4 : Ajout du dépôt Docker
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Étape 5 : Installation de Docker
sudo apt-get update
sudo apt-get install docker-ce

Étape 6 : Vérification de l'installation
sudo systemctl status docker

Cela permet de vérifier que Docker est bien installé et en cours d'exécution.

2.3. Installation sur CentOS/RHEL

Étape 1 : Installation des dépendances
sudo yum install -y yum-utils

Étape 2 : Ajout du dépôt Docker
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Étape 3 : Installation de Docker
sudo yum install docker-ce docker-ce-cli containerd.io

Étape 4 : Démarrage de Docker
sudo systemctl start docker

Étape 5 : Vérification
sudo systemctl status docker


3. Concepts de base de Docker

3.1. Images Docker

Une image Docker est un modèle en lecture seule pour créer un conteneur. Elle contient tout le nécessaire pour exécuter une application : le code, les bibliothèques, les dépendances et les outils.

Exemples de commandes avec des images Docker :

  • Lister les images Docker :
    docker images
  • Télécharger une image depuis Docker Hub :
    docker pull ubuntu
  • Créer une image Docker :
    Vous pouvez créer une image à partir d'un fichier Dockerfile (un script qui contient les instructions pour créer une image). Exemple :
    docker build -t mon_image .

3.2. Conteneurs Docker

Un conteneur Docker est une instance d'une image Docker. C'est l'environnement dans lequel les applications s'exécutent.

Exemples de commandes avec des conteneurs Docker :

  • Lancer un conteneur Docker :
    docker run -it ubuntu

Cette commande démarre un conteneur Ubuntu en mode interactif.

  • Lister les conteneurs en cours d'exécution :
    docker ps
  • Lister tous les conteneurs, même arrêtés :
    docker ps -a
  • Arrêter un conteneur :
    docker stop <container_id>
  • Supprimer un conteneur :
    docker rm <container_id>

3.3. Dockerfile

Le Dockerfile est un fichier de script texte qui contient une série d'instructions pour construire une image Docker. Chaque instruction dans un Dockerfile crée une nouvelle couche dans l'image.

Exemple de Dockerfile basique :

# Utilisation d'une image de base
FROM ubuntu:20.04

# Mise à jour des paquets et installation d'un serveur web
RUN apt-get update && apt-get install -y apache2

# Copie d'un fichier de configuration dans le conteneur
COPY ./index.html /var/www/html/index.html

# Exposer le port 80 pour les connexions HTTP
EXPOSE 80

# Lancer Apache en arrière-plan
CMD ["apachectl", "-D", "FOREGROUND"]


4. Gestion des conteneurs Docker

4.1. Réseaux Docker

Docker permet la création de réseaux virtuels pour les conteneurs afin qu'ils puissent communiquer entre eux.

  • Créer un réseau Docker :
    docker network create mon_reseau
  • Lancer un conteneur dans un réseau spécifique :
    docker run --network=mon_reseau -it ubuntu

4.2. Volumes Docker

Les volumes Docker permettent de persister les données utilisées par les conteneurs, en les stockant hors des conteneurs eux-mêmes.

  • Créer un volume Docker :
    docker volume create mon_volume
  • Monter un volume dans un conteneur :
    docker run -v mon_volume:/data -it ubuntu

4.3. Docker Compose

Docker Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Avec Compose, on utilise un fichier YAML pour configurer les services de l'application, les volumes et les réseaux.

Exemple de fichier docker-compose.yml :

                        version: '3'
                        services:
                          web:
                            image: nginx
                            ports:
                              - "80:80"
                          db:
                            image: mysql
                            environment:
                              MYSQL_ROOT_PASSWORD: example
                        
  • Démarrer les services avec Docker Compose :
    docker-compose up

5. Sécurisation de Docker

5.1. Isolation des conteneurs

Docker offre une isolation par défaut entre les conteneurs et l'hôte. Cela permet de limiter l'impact d'une compromission de conteneur.

5.2. Privilèges et utilisateurs

Il est essentiel de ne pas exécuter Docker en tant qu'utilisateur root. Au lieu de cela, créez un groupe Docker pour exécuter les conteneurs sans les privilèges administratifs :

sudo usermod -aG docker $USER

5.3. Sécurisation de l'image Docker

Les images doivent être vérifiées avant d'être utilisées, et il est recommandé de privilégier des images officielles ou bien maintenues. Utiliser des images signées avec Docker Content Trust peut aussi améliorer la sécurité.


6. Conclusion

Docker simplifie considérablement le déploiement d'applications en isolant les dépendances et les environnements d'exécution dans des conteneurs. Il permet de créer des environnements de développement, de test et de production cohérents et réutilisables. La gestion des images, des conteneurs, des réseaux et des volumes est essentielle pour administrer des environnements Docker à grande échelle. Pour des projets complexes, Docker Compose permet de gérer plusieurs services dans un environnement intégré.

La sécurité et la bonne gestion des ressources sont des aspects essentiels de l’utilisation de Docker, et son adoption continue de croître grâce à sa flexibilité et sa capacité à rationaliser les processus de développement et de déploiement.