I want to dockerize a PHP application locally that has multiple extensions. Whenever I pull the image which is php:7.3.29-apache
I should install each extension one by one so it can match the environment where the application is actually running. The real issue is the time, it took me a half hour for installing all the required extensions. I failed every Dockerfile attempt to install all the extensions in one command.
This is my docker-compose File :
version: "4"
services:
db:
image: mysql:8.0.30
container_name: mysql
ports:
- "3308:3306"
environment:
MYSQL_DATABASE: dbname
MYSQL_USER: dbusername
MYSQL_PASSWORD: dbpassword
MYSQL_ROOT_PASSWORD: rootpassword
web:
image: php:7.3.29-apache
container_name: phpapache
ports:
- "80:80"
volumes:
- ./php:/var/www/html
depends_on:
- db
The extensions that I want to install :
Apcu, bcmath, bz2, calendar, core, ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, intl, json, ldap, libxml, mbstring, memcached, msgpack, mysqli, mysqlnd, openssl, pcntl, pcre, pdo, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phar, posix, rdkafka, readline, reflection, session, shmop, simplexml, soap, sockets, spl, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xml, xmlreader, xmlwriter, xsl, zend, opcache, zip, zlib
Finally, this is how I install manually every extension one by one from Docker desktop terminal :
#run seprately every cmd to make sure you install all extentions correctly
#gettext
docker-php-ext-install gettext;
#mysqli
docker-php-ext-install mysqli;
#bcmath
docker-php-ext-install bcmath;
#sockets
docker-php-ext-install sockets;
#sysvmsg
docker-php-ext-install sysvmsg;
#sysvsem
docker-php-ext-install sysvsem;
#sysvshm
docker-php-ext-install sysvshm;
#pcntl
docker-php-ext-install pcntl;
#shmop
docker-php-ext-install shmop;
#opcache
docker-php-ext-install opcache;
#calndar
docker-php-ext-configure calendar && docker-php-ext-install calendar;
#pdo_mysql
docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql;
#rdkafka
apt-get update && apt-get install -y librdkafka-dev;
pecl install rdkafka;
echo "extension=rdkafka.so" > /usr/local/etc/php/conf.d/rdkafka.ini;
#zip
apt-get update && apt-get install -y libzip-dev; docker-php-ext-install zip;
#bz2
apt-get update && apt-get install -y libbz2-dev;
docker-php-ext-install bz2;
#apcu
pecl install apcu;
echo "extension=apcu.so" > /usr/local/etc/php/conf.d/apcu.ini;
#exif
docker-php-ext-install exif;
#gd
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev; docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm; docker-php-ext-install gd;
#gmp
apt-get update && apt-get install -y libgmp-dev; docker-php-ext-install gmp;
#igbinary
pecl install igbinary;
echo "extension=igbinary.so" > /usr/local/etc/php/conf.d/igbinary.ini;
#intl
apt-get update && apt-get install -y libicu-dev; docker-php-ext-install intl;
#ldap
apt-get update && apt-get install -y libldap2-dev; docker-php-ext-install ldap;
#memcached
apt-get update && apt-get install -y libmemcached-dev; pecl install memcached;
echo "extension=memcached.so" > /usr/local/etc/php/conf.d/memcached.ini
#msgpack
pecl install msgpack;
echo "extension=msgpack.so" > /usr/local/etc/php/conf.d/msgpack.ini;
#pdo_pgsql
apt-get update && apt-get install -y libpq-dev; docker-php-ext-install pdo_pgsql;
#pgsql
apt-get update && apt-get install -y libpq-dev; docker-php-ext-install pgsql;
#soap
apt-get update && apt-get install -y libxml2-dev; docker-php-ext-install soap;
#wddx
docker-php-ext-install wddx
#xsl
apt-get update && apt-get install -y libxslt1-dev; docker-php-ext-install xsl;
#install composer
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer