Exécuter une commande unique dans Docker Compose
Dans le contexte de Docker compose, vous recherchez une solution pour exécuter une commande spécifique ( ./my-project -setup) une seule fois, quels que soient les redémarrages ou les déploiements du conteneur. Ce besoin se pose dans les situations où l'initialisation ou la configuration des données est nécessaire.
Pour résoudre ce problème, envisagez d'implémenter un script de point d'entrée dans votre conteneur. Ce script se chargera de vérifier si la base de données a déjà été initialisée. Si ce n'est pas le cas, le script effectuera les étapes d'initialisation requises.
Il est crucial de noter que l'ordre de démarrage du conteneur n'est pas garanti, il est donc possible que le conteneur d'application démarre avant le conteneur de base de données. Pour tenir compte de cela, le script doit intégrer une logique pour gérer de telles occurrences.
Un exemple de cette approche peut être trouvé dans l'image officielle de WordPress (https://github.com/docker-library/wordpress/blob /df190dc9c5752fd09317d836bd2bdcd09ee379a5/apache/docker-entrypoint.sh#L146-L171). Le script tente de se connecter à la base de données et vérifie si une initialisation est nécessaire, en réessayant si la base de données n'est pas encore accessible.
Optimisation de la gestion des volumes
Dans votre composition Docker initiale fichier, vous avez utilisé un conteneur « données uniquement » pour attacher votre volume. Cependant, les versions modernes de Docker (1.9 et supérieures) offrent des fonctionnalités de gestion des volumes. Cela élimine le besoin de conteneurs de données uniquement séparés.
Vous pouvez simplifier votre fichier de composition Docker en supprimant le conteneur de données uniquement et en modifiant le service mongo comme suit :
mongo: image: mongo:latest volumes: - mongodata:/data/db ports: - "28001:27017" command: --smallfiles --rest --auth
Cette configuration créera un volume nommé mongodata s'il n'existe pas déjà, ou réutilisera un volume existant portant ce nom. Vous pouvez gérer les volumes à l'aide des commandes docker volume ls pour le listing et docker volume rm
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!