นี่อาจเป็นคำถามเล็กน้อย แต่การอ่านเอกสารสำหรับARGและENVไม่ได้ทำให้ฉันกระจ่าง
ฉันกำลังสร้างคอนเทนเนอร์ PHP-FPM และฉันต้องการให้ความสามารถในการเปิด / ปิดส่วนขยายบางอย่างตามความต้องการของผู้ใช้
จะดีมากถ้าสามารถทำได้ใน Dockerfile โดยการเพิ่มเงื่อนไขและส่งแฟล็กบนคำสั่ง build แต่อาจไม่รองรับ 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 files) คำจำกัดความที่มีจุดประสงค์เดียวที่จะตั้งค่าสถานะนี้เพื่อให้สคริปต์รู้ว่าจะทำอย่างไร ...
- วิธีนี้เป็นวิธีที่ถูกต้องหรือไม่?
- ฉันควรใช้
ENV
เพื่อจุดประสงค์นี้หรือไม่?
ฉันเปิดรับแนวคิดหากคุณมีแนวทางอื่นเพื่อบรรลุเป้าหมายนี้โปรดแจ้งให้เราทราบ
ARG
เพื่อตั้งค่าด้วยค่าที่แตกต่างกันโดยใช้แต่ละ--build-arg
บิลด์และคุณยังสามารถใช้ค่าเริ่มต้นใน Dockerfile ได้ หากคุณใช้ENV
คุณจะต้องแก้ไข Dockerfile เองสำหรับทุกบิลด์เพื่อตั้งค่าที่แตกต่างกัน