Cela pourrait être peut-être une question triviale, mais la lecture de documents pour ARG et ENV ne me clarifie pas les choses.
Je construis un conteneur PHP-FPM et je souhaite donner la possibilité d'activer / désactiver certaines extensions en fonction des besoins des utilisateurs.
Ce serait formidable si cela pouvait être fait dans le Dockerfile en ajoutant des conditions et en passant des indicateurs sur la commande de construction peut-être, mais AFAIK n'est pas pris en charge.
Dans mon cas et mon approche personnelle est d'exécuter un petit script au démarrage du conteneur, quelque chose comme ce qui suit:
#!/bin/sh
set -e
RESTART="false"
# This script will be placed in /config/init/ and run when container starts.
if [ "$INSTALL_XDEBUG" == "true" ]; then
printf "\nInstalling Xdebug ...\n"
yum install -y php71-php-pecl-xdebug
RESTART="true"
fi
...
if [ "$RESTART" == "true" ]; then
printf "\nRestarting php-fpm ...\n"
supervisorctl restart php-fpm
fi
exec "$@"
Voici à quoi Dockerfile
ressemble mon :
FROM reynierpm/centos7-supervisor
ENV TERM=xterm \
PATH="/root/.composer/vendor/bin:${PATH}" \
INSTALL_COMPOSER="false" \
COMPOSER_ALLOW_SUPERUSER=1 \
COMPOSER_ALLOW_XDEBUG=1 \
COMPOSER_DISABLE_XDEBUG_WARN=1 \
COMPOSER_HOME="/root/.composer" \
COMPOSER_CACHE_DIR="/root/.composer/cache" \
SYMFONY_INSTALLER="false" \
SYMFONY_PROJECT="false" \
INSTALL_XDEBUG="false" \
INSTALL_MONGO="false" \
INSTALL_REDIS="false" \
INSTALL_HTTP_REQUEST="false" \
INSTALL_UPLOAD_PROGRESS="false" \
INSTALL_XATTR="false"
RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum install -y \
yum-utils \
git \
zip \
unzip \
nano \
wget \
php71-php-fpm \
php71-php-cli \
php71-php-common \
php71-php-gd \
php71-php-intl \
php71-php-json \
php71-php-mbstring \
php71-php-mcrypt \
php71-php-mysqlnd \
php71-php-pdo \
php71-php-pear \
php71-php-xml \
php71-pecl-apcu \
php71-php-pecl-apfd \
php71-php-pecl-memcache \
php71-php-pecl-memcached \
php71-php-pecl-zip && \
yum clean all && rm -rf /tmp/yum*
RUN ln -sfF /opt/remi/php71/enable /etc/profile.d/php71-paths.sh && \
ln -sfF /opt/remi/php71/root/usr/bin/{pear,pecl,phar,php,php-cgi,phpize} /usr/local/bin/. && \
mv -f /etc/opt/remi/php71/php.ini /etc/php.ini && \
ln -s /etc/php.ini /etc/opt/remi/php71/php.ini && \
rm -rf /etc/php.d && \
mv /etc/opt/remi/php71/php.d /etc/. && \
ln -s /etc/php.d /etc/opt/remi/php71/php.d
COPY container-files /
RUN chmod +x /config/bootstrap.sh
WORKDIR /data/www
EXPOSE 9001
Voici le référentiel complet si vous avez besoin de regarder en profondeur pour comprendre comment je fais les choses
Actuellement, cela fonctionne mais ... Si je veux ajouter, disons, 20 (un nombre aléatoire) d'extensions ou toute autre fonctionnalité qui peut être activée | désactiver, je ENV
finirai par 20 non nécessaires (car Dockerfile ne prend pas en charge .env files) définition dont le seul but serait de définir cet indicateur pour que le script sache quoi faire alors ...
- Est-ce que c'est la bonne façon de le faire?
- Dois-je utiliser
ENV
à cette fin?
Je suis ouvert aux idées si vous avez une approche différente pour y parvenir s'il vous plaît laissez-moi savoir
ARG
pour les définir avec des valeurs différentes avec chaque build en utilisant--build-arg
, et vous pouvez toujours utiliser les valeurs par défaut dans le Dockerfile. Si vous utilisezENV
, vous devrez modifier le Dockerfile lui-même pour chaque build afin de définir des valeurs différentes