Lorsque vous travaillez avec un fichier de composition Docker, il peut s'avérer nécessaire d'exécuter une commande spécifique une seule fois, souvent lors de la configuration initiale d'une demande. Cette exigence se pose lorsque l'application dépend d'une base de données qui doit être initialisée, et l'initialisation ne doit avoir lieu qu'à la première exécution.
Dans ce cas, l'utilisateur a l'intention d'exécuter la commande ./my-project - configuration pour ajouter les informations nécessaires à la base de données. Pour y parvenir, il est recommandé d'incorporer un script de point d'entrée dans le conteneur.
Un script de point d'entrée fournit un mécanisme pour exécuter des commandes personnalisées avant de démarrer l'application principale. Dans le script du point d'entrée, il est possible de vérifier si la base de données a déjà été initialisée. Si une initialisation est requise, le script peut effectuer les étapes de configuration.
Cette approche garantit que la commande d'initialisation n'est exécutée qu'une seule fois, même si le conteneur est redémarré ou si le service est mis à l'échelle.
Pour implémenter cette solution, modifiez le fichier docker-compose.yml pour inclure le script suivant dans la définition du service my_project :
Dans ce cas, les données est le volume contenant le code de l'application et Entrypoint.sh est le script Entrypoint.
Créez un script Entrypoint.sh avec le contenu suivant :
Dans ce script, mongo est le nom d'hôte du conteneur Mongo et my_project est le nom de la base de données.
Ce script vérifie si un document particulier existe dans la collection utilisateur de la base de données. Si le document n'existe pas, cela indique que la base de données n'a pas été initialisée et la commande setup est exécutée. Sinon, l'application démarre normalement.
Notez que l'utilisateur a initialement utilisé un « conteneur de données uniquement » pour monter le volume de la base de données. Cependant, cette approche n'est plus nécessaire avec Docker 1.9 et versions ultérieures, qui prennent en charge les volumes nommés. Par conséquent, le conteneur mongodata peut être supprimé du fichier docker-compose.yml et le service mongo peut être modifié pour utiliser directement le volume nommé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!