Phalcon Framework with Docker
Based on Working with Phalcon Framework and Docker by Rogério Silva.
Scaffold your Application
Link your SQL database to your Phalcon App container using Docker-compose:
version: '3'
services:
app:
container_name: phalcon_app
build: .
working_dir: /var/www/html
volumes:
- ./html:/var/www/html
ports:
- '8080:80'
expose:
- '8080'
depends_on:
- mysql
links:
- mysql
mysql:
container_name: phalcon_db
image: mariadb:latest
environment:
MYSQL_DATABASE: phalcon_app
MYSQL_ROOT_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
ports:
- '3306:3306'
Build the Phalcon Container
Using the PHP/NGINX container by webdevops as base image:
FROM webdevops/php-nginx:7.4
ARG PSR_VERSION=1.2.0
ARG PHALCON_VERSION=4.1.3
ARG PHALCON_EXT_PATH=php7/64bits
RUN set -xe && \
# Download PSR, see https://github.com/jbboehr/php-psr
curl -LO https://github.com/jbboehr/php-psr/archive/v${PSR_VERSION}.tar.gz && \
tar xzf ${PWD}/v${PSR_VERSION}.tar.gz && \
# Download Phalcon
curl -LO https://github.com/phalcon/cphalcon/archive/v${PHALCON_VERSION}.tar.gz && \
tar xzf ${PWD}/v${PHALCON_VERSION}.tar.gz && \
docker-php-ext-install -j $(getconf _NPROCESSORS_ONLN) \
${PWD}/php-psr-${PSR_VERSION} \
${PWD}/cphalcon-${PHALCON_VERSION}/build/${PHALCON_EXT_PATH} \
&& \
# Remove all temp files
rm -r \
${PWD}/v${PSR_VERSION}.tar.gz \
${PWD}/php-psr-${PSR_VERSION} \
${PWD}/v${PHALCON_VERSION}.tar.gz \
${PWD}/cphalcon-${PHALCON_VERSION} \
&& \
php -m
ENV WEB_DOCUMENT_ROOT=/var/www/html/application/public
I am using the currently latest version of php-psr in combination with the last cphalcon v4 release. I was not yet able to get version 5 to work.
Build
docker pull mariadb:latest
docker pull webdevops/php-nginx:7.4
mkdir html
docker-compose build app
docker images
docker-phalcon_app latest 08a2db66d313 6 seconds ago 1.03GB
webdevops/php-nginx 7.4 bf283e850d32 3 days ago 1.02GB
mariadb latest 8dafde72c039 4 days ago 383MB
Run the Service
docker-compose up -d
Creating network "docker-phalcon_default" with the default driver
Creating phalcon_db ... done
Creating phalcon_app ... done
Configure the Phalcon App
Initialize the application by generating a composer.json
:
docker exec -ti phalcon_app composer init
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [root/html]: phalcon/app
Description []: Phalcon App
Author [n to skip]: Mike Polinowski
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
Add PSR-4 autoload mapping? Maps namespace "Phalcon\App" to the entered relative path. [src/, n to skip]: n
{
"name": "phalcon/app",
"description": "Phalcon App",
"license": "MIT",
"authors": [
{
"name": "Mike Polinowski"
}
],
"require": {}
}
Do you confirm generation [yes]? yes
Create a default Phalcon project using the Phalcon Devtools:
docker exec -ti phalcon_app composer require --dev phalcon/devtools
Using version ^4.2 for phalcon/devtools
./composer.json has been updated
Running composer update phalcon/devtools
Loading composer repositories with package information
Updating dependencies
Lock file operations: 22 installs, 0 updates, 0 removals
docker exec -ti phalcon_app ./vendor/bin/phalcon project application simple
Phalcon DevTools (4.2.0)
Success: Controller "index" was successfully created.
Info: /var/www/html/application/app/controllers/IndexController.php
Success: Project 'application' was successfully created.
Info: Please choose a password and username to use Database connection.
Info: Used default: 'root' without password.