# Docker pour Opentalent Le projet **docker** offre un environnement de développement complet. ## Installer et configurer une instance Docker ### Installer docker #### Installation pour Linux Installer Docker Engine : Et Docker Compose : Faire : docker ps > Si Docker ne marche pas sans "sudo" appliquer : > > `sudo usermod -aG docker $USER` Attention, le VPN peut parfois induire une erreur lors de l'installation de docker avec apt-get, mieux vaut le désactiver le temps de l'installation. ### Première mise en place du projet #### Cloner le projet docker git clone git@gitlab.2iopenservice.com:vincent/docker.git #### Cloner les sous-repos Les repositories suivants doivent être clônés dans les sous-répertoires suivants: | Folder | Repo | SSH | |-----------------------------|---------------------------------------------------------------------------------------|-----------------------------------------------------------------| | apps/opentalent | [Voir le repository](https://gitlab.2iopenservice.com/developper/opentalent) | git@gitlab.2iopenservice.com:developper/opentalent.git | | apps/opentalent-admin-2.0 | [Voir le repository](https://gitlab.2iopenservice.com/vincent/opentalent-admin-2.0) | git@gitlab.2iopenservice.com:vincent/opentalent-admin-2.0.git | | apps/opentalent-config | [Voir le repository](https://gitlab.2iopenservice.com/developper/opentalent-config) | git@gitlab.2iopenservice.com:developper/opentalent-config.git | | apps/opentalent-platform | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/opentalent-platform) | git@gitlab.2iopenservice.com:opentalent/opentalent-platform.git | | apps/ot_typo3 | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/ot_typo3) | git@gitlab.2iopenservice.com:opentalent/ot_typo3.git | | apps/metabase | [Voir le repository](https://gitlab.2iopenservice.com/vincent/metabase) | git@gitlab.2iopenservice.com:vincent/metabase.git | | apps/python-scripts/clonedb | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/clonedb) | git@gitlab.2iopenservice.com:opentalent/clonedb.git | | apps/agenda | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/agenda) | git@gitlab.2iopenservice.com:opentalent/agenda.git | | apps/ap2i | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/ap2i) | git@gitlab.2iopenservice.com:opentalent/ap2i.git | | apps/ap2i-doc | [Voir le repository](https://gitlab.2iopenservice.com/vincent/ap2i-doc) | git@gitlab.2iopenservice.com:vincent/ap2i-doc.git | | apps/app | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/app) | git@gitlab.2iopenservice.com:opentalent/app.git | | apps/app_v3 | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/app_nuxt3) | git@gitlab.2iopenservice.com:opentalent/app_nuxt3.git | | apps/app-doc | [Voir le repository](https://gitlab.2iopenservice.com/vincent/app-doc) | git@gitlab.2iopenservice.com:vincent/app-doc.git | | apps/site_logiciels | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/site_logiciels) | git@gitlab.2iopenservice.com:opentalent/site_logiciels.git | ### Configurer le projet #### Le fichier `.env` Copier le fichier `.env.skeleton` en `.env` (attention à ne pas supprimer le fichier `.env.skeleton`!) Mettre à jour le contenu de `.env` selon votre config: * `OS`: `LINUX` ou `MAC` selon votre système d'exploitation * EMAIL Les autres variables peuvent être laissées telles quelles. > Nb: le hash de contrôle `COMPOSER_HASH` change à chaque nouvelle version de composer. Si la version de composer > installée sur les containers change, cette variable doit être mise à jour avec la clé indiquée ici: https://getcomposer.org/download/ #### Le fichier `/etc/hosts` Les domaines locaux doivent être enregistrés sur la machine hôte (=votre machine). Pour cela, ajouter les lignes suivantes à votre fichier `/etc/hosts`: 127.0.0.1 local.api.opentalent.fr # Docker 'php70' 127.0.0.1 local.mailcatcher.opentalent.fr # Docker 'mailcatcher' 127.0.0.1 local.v59.opentalent.fr # Docker 'adminassos' 127.0.0.1 local.phpmyadmin.opentalent.fr # Docker 'phpmyadmin' 127.0.0.1 local.elasticsearch.opentalent.fr # Docker 'es' 127.0.0.1 local.admin.opentalent.fr # Docker 'admin' 127.0.0.1 local.thumbor.opentalent.fr # Docker 'thumbor' 127.0.0.1 local.sub.opentalent.fr # Docker 'typo3' 127.0.0.1 local.agenda.opentalent.fr # Docker 'agenda' 127.0.0.1 local.blackfire.opentalent.fr # Docker 'blackfire' 127.0.0.1 local.metabase.opentalent.fr # Docker 'metabase' 127.0.0.1 local.ap2i.opentalent.fr # Docker 'ap2i-doc' 127.0.0.1 local.ap2i-doc.opentalent.fr # Docker 'ap2i-doc' 127.0.0.1 local.app.opentalent.fr # Docker 'app' 127.0.0.1 local.app-doc.opentalent.fr # Docker 'app-doc' 127.0.0.1 local.mercure.opentalent.fr # Docker 'mercure' 127.0.0.1 local.logiciels.opentalent.fr # Docker 'logiciels' 127.0.0.1 local.maestro.opentalent.fr # Docker 'maestro' 127.0.0.1 local.nuxt_common.opentalent.fr # Docker 'nuxt_common' > Attention: les domaines indiqués ici doivent correspondre aux domaines définis dans le fichier `.env` #### Les certificats SSL Pour permettre l'usage de l'HTTPS, il faut générer des certificats pour les domaines locaux. Lancer les commandes suivantes : chmod +x docker/nginx-proxy/certs/ssl_keys.sh sh docker/nginx-proxy/certs/ssl_keys.sh Vérifier ensuite la prise en compte des certificats: docker-compose build docker-compose up > Si `docker up` bloque à cause du port 80 : vérifier qu'aucun programme sur votre machine n'écoute le port 80 (Apache est souvent coupable...): Faire ensuite un `docker stop $(docker ps -a -q)` ### Synchroniser les données en local #### Bases de données Pour synchroniser les DB, on utilise [clonedb](https://gitlab.2iopenservice.com/opentalent/clonedb). Cet utilitaire est préinstallé sur le container `python39` Pour l'exécuter: docker exec -it python39 bash cd clonedb Puis, pour synchroniser toutes les bases (recommandé si c'est la première synchronisation) : python3 clonedb.py Ou, pour synchroniser seulement une ou plusieurs bases : python3 clonedb.py [operation] L'opération est le nom défini à la section 'operations' du fichier /env/clonedb/settings.yml Pour plus d'infos: https://gitlab.2iopenservice.com/opentalent/clonedb/blob/master/readme.md #### Elasticsearch Pour clôner l'index elasticsearch, plusieurs options. ##### Avec elasticdump Se connecter au docker php70: docker exec -it php70 bash Puis lancer: npm install elasticdump@3.3.7 -g elasticdump --input http://elasticsearch.2iopenservice.com:9200//search --output http://es:9200/search_bkp --type=analyzer elasticdump --input http://elasticsearch.2iopenservice.com:9200//search --output http://es:9200/search_bkp --type=mapping Pour synchroniser les données complètes (nécessite un bon débit descendant et de l'espace disque disponible pour 50 à 100 Go): elasticdump --input http://elasticsearch.2iopenservice.com:9200// --input-index=search --output http://es:9200/ --output-index=search_dump --type=data Pour synchroniser les données d'un type spécifique: elasticdump --input http://elasticsearch.2iopenservice.com:9200// --input-index=search//course --output http://es:9200/ --output-index=search_dump//course --type=data ##### Avec fos:elastica Regénérer un index complet. Nécessite de l'espace disque disponible pour 50 à 100 Go, peut nécessiter plusieurs jours de traitement. Se connecter au docker php70: docker exec -it php70 bash Puis lancer: app/console fos:elastica:populate --process-isolation --no-debug Poue ne générer que certains types, lancer: php app/console fos:elastica:populate --index search --process-isolation --no-debug --no-reset --type organization php app/console fos:elastica:populate --index search --process-isolation --no-debug --no-reset --type access ### Finaliser et exécuter #### Docker php70 Se connecter a php70 docker exec -it php70 bash Installer les vendor: php composer.phar install A la première exécution, composer va demander certains paramètres. Vous pouvez tout laisser par défaut, sauf: database_host: db database_port: 3306 database_password: mysql660 database_host_cms: db database_port_cms: 3306 database_password_cms: mysql660 locale: fr elastic_search_host: es thumbor_url: 'http://thumbor' typo3_base_url: 'http://typo3/' Si le fichier app/config/parameters.yaml vient d'être créé, il est possible que la commande suivante doive-t être exécutée: chown 1000:1000 /var/www/html/app/config/parameters.yml Puis mettre à jour le schéma de la DB: app/console d:s:u --force Enfin, afin de prévenir des erreurs de permission: chmod -R 777 /var/www/html/app/cache/ À ce niveau, la page de documentation d'API Platform devrait être accessible à l'adresse #### Docker admin Se connecter au docker: docker exec -it admin bash Lancer npm install npm install Lancer Bower install bower install Lancer le serveur front: gulp serve ## Erreur au moment du Gulp serve Si l'erreur "SyntaxError: Unexpected toker {" apparait au moment du gulp serve. Il faut faire : npm uninstall -g gulp-cli gulp npm install -g gulp@3.9.1 #### Docker Ap2i Se connecter au docker: docker exec -it ap2i bash Puis lancer : composer install echo "APP_ENV=docker" > .env.local apt install wkhtmltopdf #### Docker App Se connecter au docker: docker exec -it app bash Puis lancer : yarn install ln -s .env.docker .env #### Docker agenda Se connecter au docker: docker exec -it agenda bash Puis lancer : yarn install ln -s .env.docker .env #### Docker Site Logiciels Se connecter au docker: docker exec -it site_logiciels bash Puis lancer : yarn install ln -s .env.docker .env #### Docker typo3 Se déplacer dans le sous-répertoire ot_typo3/docker: cd apps/ot_typo3/docker Puis exécuter : sh clone-install.sh Enfin, revenir à la racine du projet: cd ../../.. > Plus d'infos ici: #### Docker python-scripts Exécuter : pip3 install -r requirements.txt #### Docker maestro Se connecter au docker: docker exec -it maestro bash Puis lancer : symfony console d:d:c symfony console d:m:m symfony console d:f:l symfony console serve -d Connexion : user: admin@mail.fr mdp: admin #### (optionnel) Docker phpdoc Pour générer la PHP-DOC de l'API : docker run --rm -v /opt/opentalent/apps/api/src/:/data -v /opt/opentalent/apps/apidoc:/output phpdoc/phpdoc:3.1 -d /data -t /output La documentation devrait ensuite être accessible à: ## Démarrer les dockers Pour démarrer une instance docker complète, se placer dans le répertoire de votre projet docker, puis lancer: docker-compose up ### Démarrer le serveur admin Patienter quelques secondes, puis dans un nouveau terminal, lancer: gulp serve ### Démarrer le serveur app Si vous ne l'avez pas encore fait, créer le symlink vers le fichier d'environnement : ln -s .env.docker .env Puis, lancer: yarn dev ## Description des containers #### Docker: `nginx-proxy` Gère le routage de toutes les requêtes envoyées au ports 80 et 443 de la machine hôte et les redirige vers le container cible. #### Docker: `mariaDb` Héberge les bases de données MariaDb de tous les containers. Les autres dockers peuvent ensuite accéder au serveur de base de données de cette manière: ||| | --- | ---| | Db Host | db | | Login | root | | Pass | mysql660 | #### Docker: `nginx` TODO : à quoi il sert ? #### Docker: `php70` Héberge la partie back du logiciel : Ce container embarque une installation de php-fpm v7.0. #### Docker: `nginx_new` TODO : à quoi il sert ? #### Docker: `ap2i` Serveur sur lequel est présent la version Symfony 5.3 du Back. Penser à copier le dossier ap2i/jwt vers config #### Docker: `mercure` Serveur [Caddy](https://caddyserver.com/) servant de hub [Mercure](https://mercure.rocks/) #### Docker: `python39` Héberge différents scripts python, dont [clonedb](https://gitlab.2iopenservice.com/opentalent/clonedb). Embarque une installation de python3.9. #### Docker: `admin` Héberge l'application frontend Opentalent, version pré-2021: #### Docker: `app` Héberge l'application frontend Opentalent v2: #### Docker: `typo3` Héberge une instance Typo3 version 9.5, qui sert tous les mini-sites des clients. #### Docker: `adminassos` TODO: à quoi il sert? #### (optionnel) Docker: `metabase` TODO: à quoi il sert? #### Docker: `es` Héberge une instance elasticsearch TODO: à compléter #### Docker: `thumbor` Héberge une instance [thumbor](http://thumbor.org/) dont le rôle est de fournir des fichiers via une API. #### (optionnel) Docker: `phpmyadmin` Héberge une instance phpmyadmin #### (optionnel) Docker: `mailcatcher` TODO: à quoi il sert? #### (optionnel) Docker: `blackfire` Héberge une instance blackfire, utilisée pour l'analyse des performances des dockers php #### (optionnel) Docker: `phpdoc` Héberge une instance phpdoc, qui permet ensuite de générer des documentations automatiques à partir du code PHP. #### (optionnel) Docker: `jsdoc` TODO: à quoi il sert? #### (optionnel) Docker: `site_logiciels` Site internet présentant les logiciels de l'entreprise > Prod: logiciels.opentalent.fr ## Configuration du réseau ### Réseau et adresses IP La section `networks` du docker-compose permet de configurer un réseau interne auxquel pourront appartenir les containers. > Voir: https://docs.docker.com/compose/networking/ > https://docs.docker.com/compose/compose-file/compose-file-v3/#networks Ici, on définit un seul réseau nommé `network`, au sein duquel les ips seront de la forme `172.20.[0-255].[1-254]` Pour qu'un container puisse appartenir au réseau, sa définition doit comporter une entrée de cette forme : networks: - network On pourra aussi assigner une IP fixe à un container en précisant cette configuration, par exemple : networks: network: ipv4_address: 172.20.2.2 ### Attribution des ports Les ports de l'hôte peuvent être assignés aux ports d'un container en ajoutant une section `ports` à la définition du container. Exemple : ports: - "3001:3000" - "3002:3001" Ces entrées sont de la forme : `:` Dans l'exemple précédent, une requête reçue sur le port 3001 par la machine hôte sera dirigée vers le port 3000 du container. ### Proxy : le docker nginx-proxy La configuration du fichier `hosts` permet de rediriger certaines url locales (ex: `local.api.opentalent.fr`) vers la machine locale (i.e. `localhost`). > Voir: https://gitlab.2iopenservice.com/opentalent/docker/-/blob/master/README.md#le-fichier-etchosts Le container `nginx-proxy` est configuré pour recevoir les requêtes des ports 80 et 443 de la machine hôte, et reçoit donc les requêtes adressées aux urls locales. [Ce container est configuré](https://hub.docker.com/r/jwilder/nginx-proxy/#!) pour identifier tous les containers de son réseau pour lesquels une variable d'env `VIRTUAL_HOST` a été définie, et redirigera les requêtes d'une url au container dont le vhost correspond. Les virtual hosts sont définis dans le fichier `.env`. Pour attribuer un nom d'hôte à un container, on ajoute ensuite dans le `docker-compose.yml` une entrée de cette forme à sa configuration : environment: - VIRTUAL_HOST=${SOME_VIRTUAL_HOST} Pour utiliser un autre port que le port 80, on peut ajouter une variable `VIRTUAL_PORT` : environment: - VIRTUAL_HOST=${SOME_VIRTUAL_HOST} - VIRTUAL_PORT=${SOME_PORT} ### Nom des hôtes et aliases réseau Sur leur réseau interne, les noms d'hôtes des containers sont définis via l'entrée `hostname` de leur configuration. Généralement, ces hostnames sont identiques à leurs noms de container. > Exemple : pour adresser une requête au docker `db`, le container `api` enverra sa requête à l'adresse `http://db` Il est cependant possible d'attribuer des aliases aux containers, ex : networks: network: aliases: - docker.sub.opentalent.fr Ainsi configuré, le docker sera joignable sur le réseau interne à l'adresse `http://docker.sub.opentalent.fr`. ### Attribution des ports et IPs | Container | hostname | In Network ? | IP fixe | Ports | VIRTUAL_HOST / PORT | Aliases | |-------------|-------------|--------------|------------|------------------------|------------------------------------------|-------------------------------------------------------| | nginx-proxy | nginx-proxy | O | - | 80:80, 443:443 | - | - | | db | db | O | 172.20.1.3 | 3306:3306 | - | - | | nginx | nginx | O | - | - | local.api.opentalent.fr | docker.nginx.opentalent.fr | | php70 | php70 | O | 172.20.1.1 | - | - | - | | nginx_new | nginx_new | O | - | - | local.ap2i.opentalent.fr | - | | ap2i | ap2i | O | 172.20.2.1 | - | - | - | | mercure | mercure | O | 172.20.4.0 | - | local.mercure.opentalent.fr | - | | python39 | python39 | O | 172.20.4.1 | - | - | - | | admin | admin | O | 172.20.1.2 | 3000:3000, 3001:3001 | local.admin.opentalent.fr / 3000 | - | | app | app | O | 172.20.2.2 | 3002:3000, 3003:3003 | local.app.opentalent.fr / 3002 | - | | app_v3 | app_v3 | O | 172.20.2.3 | 3009:3000, 24678:24678 | local.app-v3.opentalent.fr / 3000 | - | | agenda | agenda | O | 172.20.2.5 | 3007:3000, 24679:24679 | local.agenda.opentalent.fr / 3000 | - | | site_logiciels | site_logiciels | O | 172.20.2.6 | 3010:3000, 24680:24680 | local.logiciels.opentalent.fr / 3000 | - | | typo3 | typo3 | O | 172.20.3.1 | - | local.sub.opentalent.fr | docker.sub.opentalent.fr, docker.sub.customdomain.fr | | adminassos | adminassos | O | - | - | local.v59.opentalent.fr | - | | metabase | metabase | O | - | - | local.metabase.opentalent.fr / 3000 | - | | es | es | O | - | - | local.elasticsearch.opentalent.fr / 9200 | - | | thumbor | thumbor | O | - | - | local.thumbor.opentalent.fr | - | | phpmyadmin | phpmyadmin | O | - | - | local.phpmyadmin.opentalent.fr | - | | memcached | memcached | X | - | - | - | - | | mailcatcher | mailcatcher | O | - | 1025:1025 | local.mailcatcher.opentalent.fr / 1080 | - | | blackfire | blackfire | O | - | - | local.blackfire.opentalent.fr / 8707 | - | | phpdoc | phpdoc | O | - | - | local.ap2i-doc.opentalent.fr | - | | jsdoc | jsdoc | O | - | - | local.app-doc.opentalent.fr | - | ## Opérations courantes #### Ajouter un certificat SSL pour un nouveau domaine local Si les dockers sont up, tout arrêter : docker-compose stop Ajouter les lignes suivantes au fichier docker/nginx-proxy/certs/ssl_keys.sh cp docker/nginx-proxy/certs/default.key docker/nginx-proxy/certs/.key cp docker/nginx-proxy/certs/default.crt docker/nginx-proxy/certs/.crt en remplaçant `` par le nom de domaine attendu. Exécuter le script depuis la racine du projet docker : sh docker/nginx-proxy/certs/ssl_keys.sh Supprimer le docker nginx-proxy, puis re-builder: docker-compose rm nginx-proxy docker-compose build --no-cache Puis relancer docker. ## Problèmes et solutions #### Certificat SSL refusé par Chrome Pour que le certificat soit validé sur chrome, allez à l'adresse cible, ouvrir la console de debugger et entrer : console.log(window.atob('dGhpc2lzdW5zYWZl')); Cliquer ensuite n'importe où sur la page, et taper le mot qui s'est affiché dans la console précédemment. #### Page blanche sur local.admin.opentalent.fr Lorsque vous demandez la page http://local.admin.opentalent.fr/#/login , la page reste blanche, et le message d'erreur suivant s'affichent dans la console : Uncaught Error: Cannot find module "@opentalent/ruler/lib/model/rule.class" Accéder au container adminLegacy: docker exec -it admin bash Puis exécuter: cd modules/ruler && jison -t rule.jison && babel --presets=es2015 model/**/*.js model/*.js -d lib && npm link && cd ../.. && npm link @opentalent/ruler Enfin, relancer: gulp serve #### Problème de permission lors de l'accès à local.api.opentalent.fr/ Lorsque vous demandez la page https://local.api.opentalent.fr/doc, une erreur php s'affiche, avec un message similaire à ceci : RuntimeException in ClassCollectionLoader.php line 280: Cache directory "/var/www/html/app/cache/dev" is not writable. Accéder au docker php70 : docker exec -it php70 bash Puis exécuter : chmod -R 777 /var/www/html/app/cache/ #### L'accès SSH est refusé depuis docker Lorsque l'un de vos containers essaie d'accéder à un serveur extérieur en SSH, l'accès est refusé. Vérifier d'abord que le répertoire ~/.ssh de votre machine a bien été copié dans le docker à l'emplacement: `/root/.ssh` Si ce n'est pas le cas, ajouter la ligne suivante au Dockerfile concerné: COPY /.ssh /root/.ssh Et relancer un: docker-compose build Si le problème persiste, vérifier que les droits du répertoire .ssh sont identiques à ceci: drwxr-xr-x 1 root root 4096 Feb 24 16:01 . drwx------ 1 root root 4096 May 10 12:04 .. -rw-r--r-- 1 root root 0 Mar 18 2020 .gitkeep -rw------- 1 root root 887 Mar 18 2020 id_rsa -rw------- 1 root root 1678 Mar 18 2020 id_rsa_exploitation -rw-r--r-- 1 root root 397 May 15 2020 id_rsa_exploitation.pub -rw-r--r-- 1 root root 888 May 12 14:19 known_hosts #### Erreur de type 'table not found' ou 'column not found' Accéder au docker php70: docker exec -it php70 bash Lancer: app/console d:s:u --force #### Une modification des annotations Doctrine n'est pas prise en compte Suite à une modification des annotations, il faut forcer un vidage du cache symfony: Accéder au docker php70: docker exec -it php70 bash Lancer: rm -r app/cache/* chmod -R 777 app/cache/ Puis quitter le docker: exit et le redémarrer: docker restart #### Erreur liée à l'index Elasticsearch (events, champs de recherche...) Pour régénérer l'index elasticsearch: Accéder au docker php70: docker exec -it php70 bash Lancer, puis interrompre dès qu'il commence à populate les organizations : php app/console fos:elastica:populate --index search Se rendre sur l'interface graphique elasticsearch, et se connecter à https://local.elasticsearch.opentalent.fr/ > Attention à ce que le navigateur ne bloque pas le certificat SSL, essayez d'abord d'ouvrir > https://local.elasticsearch.opentalent.fr/ dans un onglet à part Supprimer l'alias `search` de l'index qui le porte, et ajouter ce même alias à l'index nouvellement créé #### L'adresse Ip publique de docker n'est pas celle du vpn Faire, dans cet ordre précis: 1. Couper le VPN 2. Couper le service docker: sudo systemctl stop docker 3. Redémarrer le VPN 4. Redémarrer docker sudo systemctl start docker #### Une application nuxt.js (app / agenda / site_logiciels) ne démarre pas : error 504 memory Vérifier que le fichier .env existe dans le projet. Sinon : ln -s .env.local .env #### Le front affiche une erreur 401: "Request failed with status code 401" Il suffit de se loguer pour résoudre cette erreur: local.admin.opentalent.fr/#/login Si on est déjà authentifié côté back, vérifier qu'on accède bien au front en https, sans quoi les cookies opentalent.fr ne seront pas accessibles. #### Un container ne se build pas correctement Il faut récupérer l'ID du container : - lancer docker-compose up - ensuite vous faites un docker ps - vous récupérez l’id du container qui ne marche pas bien Supprimer le container : docker rm ID_CONTAINER --force Récupérer l'ID de l'image qui servira à construire le container : - docker stop $(docker ps -aq) - ensuite docker images - vous récupérez l’id de l’image qui servira à construire le container Supprimer l'image : docker rmi ID_IMAGE --force Vider le cache du Builder : docker builder prune On relance le compose docker-compose up ## Quelques commandes docker utiles # Build docker compose docker-compose build # Lancer le docker-compose == lancer les containers docker-compose up # Stopper le docker-compose == stopper les containers docker-compose stop # Stopper tous les containers quelque soit le docker-compose docker stop $(docker ps -a -q) # Supprimer tous les container Docker docker rm $(docker ps -a -q) # Supprimer toutes les images Docker docker rmi $(docker images -q) # Lister les proccess Docker docker ps # Lister les containers actifs docker container ls # Lister tous les containers docker container ls -a # Lister les images docker images # Entrer dans un container en bash docker exec -it db bash ==> db étant le container name que l'on retrouve en faisant docker ps # Docker compose a une facheuse tendance à conserver des config entre chaque lancement (comme la config de la BDD) # si par exemple, on arrive pas à se connecter à la BDD à cause d'un Access Denied, il faut faire: docker-compose rm -v ## Initialisation de docker-sync (pour MAC et Windows) Docker sync va créer des containers intermédiaires qui contiendront le code de l'application. Ces containers seront synchronisés avec le code de la machine hôte. La stack "normale" ira récupérer le code dans ces containers et plus directement sur la machine hôte == gain de temps en lecture/écriture #### Définir les dossiers à synchroniser Créer un fichier docker-sync.yml contenant les dossiers à synchroniser : pour mac privilégier la stratégie native_osx (par défaut) pour le code de l'application. Pour les vendors et node paquets, préférer le Rsync. #### Créer un fichier docker-compose-dev.yml Ce fichier contiendra la surcharge nécessaire pour faire correspondre les emplacements du code/vendors avec les volumes externes se rapportant aux containers crées par le docker-sync. #### Les bonnes manipulations à effectuer pour une initialisation ou un reset docker-compose stop docker-sync stop docker-sync clean Il faut pouvoir supprimer tous les volumes qui ont été générés par un docker-sync précédent : pour cela on commence par supprimer les containers utilisant les volumes via 3 commandes : docker ps -as === liste les containers docker volume ls === liste les volumes docker rm app === supprime un container Si on est sur MAC, le docker deskop fournit une interface graphique qui nous aide à faire cette opération. Une fois tous les containers désirés supprimés, on supprime les volumes qui ne sont utilisés par aucun container docker volume prune Une fois que tout est clean, on commence par faire un docker-compose up On se connecte à chaque container possédant un dossier vendor/node_modules et on passe les commandes composer install ou npm/yarn install (idem si bower) Une fois l'install ok, on stop docker-compose : docker-compose stop On peut alors lancer docker-sync-stack start