How to setup Phalcon framework in a Docker container
How to setup Phlacon framework in a Docker container? This is how we did it.
Not sure if everyone of you is aware but its innovative architecture makes this framework as the fastest PHP framework ever built. More information here but the long story short is that (from the documentation):
Phalcon is an open source full stack framework for PHP, written as a C-extension. Phalcon is optimized for high performance. Its unique architecture allows the framework to always be memory resident, offering its functionality whenever it’s needed, without expensive file stats and file reads that traditional PHP frameworks employ.
I personally started to use Phalcon since its version 1.x and in one instant I forgot about all the others (Laravel, CodeIgnitor, Cake, Zend etc were the major competitor of those times).
For the simplicity of this setup we are going with the ubuntu image and Apache, but just in case you want more information on how to setup phalcon from scratch this is the link to follow https://docs.phalcon.io/4.0/en/installation or https://docs.phalcon.io/3.4/en/installation
The below docker file is going through few steps
- first we install the dependencies needed for cloning and compiling Phalcon locally
- then we install Apache and PHP needed files
- configure the phalcon.ini and install xdebug
- after that we start the removal of all the libraries not needed anymore
- start the Apache service
FROM ubuntu:18.04 as intermediate
# install the dependencies
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y \
zlib1g-dev \
libxml2-dev\
locales \
g++ \
git \
libpcre3-dev \
make \
php \
php-dev \
re2c \
wget
RUN locale-gen en_US.UTF-8 && \
export LANG=en_US.UTF-8
RUN git clone --depth 1 -b v3.4.5 git://github.com/phalcon/cphalcon.git
WORKDIR cphalcon/build
RUN ./install && \
apt-get install -y --allow-unauthenticated \
apache2 \
iputils-ping \
cron \
curl \
libc6-i386 \
mcrypt \
php \
php-apcu \
php-curl \
php-mbstring \
php-mysql \
php-soap \
php-xml \
unzip \
zip && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
echo "extension=phalcon.so" > /etc/php/7.2/mods-available/phalcon.ini && \
pecl install xdebug && \
echo "zend_extension=\"/usr/lib/php/20170718/xdebug.so\"" > /etc/php/7.2/mods-available/xdebug.ini && \
cp /etc/php/7.2/mods-available/xdebug.ini /etc/php/7.2/apache2/conf.d/20-xdebug.ini && \
phpenmod phalcon && phpenmod mbstring && \
a2enmod rewrite && \
apt-get purge -y \
zlib1g-dev \
libxml2-dev\
locales \
g++ \
git \
libpcre3-dev \
make \
re2c \
wget && \
rm -rf /cphalcon && \
mkdir /app
WORKDIR /app
EXPOSE 80
CMD service apache2 start && \
service cron start && \
/bin/bash
CMD ["apache2ctl", "-D", "FOREGROUND"]
All you need to do is to create a folder i.e. phalcon_test and the Dockerfile in it with the above script. After that run
# from /you/path/to/phalcon_test
docker build -t phalcon .
Create a file called index.php in your working directory, i.e. /home/your_user/work/phalcon_app/application
<?php
echo phpinfo();
?>
Then spin up the container with this command
docker run -v /home/your_user/work/phalcon_app/application/:/var/www/html -p 8080:80 --name phalcon_test_1 phalcon &
At this stage you should have a working docker container with Apache/PHP/Phalcon running, and you can verify this by going to your browser to “http://localhost:8080 and we should be able to see something like this
![php_info How to setup Phalcon framework in a Docker container](https://keepforyourself.com/wp-content/uploads/2021/09/php_info.png)
In particular you should look on that page for the “phalcon” setup
![php_info_phalcon How to setup Phalcon framework in a Docker container](https://keepforyourself.com/wp-content/uploads/2021/09/php_info_phalcon.png)
This means that our setup is complete and that the php phalcon extension has been correctly loaded.
This is the end of this part and I hope will help you kick start your understanding of how this framework works.
In the next few weeks we are going to create a small project using this amazing framework.
Link to the new version
Link to the dev environment with Apache, PHP7 and Phalcon 4
Other articles of the PHP series
Share this content: