Geen omschrijving

Olivier Massot b799b16004 Merge branch 'V8-7102-upgrade-app-vers-node-23' 9 maanden geleden
.ssh 849b841cdb id_rsa_exploitation keys 5 jaren geleden
apps cd54a95e5e docker install 6 jaren geleden
docker 0d5c28f5dc upgrade node to 23 and remove obsolete dockers 9 maanden geleden
useruploaddata b2c29748f6 Add user upload diredtory for 5.9 5 jaren geleden
.DS_Store e5a1059053 blackfire 6 jaren geleden
.dockerignore 3612c191d1 first implementation for new typo3 docker 5 jaren geleden
.env.skeleton 0d5c28f5dc upgrade node to 23 and remove obsolete dockers 9 maanden geleden
.gitignore c821d8c9ed minor fixes 2 jaren geleden
Makefile.skeleton 65aa6d1fb6 fusion agenda-frames 2 jaren geleden
README.md 0d5c28f5dc upgrade node to 23 and remove obsolete dockers 9 maanden geleden
docker-compose-osx.yml 7e728be7a7 add agenda, portail config docker-compose mac 1 jaar geleden
docker-compose.yml 0d5c28f5dc upgrade node to 23 and remove obsolete dockers 9 maanden geleden
icon.svg 69a442a3cc temp fix for xdebug+php8 bug on ap2i 1 jaar geleden
logo.png d29d5ca547 add frames docker 4 jaren geleden

README.md

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 : https://docs.docker.com/install/linux/docker-ce/ubuntu/
Et Docker Compose : https://docs.docker.com/compose/install/

Faire :

docker ps

Si Docker ne marche pas sans "sudo" appliquer : https://techoverflow.net/2017/03/01/solving-docker-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket/ 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 git@gitlab.2iopenservice.com:developper/opentalent.git
apps/opentalent-admin-2.0 Voir le repository git@gitlab.2iopenservice.com:vincent/opentalent-admin-2.0.git
apps/opentalent-config Voir le repository git@gitlab.2iopenservice.com:developper/opentalent-config.git
apps/opentalent-platform Voir le repository git@gitlab.2iopenservice.com:opentalent/opentalent-platform.git
apps/ot_typo3 Voir le repository git@gitlab.2iopenservice.com:opentalent/ot_typo3.git
apps/metabase Voir le repository git@gitlab.2iopenservice.com:vincent/metabase.git
apps/python-scripts/clonedb Voir le repository git@gitlab.2iopenservice.com:opentalent/clonedb.git
apps/agenda Voir le repository git@gitlab.2iopenservice.com:opentalent/agenda.git
apps/ap2i Voir le repository git@gitlab.2iopenservice.com:opentalent/ap2i.git
apps/ap2i-doc Voir le repository git@gitlab.2iopenservice.com:vincent/ap2i-doc.git
apps/app Voir le repository git@gitlab.2iopenservice.com:opentalent/app.git
apps/app_v3 Voir le repository git@gitlab.2iopenservice.com:opentalent/app_nuxt3.git
apps/app-doc Voir le repository git@gitlab.2iopenservice.com:vincent/app-doc.git
apps/site_logiciels Voir le repository 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...): https://linuxize.com/post/check-listening-ports-linux/

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. 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 https://local.api.opentalent.fr/doc

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: https://gitlab.2iopenservice.com/opentalent/ot_typo3/-/blob/master/doc/docker.md

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 à: http://local.api-doc.opentalent.fr

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 : https://gitlab.2iopenservice.com/opentalent/opentalent-platform

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 servant de hub Mercure

Docker: python39

Héberge différents scripts python, dont clonedb.

Embarque une installation de python3.9.

Docker: admin

Héberge l'application frontend Opentalent, version pré-2021: https://gitlab.2iopenservice.com/vincent/opentalent-admin-2.0/-/tree/master-front

Docker: app

Héberge l'application frontend Opentalent v2: https://gitlab.2iopenservice.com/opentalent/app

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 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 : <port de l'hôte>:<port du container>

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é 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/<my-domain.fr>.key
cp docker/nginx-proxy/certs/default.crt docker/nginx-proxy/certs/<my-domain.fr>.crt

en remplaçant <my-domain.fr> 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