Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker Image installing php modules

I created a Dockerfile like below

FROM ubuntu:14.04

RUN apt-get update -y && apt-get install -y software-properties-common language-pack-en-base

RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

RUN apt-get -y update && apt-get install -y \
    php7.0 \
    php7.0-pgsql \
    php-pear \
    php7.0-curl \
    php7.0-sqlite3 \
    php7.0-xml \
    php7.0-bcmath \
    php7.0-zip \
    php7.0-mbstring \
    php-xdebug \
    php-ast

WORKDIR /var/www/html/code

When i run docker-compose build container_name

And docker-compose run --rm container_name php -m

It seems like not all the php modules were installed during the build of the container. As the result shows below.

[PHP Modules]
    ast
    calendar
    Core
    ctype
    date
    exif
    fileinfo
    filter
    ftp
    gettext
    hash
    iconv
    json
    libxml
    openssl
    pcntl
    pcre
    PDO
    Phar
    posix
    readline
    Reflection
    session
    shmop
    sockets
    SPL
    standard
    sysvmsg
    sysvsem
    sysvshm
    tokenizer
    xdebug
    Zend OPcache
    zlib

    [Zend Modules]
    Xdebug
    Zend OPcache

I did not get the php modules that i exepected to see like pdo_pgsql, xml, xmlreader and etc.

like image 594
yhtan Avatar asked Oct 17 '22 17:10

yhtan


2 Answers

I would use the official PHP image from Dockerhub. It has a utility script built in for installing and enabling PHP extensions. A revised Dockerfile for your needs could be something like this:

FROM php:7
RUN docker-php-ext-install <YOUR-EXTENSIONS>
WORKDIR /var/www/html/code

where YOUR-EXTENSIONS is possible values from this list:

Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp          
gd gettext gmp hash iconv imap interbase intl json ldap mbstring mcrypt 
mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci 
pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline recode
reflection session shmop simplexml snmp soap sockets spl standard 
sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc
xmlwriter xsl zip

There are other tags for other versions on the image on Dockerhub - Check the docs there

Hope this helps

Dylan

like image 87
Dylan Scott Avatar answered Oct 20 '22 05:10

Dylan Scott


Instead of...

docker-compose run --rm container_name php -m

...type:

docker-compose run --rm container_name php7.0 -m

OR

In the Dockerfile, just before ...

WORKDIR /var/www/html/code

...add:

RUN update-alternatives --set php /usr/bin/php7.0
like image 27
Nehal J Wani Avatar answered Oct 20 '22 06:10

Nehal J Wani