Comment Déployer des Conteneurs Docker sur Ubuntu

DockerBeginner
Pratiquer maintenant

Introduction

Ce tutoriel Docker complet fournit aux développeurs et aux administrateurs système un guide de base pour comprendre et mettre en œuvre les technologies de conteneurisation. En explorant les concepts fondamentaux, l'architecture et la mise en œuvre pratique de Docker, les apprenants acquerront des compétences essentielles dans le déploiement logiciel moderne et la gestion d'infrastructure.

Notions de base Docker

Qu'est-ce que Docker ?

Docker est une puissante technologie de conteneurisation qui permet aux développeurs d'emballer, de distribuer et d'exécuter des applications de manière cohérente sur différents environnements informatiques. En tant qu'outil fondamental dans le développement logiciel moderne, Docker simplifie le déploiement d'applications et améliore l'efficacité du système.

Concepts fondamentaux de la conteneurisation

La conteneurisation permet aux applications d'être isolées et exécutées indépendamment avec leurs propres dépendances. Contrairement aux machines virtuelles traditionnelles, les conteneurs partagent le noyau du système hôte, ce qui les rend légers et rapides.

graph TD A[Code de l'application] --> B[Conteneur Docker] B --> C[Noyau hôte partagé] B --> D[Environnement isolé]

Architecture Docker

Composant Description
Démon Docker Service en arrière-plan gérant les conteneurs
Client Docker Interface en ligne de commande pour interagir avec Docker
Images Docker Modèles en lecture seule pour créer des conteneurs
Conteneurs Docker Instances exécutables d'images Docker

Installation sous Ubuntu 22.04

## Mettre à jour l'index des paquets
sudo apt update

## Installer les dépendances
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Ajouter la clé GPG officielle de Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Configurer le dépôt stable
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Installer le moteur Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Premier exemple de conteneur Docker

## Télécharger l'image Ubuntu officielle
docker pull ubuntu:latest

## Exécuter un conteneur interactif
docker run -it ubuntu:latest /bin/bash

## À l'intérieur du conteneur, vérifier l'environnement
cat /etc/os-release

Cet exemple démontre comment télécharger une image Ubuntu et exécuter un conteneur interactif, illustrant la simplicité de Docker pour créer des environnements isolés.

Gestion des conteneurs

Opérations sur le cycle de vie des conteneurs

Docker fournit des commandes complètes pour gérer le cycle de vie des conteneurs, permettant aux développeurs de créer, démarrer, arrêter et supprimer des conteneurs efficacement.

graph LR A[Créer un conteneur] --> B[Démarrer le conteneur] B --> C[Conteneur en cours d'exécution] C --> D[Arrêter le conteneur] D --> E[Supprimer le conteneur]

Commandes essentielles pour la gestion des conteneurs Docker

Commande Fonction Exemple
docker create Créer un nouveau conteneur docker create ubuntu:latest
docker start Démarrer un conteneur arrêté docker start container_id
docker stop Arrêter un conteneur en cours d'exécution docker stop container_id
docker rm Supprimer un conteneur docker rm container_id
docker ps Lister les conteneurs en cours d'exécution docker ps
docker ps -a Lister tous les conteneurs docker ps -a

Exemple de gestion des conteneurs

## Créer un nouveau conteneur
docker create --name web_server nginx:latest

## Démarrer le conteneur
docker start web_server

## Lister les conteneurs en cours d'exécution
docker ps

## Arrêter le conteneur
docker stop web_server

## Supprimer le conteneur
docker rm web_server

Gestion des ressources des conteneurs

## Exécuter un conteneur avec des limites de ressources
docker run -d \
  --name limited_container \
  --memory=512m \
  --cpus=1.5 \
  nginx:latest

Cet exemple illustre la configuration de contraintes de mémoire et de processeur pour un conteneur, garantissant une utilisation contrôlée des ressources.

Inspection avancée des conteneurs

## Informations détaillées sur le conteneur
docker inspect web_server

## Logs du conteneur
docker logs web_server

## Statistiques du conteneur en temps réel
docker stats web_server

Techniques Avancées de Conteneurs

Configuration du Réseau des Conteneurs

Docker propose des options de réseau flexibles pour les architectures d'applications complexes.

graph LR A[Réseau hôte] --> B[Réseau pont] B --> C[Réseau personnalisé] C --> D[Réseau Overlay]

Types de Réseaux

Type de réseau Description Cas d'utilisation
Pont Réseau par défaut Communication isolée entre conteneurs
Hôte Réseau hôte direct Scénarios haute performance
Overlay Réseau multi-hôtes Systèmes distribués

Création de Réseau Personnalisé

## Créer un réseau personnalisé
docker network create --driver bridge my_custom_network

## Exécuter un conteneur dans le réseau personnalisé
docker run -d \
  --name web_app \
  --network my_custom_network \
  nginx:latest

Gestion des Volumes

## Créer un volume persistant
docker volume create app_data

## Monter le volume dans le conteneur
docker run -d \
  --name database \
  -v app_data:/var/lib/database \
  postgres:latest

Orchestration des Conteneurs avec Docker Compose

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  database:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: secret

Surveillance des Performances

## Métriques des conteneurs en temps réel
docker stats

## Utilisation des ressources du conteneur
docker top container_name

## Profilage des performances
docker run \
  --rm \
  -it \
  --privileged \
  ubuntu:latest \
  perf top

Résumé

Docker représente une approche révolutionnaire de l'emballage et du déploiement d'applications, offrant des solutions de conteneurisation légères, portables et efficaces. En maîtrisant les techniques fondamentales de Docker, les développeurs peuvent rationaliser leur flux de travail, garantir des environnements cohérents et améliorer l'évolutivité du système sur diverses plateformes informatiques.