h.rvé.netContactSe connecter
  • Contact

  • « La magie de l'Internet des Objets: quand "sécurité" est un gros mot
  • Container minimaliste et sécurité »

Docker: volumes et dépendances croisées

Posted by herve on 23 Fév 2016 in Linux et logiciel libre

De par mon expérience Docker, les volumes sont très pratiques en mode «montage».
Mais quand on tente de les utiliser en mode «volume Docker» classique, ça pose rapidement des soucis.

 

  • Les volumes sont associés à un container tant qu'il existe. Quand le container est supprimé, ses volumes en sont dissociés.
  • docker volume ls ou docker volume inspect ne permettent pas de retrouver à quel container le volume était associé.
  • Docker peut ainsi créer une multitude de volumes qui occupent de l'espace disque dont l'origine et la raison d'être n'est pas évidente à retrouver.

 

Les volumes présentent alors beaucoup d'inconvénients, pour un intérêt difficile à trouver: 
Si mon volume n'est associé à mon container que le temps que vit mon container, à quoi cela sert-il ?

 

Je vais vous présenter ici un cas de figure qui m'a révélé l'utilité des volumes.

 

Schéma d'une application LAMP

Linux, Apache, MySQL, PHP

  • Linux, il est partout: sur le système hôte, dans les containers… c'est l'OS de base, qui va exécuter nos applicatifs. Business as usual pour Docker, pas de soucis à se faire.
  • MySQL, considérons qu'il est déjà installé et opérationnel sur un serveur ou un container.
  • J'ai un conteneur PHP-FPM, capable d'exécuter du PHP.
  • J'ai un conteneur Apache, capable de servir du HTML et de forwarder du PHP à PHP-FPM.
  • J'ai mon application: des fichiers html et javascript, des images png, du code php.

 

Le schéma fonctionnel ressemble donc à ça:

Docker: volumes et dépendances croisées
  • Le client (Firefox), interroge Apache (port 80).
  • Apache a besoin des données statiques (Data), et de PHP interprêté.
  • PHP a besoin des fichiers PHP (Data), et de données stockées en base (MySQL)

 

 

Implémentation

 Voici le docker-compose:

data:
restart: "no"
image: "myapp_data"
volumes:
- "/var/www/html"

httpd:
restart: "always"
image: "apache:2.4"
ports:
- "8006:80"
volumes_from:
- "data"
environment:
- "PHP_SERVER=php-fpm:9000"
links:
- "php-fpm"

php-fpm:
restart: "always"
image: "php5-fpm"
volumes_from:
- "data"

 

et le Dockerfile data:

 

FROM scratch
ADD my_app /var/www/html
VOLUME /var/www/html

 

Plutôt que de créer le conteneur "data", j'aurais pu:

  • poser les données sur le host, et les monter en volume dans le container
  • dériver un container à partir de php5-fpm, et y ajouter les données (impossible à partir de apache pour raisons de dépendances croisées)

 

Mais la solution choisie a pour avantages de:

  • Donner une meilleure visibilité sur les composants utilisés.
  • Faciliter la mise à jour des composants: apache et php peuvent être mis à jour (patches de sécurité) sans rebuilder toutes les applications.
  • Être compatible Swarm si on y rajoute les affinités.

 

Le peaufinage

Il manque à cet exemple, entre autres:

  • des affinités swarm
  • les infos de connexion à la base de données

…cet exercice est laissé au plaisir du lecteur &#59;)

2 commentaires

Commentaire de: afix Visiteur

afix

Merci rvé ! ;)

15.09.18 @ 23:03

Commentaire de: afix Visiteur

afix

Un lien intéressant en complément : https://docs.docker.com/compose/compose-file/#volumes la syntaxe a une peu changé avec Compose file version 3.

16.09.18 @ 01:01


Formulaire en cours de chargement...

Février 2023
Lun Mar Mer Jeu Ven Sam Dim
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28          
 << <   > >>

Rechercher

Catégories

Blog h.rvé

  • Linux et logiciel libre
  • Musique
  • Non catégorisé
  • Vie du blog
  • Vie sociale et citoyenne

Flux XML

  • RSS 2.0: Posts, Commentaires
  • Atom: Posts, Commentaires
What is RSS?

Posts récents

  • Le(s) réseau(x) de Docker Swarm, deep dive
  • Waterfall scrum
  • Retour sur les 24HSeries au Castelet
  • [docker] premiers pas avec Moby et LinuxKit
  • Fabrication et pose d'une fibre optique sous-marine
  • Docker et les Go Templates
  • Megaprocessor - un processeur dont on peut voir chaque transistor
  • Keynote: State of the Linux Kernel, Greg Kroah-Hartman
  • L'art de se débarrasser ce qui est inutile.
  • La magie de l'Internet des Objets: quand "sécurité" est un gros mot

Commentaires récents

  • afix le Docker: volumes et dépendances croisées
  • afix le Docker: volumes et dépendances croisées
  • Richard le Les empreintes digitales pour remplacer les mots de passe: bad idea!
  • Henri le Megaprocessor - un processeur dont on peut voir chaque transistor
  • Henri le L'art de se débarrasser ce qui est inutile.
  • herve le L'art de se débarrasser ce qui est inutile.
  • Henri le L'art de se débarrasser ce qui est inutile.
  • Joel le Unikernels et Docker: une explication claire.
  • Henri le "The End of the Internet Dream", ou pas.
  • Agnès le Haken, rock progressif
  • herve le Une imprimante 3D pour $60
  • Agnès le Une imprimante 3D pour $60
  • Henri le Une imprimante 3D pour $60
  • Agnès le Bienvenue!
  • herve le Bienvenue!
  • Agnès le Bienvenue!
  • Agnès le Site parlement-et-citoyens.fr
  • Agnès le Bienvenue!
  • herve le Bienvenue!
  • Fabien le Bienvenue!

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International. • Contact • Aide • Bootstrap CMS

b2evolution CCMS

Cookies are required to enable core site functionality.