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 :

C'est promis, fini les dockers runs à rallonge yes

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