Docker¶
Principe¶
Docker s'appuie sur les technologies d'isolation linux (namespaces, cgroups,...) pour apporter des mécanismes de virtualisation.
Points clés¶
- Docker s'appuie sur les fonctionnalités d'isolation du noyau Linux.
- Les conteneurs démarrent plus rapidement que les VM car démarrer un conteneur = démarrer un processus isolé. Ainsi :
- Il n'est pas nécessaire de démarrer un OS complet pour chaque application.
- Il n'est pas nécessaire d'allouer de la RAM ou des CPU pour chacun (les conteneurs partagent les ressources de l'hôte)
- Docker amène des concepts et des outils qui facilitent le déploiement des applications en offrant un cadre générique pour l'empaquetage des applications (image docker = livrable universel)
- Docker s'appuie sur une API mise à disposition par le démon docker.
- La construction et le téléchargement des images sont optimisés par la mise en cache au niveau des couches de l'image.
- Docker amène un cadre pour l'observabilité avec la gestion des journaux applicatifs et la collecte de métriques systèmes.
- Pour travailler avec plusieurs machines, il faut s'intéresser par exemple à Swarm ou Kubernetes.
Les principaux concepts¶
Les principaux exécutables¶
| Nom | Fonction |
|---|---|
| docker | Client en ligne de commande de l'API pour la gestion des objets docker |
| docker compose | Plugin permettant de définir et démarrer une stack applicative complète (services, volumes,...) en YAML (fichier docker-compose.yaml) |
Installation¶
Mise en garde
- Ne pas utiliser les scripts d'installation ci-dessous en entreprise
- Le démon n'est pas configuré automatiquement (voir Docker - la configuration du démon)
- La présence d'un pare-feu et d'un proxy demandera un peu de configuration (voir Docker - résoudre les problèmes fréquents)
Pour l'installation de base :
curl -sS https://mborne.github.io/outils/docker/install.sh | bash
Pour tester l'installation :
sudo docker run --rm hello-world
Pour exécuter docker sans sudo, il suffit d'appartenir au groupe docker :
sudo adduser $USER docker
# puis ouvrir d'une nouvelle session
Pour ajouter le support GPU, voir cuda-toolkit - Utilisation avec docker et tester comme suit :
sudo docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Utilisation¶
Pour débuter avec docker :
- mborne.github.io - DevOps avec des conteneurs pour un cours d'introduction à Docker et une découverte sur la base d'exemples d'utilisation ( github.com - mborne/docker-exemples )
- Cours docker (Cédric ESNAULT) pour le niveau 2 (suivant le précédent à l'IGN)
- container.training - Introduction to Containers pour la version longue (~900 slides).
Pour l'utiliser en production :
Alternatives¶
- www.lemagit.fr - Conteneurs Linux et Conteneurs Docker : quelle(s) différence(s) ?
- phoenixnap.com - Docker vs containerd vs CRI-O: An In-Depth Comparison présente des alternatives à docker pour l'exécution de conteneurs ainsi que la relation entre docker et containerd.
- Podman est l'une de ces alternatives à docker (mise en avant par exemple dans la certification CKAD pour Kubernetes).
Ressources¶
La documentation officielle :
- docs.docker.com - CLI reference pour la documentation officielle avec une vue d'ensemble des commandes.
- docs.docker.com - CLI Cheat Sheet pour un résumé des principales commandes.
- docs.docker.com - Dockerfile reference pour une vue d'ensemble des commandes disponibles pour écrire un Dockerfile.
Pour une installation avec Ansible :
L'API de docker :
- docs.docker.com - Develop with Docker Engine API
- docs.docker.com - Docker Engine API (1.45) pour les spécifications OpenAPI.
- www.docker.com - How to deploy on remote Docker hosts with docker-compose qui aborde
DOCKER_HOST(par défaut/var/run/docker.sock) et Docker Context pour se connecter à l'API docker sur un hôte distant.