Just a little Docker POC in order to have a complete stack for running CakePHP into Docker containers using docker-compose tool. It is recommended to utilize this stack with database sessions, so your sessions can be persisted across all running instances of your application.
This example takes it a step further by hosting the source-code in a standalone container, to make infrastructure upgrades seamless. You can find the source-code for the example application here: https://github.com/Dynamictivity/cakephp-bookmarker
Please see Contributing for instructions on contributing to this repository.
- CakePHP3
First, clone this repository:
$ git clone git@github.com:Dynamictivity/docker-cakephp-example.gitChange into the working directory that you just cloned and run:
$ docker-compose upYou are done, you can visit your CakePHP application on the following URL: http://localhost
To use your own custom application you just need to build your CakePHP application into a standalone docker image by creating a Dockerfile inside of the root of your CakePHP application. We recommend phusion/baseimage -- example dockerfile below:
# Use phusion/baseimage as base image. To make your builds reproducible, make
# sure you lock down to a specific version, not to `latest`!
# See https://github.com/phusion/baseimage-docker/blob/master/Changelog.md for
# a list of version numbers.
FROM phusion/baseimage:0.9.19
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
ADD . /www
# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Once you have built your CakePHP docker image and uploaded it to a registry, simply change the php image portion of the docker-compose.yml -- replace cakephp-bookmarker below, with your custom docker image as follows:
cakephp:
image: dynamictivity/cakephp-bookmarker:latest
Change the following variables in docker-compose.yml to configure email in your application:
EMAIL_HOST: 'localhost'
EMAIL_PORT: '25'
EMAIL_TIMEOUT: '30'
EMAIL_USERNAME: 'user'
EMAIL_PASSWORD: 'secret'
EMAIL_TLS:
When the container spins up it runs the following 2 commands (aside from composer install):
$ cd /www; bin/cake migrations migrate
$ cd /www; bin/cake migrations seed --seed $DB_SEEDYou can specify the database seed file inside of docker-compose.yml by changing the DB_SEED: value to that of your database seed file.
You can also use vagrant for testing by typing the following command from the work tree: vagrant up
Once you are logged into the Vagrant box run the following commands:
$ cd /vagrant
$ docker-compose upHere are the docker-compose running containers:
cakephp: This is the stand-alone application source-code container which contains your CakePHP applicationdb: This is the MySQL database container including the application volume mounted from cakephpnginx: This is the Nginx webserver container in which cakephp volumes are mounted tophp: This is the PHP-FPM container including the application volume mounted from cakephp
This results in the following running containers:
> $ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------
cakephp_1 /sbin/my_init Up
db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
nginx_1 nginx Up 443/tcp, 0.0.0.0:80->80/tcp
php_1 /init.sh Up 9000/tcpYou are free to use the code in this repository under the terms of the 0-clause BSD license. LICENSE contains a copy of this license.