यह शायद एक तुच्छ प्रश्न हो सकता है, लेकिन ARG और ENV के लिए डॉक्स पढ़ना मेरे लिए स्पष्ट चीजें नहीं रखता है।
मैं एक PHP-FPM कंटेनर बना रहा हूं और मैं उपयोगकर्ता की जरूरतों पर कुछ एक्सटेंशन को सक्षम / अक्षम करने की क्षमता देना चाहता हूं।
यह बहुत अच्छा होगा अगर इसे डॉकफेरफाइल में सशर्त जोड़कर और फ्लैग को कमांड कमांड पर पारित करके किया जा सकता है लेकिन AFAIK समर्थित नहीं है।
मेरे मामले में और मेरा व्यक्तिगत दृष्टिकोण कंटेनर शुरू होने पर एक छोटी सी स्क्रिप्ट को चलाने का है, निम्नलिखित कुछ:
#!/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 "$@"
यह मेरी Dockerfile
तरह दिखता है:
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
यहाँ पूरी रिपॉजिटरी है अगर आपको यह समझने के लिए कि मुझे क्या करना है, यह समझने के लिए एक गहरी नज़र रखने की आवश्यकता है
वर्तमान में यह काम कर रहा है, लेकिन ... यदि मैं जोड़ना चाहता हूं कि एक्सटेंशन या किसी अन्य सुविधा को 20 (एक यादृच्छिक संख्या) कह सकते हैं जो सक्षम हो सकता है। अक्षम हो जाता है तो मैं 20 गैर-आवश्यक के साथ समाप्त ENV
हो जाऊंगा (क्योंकि Dockerfile समर्थन नहीं करता है ।env फाइलें) की परिभाषा जिसका एकमात्र उद्देश्य यह झंडा लगाना होगा कि स्क्रिप्ट को पता है कि तब क्या करना है ...
- क्या इसे करने का सही तरीका है?
- क्या मुझे
ENV
इस उद्देश्य के लिए उपयोग करना चाहिए ?
यदि आपके पास इसे प्राप्त करने के लिए एक अलग दृष्टिकोण है, तो कृपया मुझे इसके बारे में बताएं
ARG
उन्हें प्रत्येक बिल्ड के साथ विभिन्न मानों के साथ सेट करने के लिए उपयोग करना चाहिए--build-arg
, और आप अभी भी Dockerfile में डिफ़ॉल्ट मानों का उपयोग कर सकते हैं। यदि आप उपयोग करते हैंENV
, तो आपको अलग-अलग मूल्यों को सेट करने के लिए हर निर्माण के लिए खुद डॉकरफाइल को संपादित करना होगा