Chaque projet a ses propres caractéristiques, ses propres extensions. Si entre chaque client vous ne faites qu’ajouter des choses sur votre container, il va finir pas être immense. Nous allons voir comment faire pour avoir une config pour votre client, sans avoir une image pour chacun d’entre eux. Une simple image Docker PHP ne sera pas suffisante.
Concept
Nous allons tout simplement lancer un script au démange de container pour installer les dépendances du client. Nous partirons d’une image de base kiora/tools. C’est une image PHP avec des extensions, sudo, un utilisateur, composer… (venez ici pour voir le détail).
Mais c’est surtout un autre projet qui va beaucoup nous simplifier la tâche docker-php-exetention-installer. Ce projet permet d’installer très simplement une extension Docker.
install-php-extensions yaml redis
Lancement d’un script au démarrage du container
Nous allons utiliser la même technique que Utiliser un mot de passe redis via docker-compose, le lancement d’une commande au démarrage de container.
tools:
image: kiora/tools:latest
ports:
- 3000:3000
volumes:
- ./${CLIENT}.sh:/usr/local/bin/php_command
command: php_command
restart: always
Cette image expose le port 3000, pour les projets front.
Nous allons monter le script de notre client et le lancer au démarrage du container. Cela va ralentir le 1er démarrage, car il y aura l’installation des dépendances supplémentaire.
Voici un exemple de script (mon_client.sh):
sudo -E /bin/bash /usr/local/bin/install-php-extensions yaml redis
sudo npm install -g mjml
/init.sh
Nous allons installer l’extension yaml et redis, une dépendance npm puis lancer le script initial de l’image.
Trop cool, notre container Docker PHP a deux extensions supplémentaires !