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 dockerize.
L’outil dockerize vous donne la possibilité d’attendre les services sur un protocole spécifié (file
, tcp
, tcp4
, tcp6
, http
, https
et unix
) avant de démarrer votre application:
dockerize -wait tcp://db:5432 -wait http://web:80 -wait file:///tmp/generated-file
Arguments importants:
- timeout. You can optionally specify how long to wait for the services to become available by using the
-timeout #
argument (Default: 10 seconds). Si le délai d’attente est atteint et que le service n’est toujours pas disponible, le processus se termine avec le code de statut 1. - wait-retry-interval. Le temps de sommeil de dockerize avant de vérifier si les dépendances sont prêtes
dockerize -wait tcp://db:5432 -wait http://web:80 -timeout 10s -wait-retry-interval 3s
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/ex02-using-dockerize-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/ex02-using-dockerize-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 Dockerize 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 dockerize tool -------------------
RUN apk add --no-cache openssl
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
CMD ["/sayhello"]
Utilisez ceci pour l’image Ubuntu:
# Add dockerize tool -------------------
RUN apt-get update && apt-get install -y wget
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
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 "dockerize -wait tcp://mysql:3306 -timeout 300s -wait-retry-interval 30s /sayhello"
En gros, Dockerize est un emballage. dockerize notre_command_normal
appelle juste notre commande. Mais en option, nous pouvons ajouter des paramètres pour retarder l’exécution, créer un template de fichier ou rediriger la sortie des fichiers vers STDOUT/STDERR. Opérations très courantes et utiles dans un monde de Docker.
Exemples de configurations optionnelles de dockerize:
# redirect files to stdout and stderr
dockerize \
-stdout info.log \
-stdout perf.log \
...
# wait for 2 services with 10s timeout
dockerize \
-wait tcp://db:5432 \
-wait http://web:80 \
-timeout 10s \
...
# template option
dockerize \
-template nginx.tmpl:nginx.conf \
...
Etape 3 : Créer et exécuter votre application
# Building your app
cd docker-compose-wait-for-container/ex02-using-dockerize-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 attente pour les dépendances de conteneurs en utilisant l’outil dockerize.
Version: English
No Comments