{{ :informatique:docker:compose:compose.png?nolink&140x138}}
====== Docker Compose ======
===== Objectif =====
Avec compose on peut gérer un ensemble de dockers liés/ou pas entre eux par le biais de fichiers de conf.\\
J'en ai besoin pour :
* Être plus confortable pour gérer mon lot de dockers web avec Traefik. Voir [[:informatique:docker:traefik|]].
* Centraliser (sous git) des fichiers de confs pour la création de mes dockers. Aujourd'hui c'est éparpillé dans le wiki sous forme d'exemples, c'est pas pratique.
C'est promis, fini les dockers runs à rallonge {{http://doku.floriantales.fr/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/thumbs_up.png?nolink&23x23|yes}}
===== Installation =====
On prend la [[https://github.com/docker/compose/releases|dernière release]] de compose et on la place dans notre bin :
sudo -s
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
===== Lancement d'un compose de dockers =====
==== Un fichier de conf ====
Créer un fichier de configuration ''docker-compose.yml'', exemple :
docker-compose.yml
version: '3'
services:
Nginx_1:
image: richarvey/nginx-php-fpm
restart: always
Nginx_2:
image: richarvey/nginx-php-fpm
Puis lancer le compose en mode démon :
docker-compose up -d
{{:informatique:docker:compose:docker_up.png?direct&1600x113}}
==== Plusieurs fichiers de conf ====
Pour gérer plusieurs composes différents, on peut jouer avec une arborescence et l'option -f de compose :
my-project
|
|----> service-a (git submodule)
| |
| -----> docker-compose.yml
|
|----> service-b (git submodule)
| |
| -----> docker-compose.yml
|
-----> docker-compose.yml
Exemple pour vérifier si compose entend bien plusieurs fichiers avec la directive ''config'' qui listera les configurations :
docker-compose -f service-a/docker-compose.yml -f service-b/docker-compose.yml config
La documentation associée : [[https://docs.docker.com/compose/extends/#understanding-multiple-compose-files|docs.docker.com/compose/multiple-compose-files]]
===== Exemples de fichier de conf =====
==== Transposition simple ====
Transposer ce docker run en fichier de conf :
docker run -d --restart=always --name="Nginx_Dokuwiki" \
-p 8081:80 \
-e "PUID=`id -u $USER`" -e "PGID=`id -g $USER`" \
-v /mnt/Raid/Documents_de_Florian/Documents_NAS/Dockers/Docker_Data/Nginx_Dokuwiki/:/var/www/html \
richarvey/nginx-php-fpm
Seul petit bémol, on ne peut pas faire interpréter du code dans le yml. Donc ''id -u $USER'' ne fonctionnera pas. \\ Sinon cela donne :
docker-compose.yml
version: '3'
services:
Nginx_Dokuwiki:
image: richarvey/nginx-php-fpm
restart: always
ports:
- "8081:80"
environment:
- PUID=1000
- PGID=1000
volumes:
- /mnt/Raid/Documents_de_Florian/Documents_NAS/Dockers/Docker_Data/Nginx_Dokuwiki/:/var/www/html
==== Transposition avec construction Dockerfile ====
Remplacer une construction à partir d'un Dockerfile puis le lancement :
docker build --no-cache -t "ma_super_image" .
docker run -d --restart=always --name="mon_super_docker" ma_super_image
Par :
docker-compose.yml
version: "3"
services:
mon_super_service:
build:
context: .
dockerfile: Dockerfile
image: ma_super_image
container_name: mon_super_docker
restart: always
===== Ressources =====
==== Documentation Web ====
La documentation officielle de compose : [[https://docs.docker.com/compose/|docs.docker.com/compose/]] \\
Intérêt : [[http://blog.ippon.fr/2015/03/26/orchestration-de-containers-docker-docker-compose-et-crane/|blog.ippon.fr/orchestration-de-containers-docker-docker-compose-et-crane]] \\
Installation de l'utilitaire (un curl) : [[https://docs.docker.com/compose/install/#install-compose|docs.docker.cominstall-compose]]
==== Github privé ====
Là où je positionne mes configurations compose : [[https://github.com/floriantales/Docker_Composes|github.com/floriantales/Docker_Composes]]