Ce mémo a été publié le 23 avril 2017 et peut contenir des informations qui peuvent être incomplètes, non mises à jour voir erronées du fait de son ancienneté. N'hésitez pas à compléter votre recherche sur des articles plus récents.
4.3/5 - (23 votes)

Mémo sur les commandes utiles pour Docker.

Informations

Ce mémo évolue au fil de mes besoins.
Les ressources sont multiples. Notamment en provenance de la documentation officielle sur https://docs.docker.com/.
Les autres ressources seront affichées au fur et à mesure.

Concept

L’instance d’une image est un container.

Une image est créée avec la commande build et les instructions présentes dans le fichier « Dockerfile »
Elle produit un container lorsqu’elle est exécutée.

Docker information

Connaitre votre configuration Docker :

Résultat :

 

Télécharger une image Debian

Le site Docker Hub est un annuaire qui contient énormément d’images Docker.

Récupérer la dernière image Debian Stable :

Utiliser les tags spécifiés sur la page https://hub.docker.com/_/debian/  pour télécharger d’autres images.
Ex avec la version sid :

Exécuter une image pour vérifier qu’elle fonctionne :

ou

Résultat :

Étapes simples pour utiliser un container

  1. Créer le fichier « Dockerfile » avec les spécifications de l’image
  2. Créer une image  : build
  3. Démarrer un container (instance de l’image) : run
  4. Modifier le container
  5. Enregistrer les modifications du container dans une nouvelle image : commit

Dockerfile

Dans un répertoire donné, créer un fichier « Dockerfile ».

Exemple de contenu le plus simple :

Build

Pour créer une machine basée sur Debian dans un répertoire ./jbnet-test :

Résultat :

Vérifier que les images jbnet-test et debian (sur laquelle jbnet-test est basée) sont disponibles :

Résultat :

Liste du ou des container créés :

Version dépréciée :

Résultat : aucun container puis-qu’aucune exécution n’a été encore lancée.

Run

Lancer en mode interactif un container nommé jbnet-container basé sur l’image jbnet-test et exécuter le bash :

Utiliser Ctrl+d pour se déconnecter

Résultat :

Si une nouvelle commande de lancement est exécutée, il y aura 2 container dans la liste.
D’où la nécessité de faire du ménage régulièrement avec les commandes dans le paragraphe « Gérer le container et les images ».
Sinon, le disque risque d’être plein rapidement.

Modifier le contenu du conteneur

Ce sont toutes les commandes que je vais exécuter à l’intérieur, comme un « apt update && apt upgrade ».

Commit

Attention, toutes modifications appliquées dans ces container seront supprimées.
Comme pour git, il faut faire un commit pour appliquer les modifications d’un container à une image.

83988038ac5b : id du container obtenu avec la commande « docker ps -a »

Maintenant il est possible de supprimer tous les container pour faire de la place sans perdre les modifications effectuées.
Comme un « apt update » par exemple

Même exemple avec un tag pour identifier plusieurs images (une sorte de snapshot)

Même exemple en créant une nouvelle image jbnet-test2 :

 

Gérer les container et images

Liste des images :

Supprimer une image :

Supprimer toutes les images :

Liste les id des images :

Liste des container actifs :

(anciennement ‘docker ls’)

Liste de tous les container :

Supprimer un container :

Supprimer tous les container :

Appliquer les changements d’un container à une image :

 

Réseau

Afficher les réseaux par défaut :

Afficher les paramètres du réseau bridge :

Par défaut, les container sont sur le même réseau.

Tester l’accès réseau bridge sur un container en exécutant 2 container (debian dans l’exemple) :

Puis regarder la section « Containers » dans le résultat :

Déconnecter le container networktest du réseau bridge :

Créer son propre réseau bridge et vérifier sa configuration :

Exécuter un container en utilisant ce réseau :

 

Plus d’info : https://docs.docker.com/engine/userguide/networking/#user-defined-networks