Table des matières
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 Traefic Reverse Proxy.
- 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
Installation
On prend la 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
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 : 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 : docs.docker.com/compose/
Intérêt : blog.ippon.fr/orchestration-de-containers-docker-docker-compose-et-crane
Installation de l'utilitaire (un curl) : docs.docker.cominstall-compose
Github privé
Là où je positionne mes configurations compose : github.com/floriantales/Docker_Composes