The pocket guide to building PHP 7.4 extensions in Docker containers and also OCI8
For reasons I don't want to get into, I need to build a bunch of extensions for PHP 7.4 in a Docker container to keep a legacy application on life-support. I have found the process for determining what extensions need what libraries to compile frustrating, to say the least. Here is what I found:
FROM php:7.4
# Init
ENV DEBIAN_FRONTEND=noninteractive
# Install base packages
RUN apt-get update \
&& apt-get install -y \
curl \
git \
openssl \
unzip \
wget \
zsh
# Install PHP extensions
RUN docker-php-ext-install bcmath
RUN apt-get install -y libcurl4 libcurl4-openssl-dev
RUN docker-php-ext-install curl
RUN docker-php-ext-install fileinfo
RUN apt-get install -y libssl-dev
RUN docker-php-ext-install ftp
RUN apt-get install -y libfreetype6-dev libgd-dev libjpeg62-turbo-dev libpng-dev
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
RUN apt-get install -y libicu-dev
RUN docker-php-ext-install intl
RUN apt-get install -y libldap2-dev libldap-common
RUN docker-php-ext-install ldap
RUN apt-get install -y libonig-dev
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install pcntl
RUN docker-php-ext-install session
RUN apt-get install -y libxml2-dev
RUN docker-php-ext-install dom
RUN docker-php-ext-install soap
RUN docker-php-ext-install xml
RUN apt-get install -y libzip-dev
RUN docker-php-ext-install zip
# Install Oracle Instantclient
RUN apt-get install -y libaio1 libaio-dev
RUN mkdir -p /opt/oracle
RUN wget https://download.oracle.com/otn_software/linux/instantclient/2114000/instantclient-basic-linux.x64-21.14.0.0.0dbru.zip \
&& wget https://download.oracle.com/otn_software/linux/instantclient/2114000/instantclient-sdk-linux.x64-21.14.0.0.0dbru.zip \
&& unzip instantclient-basic-linux.x64-21.14.0.0.0dbru.zip -d /opt/oracle \
&& unzip instantclient-sdk-linux.x64-21.14.0.0.0dbru.zip -d /opt/oracle \
&& rm -rf *.zip \
&& mv /opt/oracle/instantclient_21_14 /opt/oracle/instantclient
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient
RUN echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle.conf && ldconfig
RUN docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/opt/oracle/instantclient,21.14 \
&& echo 'instantclient,/opt/oracle/instantclient/' | pecl install oci8-2.2.0 \
&& docker-php-ext-enable oci8 \
&& docker-php-ext-install pdo pdo_oci
# Clean up packages
RUN apt-get clean -y && rm -rf /var/lib/apt/lists/*
It's certinly not perfect and I am fairly confident that libssl-dev is required by a couple other packages further down.
Sources that helped me out
"Complete list of php docker ext" (2017)
This comment about setting up the gd extension.