Gérer les volumes Docker à l'aide de Docker Compose

Gérer les volumes Docker à l'aide de Docker Compose

But des volumes de docker

Les conteneurs Docker sont censés remplacer les applications. Ils sont censés être jetables et faciles à remplacer. Cette propriété est, en fait, la pierre angulaire de plusieurs pipelines CI / CD. Lorsqu'un changement est apporté à votre référentiel source qui déclenche une chaîne d'événements. Les images Docker sont automatiquement construites, testées et (parfois) même déployées directement dans la production, en remplaçant les anciennes versions de manière transparente.

Mais il y a souvent des données persistantes qui doivent être préservées entre différentes versions de votre application. Les exemples incluent les bases de données, les fichiers de configuration pour vos applications, vos fichiers journaux et les informations d'identification de sécurité comme les clés d'API et les certificats TLS.

Pour permettre à toutes ces données de persister, nous utiliserons des volumes Docker qui ne sont que des parties du système de fichiers de Docker Host (un répertoire ou un périphérique de bloc formaté avec un système de fichiers) qui peut être monté dans un conteneur à n'importe quel emplacement souhaité du système de fichiers du conteneur.

Installation

Pour nous assurer que nous sommes tous sur la même page, voici la version de Docker Runtime et Docker-Compose que j'utilise:

  1. Docker Version 18.09.2, construire 6247962
  2. Docker-Compose Version 1.23.2, construire 1110ad01
  3. Compose Fichier Version 3: Fonctionne avec 1.13.0 et plus

Exemple: hébergement d'un site Web Ghost CMS

Travailler avec Compose est vraiment simple. Vous écrivez un fichier YAML décrivant votre déploiement, puis exécutez le déploiement à l'aide de la CLI Docker-Compose. Commençons par un simple déploiement de CMS fantôme.

Créer un répertoire appelé Composses Samples et à l'intérieur, créez un fichier appelé docker-compose.yaml

$ mkdir compose échantillons
$ cd compose échantillons
Contenu de Docker-Compose.Yaml:
Version: "3.0 "
prestations de service:
la toile:
Image: Ghost: Dernière
PORTS:
- "2368: 2368"
Volumes:
- cms-content: / var / lib / fantôme / contenu
Volumes:
CMS-CONTANT:

Ce fichier composé déclare un seul service Web qui exécute la dernière image de Ghost CMS à partir du référentiel officiel de Docker Hub. Le port exposé est de 2368 (plus à ce sujet dans un peu plus tard) et un volume est alors un volume appelé CMS-CONT-CONTORD sur / var / lib / fantôme / Contenu que vous pouvez lire sur votre application particulière et ses nuances en recherchant les applications Documentation. Par exemple, le port par défaut de Ghost Container 2368 et le point de montage par défaut pour le contenu du site Web / var / lib / fantôme / contenu sont tous deux mentionnés la documentation officielle du conteneur.

Si vous écrivez une nouvelle application à votre propre application, pensez à toutes les données persistantes auxquelles il aura besoin d'accès et définira en conséquence les points de montage pour vos volumes Docker.

Pour tester que le volume persistant fonctionne, essayez ceci:

  1. Ouvrez un navigateur et entrez l'IP de votre hôte de docker, c'est-à-dire http: // dockerhostip: 2368 / fantôme (ou juste http: // localhost: 2368 / fantôme) et créer un compte d'administration. Modifier l'un des messages préexistants et économiser.
  2. Énumérez tous les composants Docker qui s'exécutent en utilisant les commandes: Docker PS, Docker Network LS, Docker Volume LS
  3. Dans le même répertoire que votre fichier de composition, exécutez la commande $ docker-compose vers le bas et maintenant vous pouvez répertorier tous les conteneurs, réseau et volumes Docker. Fait intéressant, vous remarquerez que si le conteneur et le réseau créés par Docker-Compose sont supprimés, le volume Docker est toujours intact.
  4. Exécutez docker-compose up -d et vous remarquerez que le message modifié est juste l'endroit où vous l'avez quit.
  5. Supprimez les sections avec le volume des deux services: Web: section et de la section principale, et maintenant si vous répétez les trois étapes ci-dessus, vous remarquerez que.

Syntaxe et verbosité

La syntaxe pour introduire un volume à l'aide de Docker-Compose est assez simple. Vous commencez par quelque chose qui ressemble à un conteneur et mentionnez le nom du volume que vous souhaitez monter à l'intérieur. Si vous ne mentionnez pas de nom, vous pouvez opter pour une syntaxe paresseuse comme ci-dessous:

Version: "3.0 "
prestations de service:
la toile:
Image: Ghost: Dernière
PORTS:
- "2368: 2368"
Volumes:
- / var / lib / fantôme / contenu

Si vous voulez être un peu plus verbeux, vous devrez mentionner le volume Docker comme définition de niveau supérieur:

Version: "3.0 "
prestations de service:
la toile:
Image: Ghost: Dernière
PORTS:
- "2368: 2368"
Volumes:
- cms-content: / var / lib / fantôme / contenu
## Définissez que le contenu CMS est en fait un volume.
Volumes:
CMS-CONTANT:

Bien que cette dernière version vous oblige à taper plus, elle est plus verbeuse. Choisissez le nom pertinent pour vos volumes, afin que vos collègues puissent comprendre ce qui a été fait. Vous pouvez aller encore plus loin et mentionner le type de volume (plus à ce sujet plus tard) et signaler la source et la cible.

Volumes:
- Type: Volume
Source: cms-data
cible: / var / lib / fantôme / contenu

Lier les supports

Les supports de liaison sont des parties du système de fichiers hôtes qui peuvent être montées directement à l'intérieur du conteneur Docker. Pour introduire un support de liaison, mentionnez simplement le répertoire hôte que vous souhaitez partager et le point de montage à l'intérieur du conteneur Docker où il devrait être monté:

Volumes:
- /maison// projets / fantôme: / var / lib / fantôme / contenu

J'ai utilisé le chemin / la maison // projets / fantômes comme un exemple, vous pouvez utiliser n'importe quel chemin de votre hôte docker que vous souhaitez, à condition que vous y ayez accès, bien sûr.

Vous pouvez également utiliser des chemins relatifs en utilisant $ pwd ou ~, mais cela peut facilement conduire à des bogues et des catastrophes dans les scénarios du monde réel où vous collaborez avec plusieurs autres humains avec leur propre environnement Linux. D'un autre côté, les chemins relatifs sont parfois plus faciles à gérer. Par exemple, si votre repo git est également censé être votre support de liaison en utilisant le point (.) Symboliser le répertoire actuel peut très bien être idéal.

De nouveaux utilisateurs cloner le repo et le cloner n'importe où dans leur système hôte, et exécuter docker-compose -d et obtenir à peu près le même résultat.

Si vous utilisez une syntaxe plus verbeuse, c'est ce que contiendra votre fichier de composition:

Volumes:
- Type: lier
Source: / Home / User / Projects / Ghost
cible: / var / lib / fantôme / contenu

Conclusion

Pour organiser vos applications de telle sorte que l'application est distincte des données peut être très utile. Les volumes sont des moyens sains. À condition qu'ils soient sauvegardés et sécurisés, vous pouvez utiliser librement pour utiliser les conteneurs comme environnements jetables, même en production!

La mise à niveau d'une version de l'application à la suivante ou en utilisant différentes versions de votre application pour les tests A / B peut devenir très rationalisée tant que la façon dont les données sont stockées ou consultées sont les mêmes pour les deux versions.