{{ :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]]