Commandes de Docker Compose
Démarrer les services
Nous avons vu comment créer un fichier Docker Compose, mais sans utiliser la commande associée, il ne sert pas à grand chose. Eh bien cette commande c'est docker compose
. Elle-ci permet de faire plusieurs choses, en particulier les mêmes manipulations que la commande docker
, mais pour un groupe de conteneur.
Pour démarrer les services d'un fichier docker-compose.yml (c'est le fichier par défaut qui est lu par docker compose
) on peut simplement lancer la commande docker compose up
. Par exemple sur un fichier Docker Compose très basique (qui démarre simplement une registry Docker):
version'3'
services
registry
image registry2
container_name registry
$ docker compose up
Creating registry ... done
Attaching to registry
registry | time="2019-01-13T17:04:01.922076394Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.922448703Z" level=info msg="Starting upload purge in 27m0s" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.922633856Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.932827813Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.933478222Z" level=info msg="listening on [::]:5000" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
On peut constater que la commande docker compose
nous attache par défaut à la sortie de notre conteneur (on voit ici les logs de la registry). Comme pour la commande docker run
, on peut simplement rajouter l'option -d
pour lancer les conteneurs en arrière plan.
On peut donc relancer la commande précédente avec cette option, et éventuellement accéder aux logs de notre conteneur par la suite :
$ docker compose up -d
Starting registry ... done
$ docker compose logs
Attaching to registry
registry | time="2019-01-13T17:04:01.922076394Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.922448703Z" level=info msg="Starting upload purge in 27m0s" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.922633856Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.932827813Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:04:01.933478222Z" level=info msg="listening on [::]:5000" go.version=go1.11.2 instance.id=286f7beb-a74d-47e4-9c88-625a6984bd7f service=registry version=v2.7.0
registry | time="2019-01-13T17:08:11.030997995Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.11.2 instance.id=ad81362b-2e78-4039-b21c-9b8d837948c8 service=registry version=v2.7.0
registry | time="2019-01-13T17:08:11.031106558Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=ad81362b-2e78-4039-b21c-9b8d837948c8 service=registry version=v2.7.0
registry | time="2019-01-13T17:08:11.031174581Z" level=info msg="Starting upload purge in 52m0s" go.version=go1.11.2 instance.id=ad81362b-2e78-4039-b21c-9b8d837948c8 service=registry version=v2.7.0
registry | time="2019-01-13T17:08:11.04644768Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=ad81362b-2e78-4039-b21c-9b8d837948c8 service=registry version=v2.7.0
registry | time="2019-01-13T17:08:11.046715056Z" level=info msg="listening on [::]:5000" go.version=go1.11.2 instance.id=ad81362b-2e78-4039-b21c-9b8d837948c8 service=registry version=v2.7.0
Filtrer les actions
Avec la commande docker compose
, il est possible de spécifier en paramètre le ou les services qui sont concernés par l'action. Par défaut tout les services du fichier docker-compose.yml sont pris en compte. Par exemple on ajoute un service très simple à notre docker-compose.yml précédent.
version'3'
services
registry
image registry2
container_name registry
traefik
image traefik
container_name traefik
On peut ne démarrer que ce service traefik
avec la commande :
docker compose up -d traefik
Changer l'état des conteneurs
De la même manière que la commande docker
, il est possible de changer l'état des conteneurs de notre fichier avec la commande docker compose
. Sans revenir en détail sur leurs effets (les mêmes que avec la commande docker
, mais sur un groupe de conteneurs), les actions suivantes sont possibles :
docker compose start
qui démarre les conteneurs (si ils avaient été arrêtés)docker compose stop
qui stoppe l'execution des conteneursdocker compose restart
qui permet de redémarrer les conteneurs qui sont actuellement en fonctionnement
Manipulations
Maintenant que nous savons écrire un fichier Docker Compose et que l'on connaît les commandes de bases, vous pouvez essayer de reproduire, via Docker Compose certains exercices précédemment réalisés dans ce cours.