이것은 사소한 질문이 될 수 있지만 ARG 및 ENV에 대한 문서를 읽는 것이 분명하지 않습니다.
PHP-FPM 컨테이너를 구축 중이며 사용자 요구에 따라 일부 확장을 활성화 / 비활성화하는 기능을 제공하고 싶습니다.
조건을 추가하고 빌드 명령에 플래그를 전달하여 Dockerfile에서이 작업을 수행 할 수 있다면 좋겠지 만 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 (임의의 숫자)의 확장 기능이나 활성화 / 비활성화 할 수있는 다른 기능을 추가하려면 필요 ENV
하지 않은 20 개로 끝낼 것입니다 (Dockerfile이 .env를 지원하지 않기 때문). 파일) 정의는 스크립트가 수행 할 작업을 알 수 있도록이 플래그를 설정하는 유일한 목적입니다.
- 이것이 올바른 방법입니까?
ENV
이 목적으로 사용해야 합니까?
나는 당신이 이것을 달성하기 위해 다른 접근 방식을 가지고 있다면 아이디어에 열려 있습니다.
ARG
를 사용 하여 각 빌드에서 다른 값으로 설정해야--build-arg
하며 Dockerfile에서 기본값을 계속 사용할 수 있습니다. 를 사용하는 경우ENV
모든 빌드에 대해 Dockerfile 자체를 편집하여 다른 값을 설정해야합니다