Archives par étiquette : docker

Docker et les réseaux

Docker est probablement l’une des « technologies » les plus importantes de ces dernières années. Bien que s’appuyant sur des briques et des principes qui existaient depuis longtemps (en particulier LXC), l’équipe de Docker a réussi à s’imposer là ou tous les autres ont échoué, en grande partie grâce à sa simplicité (de façade).

Mais en essayant de tout simplifier pour les débutants ou les développeurs, ils ont parfois fait des choix techniques plus que discutables.

Pour un développeur qui travail dans son coin ce n’est pas gênant et ça rend les choses plus simples, mais quand vient l’heure de la mise en production, de gros problèmes peuvent survenir.

Heureusement on peut maintenant (ça n’a pas toujours été le cas) changer tout ou partie de ce comportement, c’est ce qu’on va voir ici. Continuer la lecture

Mémo – Docker

Quelques notes sur l’utilisation de docker.

Je ne vais pas détailler ici ce qu’est docker ni à quoi ça peut servir, il y a suffisamment d’articles sur le net. Pour faire simple, docker est un système de gestion de conteneurs.

Dockerfile

Un Dockerfile est un fichier d’instructions permettant de créer une image. Il doit toujours s’appeler Dockerfile.

Image

Les images sont les briques de bases de docker, on peut voir une image comme un instantané d’un système avec sa configuration et ses applications. C’est à partir de ces images que sont créés les conteneurs, mais une image peut aussi servir de base pour une autre image (comme dans le Dockerfile ci-dessus).

Conteneur

C’est principalement ça qu’on manipule, un conteneur est une branche exécutable d’une image. Les bonnes pratiquent veulent qu’un conteneur soit jetable à tout moment sans perte de données, dit autrement, un conteneur ne devrait rien contenir d’autre que ses programmes. Tout ce qui est données (par exemple les pages d’un site web et le contenu de sa base de données) devraient être en dehors du conteneur, par exemple dans des volumes.

Volume

On vient de dire qu’un conteneur doit être jetable, il faut donc enregistrer les données dans un endroit persistant, on peut le faire de plusieurs manières, les plus courantes sont :

  • un conteneur dédié : c’est un conteneur qui n’aura comme but que d’accueillir les données d’autres conteneurs, évidement ce conteneur ne sera pas à jeter
  • un dossier (ou un fichier) de l’hôte : il sera monté dans le conteneur
  • un « data volume » : c’est un dossier particulier, créé au démarrage du conteneur mais qui est conservé à la destruction du conteneur
  • un mixte de tout ou partie des 3 : par exemple un conteneur dédié dans lequel on a mappé un dossier de l’hôte

Une bonne pratique consiste à utiliser un conteneur dédié, car ça offre quelques facilités

  • partage des données entre conteneurs
  • déplacement des conteneurs et de leurs données vers un autre serveur

Commande

Il existe de nombreuses interfaces pour manipuler les conteneurs, mais il est préférable de commencer par utiliser les commandes car dans la plupart des cas c’est :

  • plus rapide
  • plus fiable
  • plus simple
  • plus reproductible
  • plus facile à expliquer

Ci dessous les commandes courantes, pour la liste complète : Docker CLI

Les valeurs entre <> sont à adapter (sans les chevrons)

nb : la plupart des commandes disposent d’options, vous pouvez les obtenir avec :

Image

Conteneur

Exemple de commandes