Docker
Volumes de données et conteneurs de données
Recherche…
Conteneurs de données uniquement
Les conteneurs de données uniquement sont obsolètes et sont désormais considérés comme un anti-modèle!
Auparavant, avant la sous-commande de volume
de Docker et avant qu'il soit possible de créer des volumes nommés, Docker supprimait les volumes lorsqu'il n'y avait plus de références à ceux-ci dans aucun conteneur. Les conteneurs de données uniquement sont obsolètes car Docker offre désormais la possibilité de créer des volumes nommés, ainsi que beaucoup plus d'utilitaire via les différentes sous-commandes docker volume
. Les conteneurs de données uniquement sont désormais considérés comme un anti-pattern pour cette raison.
De nombreuses ressources sur le Web datant des deux dernières années mentionnent l'utilisation d'un modèle appelé «conteneur de données uniquement», qui est simplement un conteneur Docker qui existe uniquement pour conserver une référence à un volume de données.
Rappelez-vous que dans ce contexte, un "volume de données" est un volume Docker qui n'est pas monté depuis l'hôte. Pour clarifier, un "volume de données" est un volume créé avec la directive VOLUME
Dockerfile ou en utilisant le commutateur -v
sur la ligne de commande dans une commande docker run
, en particulier au format -v /path/on/container
. Par conséquent, un "conteneur de données uniquement" est un conteneur dont le seul but est de --volumes-from
un volume de données, qui est utilisé par l' --volumes-from
dans une commande d' docker run
. Par exemple:
docker run -d --name "mysql-data" -v "/var/lib/mysql" alpine /bin/true
Lorsque la commande ci-dessus est exécutée, un "conteneur de données uniquement" est créé. C'est simplement un conteneur vide auquel est attaché un volume de données. Il était alors possible d'utiliser ce volume dans un autre conteneur comme ceci:
docker run -d --name="mysql" --volumes-from="mysql-data" mysql
Le conteneur mysql
contient maintenant le même volume qui se trouve également dans mysql-data
.
Docker fournissant désormais la sous-commande volume
et les volumes nommés, ce modèle est désormais obsolète et non recommandé.
Pour commencer avec la sous-commande volume
et les volumes nommés, voir Création d'un volume nommé
Créer un volume de données
docker run -d --name "mysql-1" -v "/var/lib/mysql" mysql
Cette commande crée un nouveau conteneur à partir de l’image mysql
. Il crée également un nouveau volume de données, qu'il monte ensuite dans le conteneur dans /var/lib/mysql
. Ce volume aide les données à l'intérieur de celui-ci à persister au-delà de la durée de vie du conteneur. C'est-à-dire que lorsqu'un conteneur est supprimé, ses modifications du système de fichiers sont également supprimées. Si une base de données stockait des données dans le conteneur et que le conteneur était supprimé, toutes ces données sont également supprimées. Les volumes persisteront dans un emplacement particulier au-delà de la suppression de son conteneur.
Il est possible d'utiliser le même volume dans plusieurs conteneurs avec l' --volumes-from
ligne --volumes-from
commande --volumes-from
:
docker run -d --name="mysql-2" --volumes-from="mysql-1" mysql
Le conteneur mysql-2
est désormais associé au volume de données de mysql-1
, utilisant également le chemin /var/lib/mysql
.