Il existe de nombreuses images docker php
officielles d’un côté, et des images avec composer
de l’autre, mais en développement, on a souvent besoin d’une image php correspondant aux besoins de notre projet, avec composer intégré.
Attention : il est déconseillé d’avoir dans un conteneur de production des outils qui ne sont nécessaire qu’en développement, aussi ce Tips n’est à utiliser qu’en développement et non en production. (
composer
n’ayant rien à faire en production)
La documentation de composer
propose plusieurs façon de l’installer, mais la façon la plus simple est déconseillé en cas de script, quand à l’alternative proposé passe par un script shell quelque peu overkill.
Cette même documentation propose aussi d’installer composer
en une ligne si on se limit à une version précise (numéro de commit sur github). Et pourquoi ne pas utiliser ce type d’installation et d’y ajouter derrière l’appel à la commande self-update pour avoir systématiquement la dernière version ?
Voici donc une proposition de Dockerfile
(à adapter à vos besoins.)
FROM php:alpine MAINTAINER Julien MERCIER <devci@j3ck3l.me> # This Dockerfile build a php image with composer included # It used for this tutorials. # # Reminder : It's not recommanded to have composer installed in container for production # as this is required for developpement only. RUN wget https://raw.githubusercontent.com/composer/getcomposer.org/863c57de1807c99d984f7b56f0ea56ebd7e5045b/web/installer -O - -q | php -- --quiet &&\ mv composer.phar /usr/local/bin/composer && \ composer self-update # Define composer cache directory RUN mkdir -p /tmp/composer && chmod 777 /tmp/composer ENV COMPOSER_CACHE_DIR=/tmp/composer
On peut ensuite construire notre image :
docker build -t php-composer .
Et il n’y a plus qu’à tester :
$> docker run --rm -u $UID:$GID php-composer composer --version Composer version 1.5.6 2017-12-18 12:09:18
Ici, on force en plus le conteneur à utiliser l’utilisateur courant (composer ne devant jamais être utilisé en root
)
Vous pouvez maintenant modifier le FROM
pour utiliser la version de PHP qui convient à votre projet et ajouter les extensions dont vous avez besoin.
Code source disponible sur github.