Bu belki önemsiz bir soru olabilir, ancak ARG ve ENV için dokümanları okumak bana her şeyi netleştirmiyor.
Bir PHP-FPM konteyneri oluşturuyorum ve kullanıcı ihtiyaçlarıyla ilgili bazı uzantıları etkinleştirme / devre dışı bırakma yeteneği vermek istiyorum.
Bu, Dockerfile'da koşullu ekleyerek ve build komutuna bayrakları geçirerek yapılabilirse harika olurdu, ancak AFAIK desteklenmiyor.
Benim durumumda ve kişisel yaklaşımım, kapsayıcı başladığında aşağıdaki gibi küçük bir komut dosyası çalıştırmaktır:
#!/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 "$@"
Şöyle Dockerfile
görünüyor:
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
İşte size bir şeyleri yapıyorum nasıl anlamak için derin bir bakmak gerekirse bütün deposudur
Şu anda bu çalışıyor ama ... Eğer 20 (rastgele bir sayı) uzantı veya etkinleştirilebilecek başka bir özellik eklemek istersem | devre dışı bırak o zaman gerekli olmayan 20 ile ENV
bitireceğim (çünkü Dockerfile .env'yi desteklemiyor dosya) tanımı, komut dosyasının ne yapacağını bilmesine izin vermek için tek amacı bu bayrağı ayarlamak olacaktı ...
- Bunu yapmanın doğru yolu bu mu?
ENV
Bu amaçla kullanmalı mıyım ?
Bunu başarmak için farklı bir yaklaşımınız varsa fikirlere açığım, lütfen bana bildirin
ARG
farklı değerlerle ayarlamak için--build-arg
kullanmalısınız ve Dockerfile'da yine de varsayılan değerleri kullanabilirsiniz. Eğer kullanırsanızENV
, farklı değerleri ayarlamak için her yapı için düzenlemek Dockerfile kendisi gerekir