Une image Docker PHP avec composer pré-installé

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.