Orchestrer ses applications avec parcimonie (Docker)

Voici une liste non exhaustive des commandes les plus courantes pour la version 1.12 et 1.13.

Manipuler les conteneurs

En reprenant exemple de ce simple conteneur, il est possible de :

  • L'arrêter :
docker stop web
  • Le démarrer :
docker start web
  • Le supprimer :
docker rm web
  • Consulter ou surveiller le journal d'activité :
docker logs web
docker logs -f web 
  • Le relancer :
docker reload web
  • Connaître les processus en cours :
docker top web
  • Récupérer des infos :
docker inspect web
  • Savoir sa configuration :
docker inspect web
  • Lancer une commande interne :
docker exec web du -h -d1
  • Se connecter au conteneur en ouvrant un terminal :
docker exec -it dockercompose_bdd_1 bash
  • Lui connecter à un nouveau réseau :
docker network connect mon_reseau_perso web
  • Se déconnecter d'un réseau :
docker network disconnect mon_reseau_perso web

Manipuler les images

Admettons que nous utilisons l'image nginx, il est possible de :

  • Télécharger l'image :
docker pull nginx
  • Savoir sa configuration :
docker inspect nginx
  • Savoir les étapes de sa compilation :
docker history nginx
  • Rechercher une image sur le Hub depuis la console :
docker search nginx
  • La supprimer :
docker rmi nginx
  • l'exporter :
docker save nginx > site.tar.gz
  • l'importer :
docker image load < site.tar.gz

Manipuler les volumes

  • Créer un driver pour NFS :

Admettons que nous avons un serveur (192.168.1.230) dont il partage le dossier “partage” via NFS. On verra alors :

 docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.230,rw --opt device=:/partage --name root
# Pout un conteneur :
 docker run -itd --name nfs -v root:/mnt/ debian:jessie-slim
 
 # Pour un service (il faudra déclarer le volume sur tous les nodes explicitement!):
 docker service create --mount type=volume,source=root,target=/var/www/html -p 80:80 eboraas/apache-php
 
 # Sur le serveur faire ceci pour voir les connexions en cours lors d'un scale de service : 
 netstat -an | grep 2049
 
 # Mais ne fonctionne pas pour :
 docker service create --mount type=volume,volume-opt=o=addr=192.168.1.230,volume-opt=device=/partage,volume-opt=type=nfs,source=vol_nfs,target=/var/www/html --name nfs eboraas/apache-php
  • Pour libérer de l'espace disque (pas sûre…):

A effectuer lorsque l'on obtient ce type d'erreur : “no space left on device”

 docker volume rm prune

voici ce que ça peut donner si on déclare un volume dans un docker-file (nfs est expérimental) :

test_volume.yml
services:

  site:
    image: une_image
    volumes:
     - nfs:/var/www/html
 

volumes:
  nfs:
    driver: local
    driver_opts:
      type: nfs
      o: addr=192.168.1.230,rw
      device: ":/partage"
 
? https://docs.docker.com/compose/compose-file/#/external

Manipuler les réseaux

Bien entendu les réseaux sont eux aussi très personnalisable! Jusqu'aux VLans paraît-il.

Ainsi il est possible de faire :

  • Créer un interface virtuelle qui contiendra un conteneur :
ip addr add 10.12.0.117/21 dev br1
docker run -d --name web -p 10.12.0.117:80:80 nginx

Manipuler le système hôte

  • Montre l'espace utilisé
docker system df
  • Supprime les données inutiles
docker system prune

Il reste encore plein d'autres découvrir! :)