Cet article fournit un exemple de guide reproductible pas à pas pour faire en sorte que docker compose attende les dépendances d’un conteneur (exemple : MySQL, Postgres, Redis, Mongodb) en utilisant l’outil docker-composer-wait.
L’outil docker-compose-wait est un petit utilitaire en ligne de commande pour attendre que d’autres images docker soient lancées pendant l’utilisation de docker-compose. Il permet d’attendre un nombre fixe de secondes et/ou d’attendre qu’un port TCP soit ouvert sur une image cible.
Comme pour l’outil dockerize
, vous devez ajouter l’outil docker-compose-wait dans votre application Dockerfile.
Sommaire:
Démarrage rapide
# Download a template
git clone https://github.com/kassambara/docker-compose-wait-for-container.git
# Build the demo application
cd docker-compose-wait-for-container/ex01-using-wait-tool
docker-compose build
# Running your app
docker-compose run my_super_app
# Stopping containers and cleaning
docker-compose down
rm -rf mysql
Etape 0 : Télécharger un modèle
# Download a template
git clone https://github.com/kassambara/docker-compose-wait-for-container.git
cd docker-compose-wait-for-container/ex02-using-dockerize-tool
Structure de dossier de projet:
files/docker-compose-wait-for-container/ex01-using-wait-tool
├── docker-compose.yml
└── my_super_app
├── Dockerfile
└── sayhello
Contenu essentiel du projet:
docker-compose.yml
pour gérer tous les services de conteneursmy_super_app
scripts : modèle Dockerfile pour construire votre application. Ici, cette application de démo vous demandera votre nom et vous félicitera ensuite !
Etape 1 : Ajouter l’outil docker-compose-wait au Dockerfile de votre application
Exemple de Dockerfile utilisant l’image alpine
:
FROM alpine:latest
# Add hello scripts
ADD sayhello /sayhello
RUN chmod +x /sayhello
# Add docker-compose-wait tool -------------------
ENV WAIT_VERSION 2.7.2
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait
RUN chmod +x /wait
CMD ["/sayhello"]
Etape 2 : Modifiez votre fichier docker-compose.yml
version: '3.6'
services:
mysql:
image: "mysql:5.7"
container_name: mysql
restart: always
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=your_password
- MYSQL_USER=root
- MYSQL_PASSWORD=your_password
- MYSQL_DATABASE=wordpress
ports:
- "3306:3306"
expose:
- 3306
my_super_app:
build: ./my_super_app
image: "my_super_app:latest"
container_name: my_supper_app
depends_on:
- mysql
command: sh -c "/wait && /sayhello"
environment:
- WAIT_HOSTS=mysql:3306
- WAIT_HOSTS_TIMEOUT=300
- WAIT_SLEEP_INTERVAL=30
- WAIT_HOST_CONNECT_TIMEOUT=30
- La commande
sh -c “/wait && /sayhello”
lancera l’outil wait et ensuite votre application, ici /sayhello. - Quand le docker-compose est lancé (ou Kubernetes ou docker stack ou autre), votre application sera lancée seulement quand toutes les paires host:port de la variable
WAIT_HOSTS
sont disponibles. La variable d’environnementWAIT_HOSTS
n’est pas obligatoire, si elle n’est pas déclarée, le script s’exécute sans attendre. - Pour que votre conteneur d’application Docker attende plusieurs hôtes, la variable d’environnement peut être spécifiée comme ceci par exemple
WAIT_HOSTS=mysql:3306, nginx:80
Options de configuration supplémentaires. Le comportement de l’utilitaire d’attente peut être configuré avec les variables d’environnement suivantes:
- WAIT_HOSTS : liste séparée par des virgules des paires hôte:port pour lesquelles vous voulez attendre.
- WAIT_HOSTS_TIMEOUT : nombre maximum de secondes d’attente pour que tous les hôtes soient disponibles avant l’échec. La valeur par défaut est de 30 secondes.
- WAIT_HOST_CONNECT_TIMEOUT : Le délai d’attente d’une connexion TCP unique à un hôte distant avant de tenter une nouvelle connexion. La valeur par défaut est de 5 secondes.
- WAIT_BEFORE_HOSTS : nombre de secondes à attendre (sleep) avant de commencer à vérifier la disponibilité des hôtes
- WAIT_AFTER_HOSTS : nombre de secondes à attendre (sleep) une fois que tous les hôtes sont disponibles
- WAIT_SLEEP_INTERVAL : nombre de secondes de sommeil entre deux tentatives. La valeur par défaut est 1 seconde.
Etape 3 : Créer et exécuter votre application
# Building your app
cd docker-compose-wait-for-container/ex01-using-wait-tool
docker-compose build
# Running your app
docker-compose run my_super_app
Log de la console:
Après avoir tapé votre nom, vous verrez un message de félicitations de my_super_app
Etape 4 : Arrêt des conteneurs et nettoyage
docker-compose down
rm -rf mysql
Résumé
Cet article décrit comment faire en sorte que docker compose attende les dépendances d’un conteneur à l’aide de l’outil docker-compose-wait.
Version: English
No Comments