This repository contains the source for building various versions of the PHP application as a reproducible Docker image using source-to-image. Users can choose between RHEL and CentOS based builder images. The resulting image can be run using Docker.
To build a simple php-test-app application using standalone S2I and then run the resulting image with Docker execute:
-
For RHEL based image
$ s2i build https://github.com/openshift/sti-php.git --context-dir=5.6/test/test-app rhscl/php-56-rhel7 php-test-app $ docker run -p 8080:8080 php-test-app
-
For CentOS based image
$ s2i build https://github.com/openshift/sti-php.git --context-dir=5.6/test/test-app centos/php-56-centos7 php-test-app $ docker run -p 8080:8080 php-test-app
Accessing the application:
$ curl 127.0.0.1:8080
-
<php-version>
-
Dockerfile
CentOS based Dockerfile.
-
Dockerfile.rhel7
RHEL based Dockerfile. In order to perform build or test actions on this Dockerfile you need to run the action on properly subscribed RHEL machine.
-
s2i/bin/
This folder contains scripts that are run by S2I:
-
assemble
Used to install the sources into the location where the application will be run and prepare the application for deployment (eg. installing modules using npm, etc..)
-
run
This script is responsible for running the application, by using the application web server.
-
-
contrib/
This folder contains a file with commonly used modules.
-
test/
This folder contains the S2I test framework with a sample PHP app.
-
To set these environment variables, you can place them as a key value pair into a .sti/environment
file inside your source code repository.
The following environment variables set their equivalent property value in the php.ini file:
- ERROR_REPORTING
- Informs PHP of which errors, warnings and notices you would like it to take action for
- Default: E_ALL & ~E_NOTICE
- DISPLAY_ERRORS
- Controls whether or not and where PHP will output errors, notices and warnings
- Default: ON
- DISPLAY_STARTUP_ERRORS
- Cause display errors which occur during PHP's startup sequence to be handled separately from display errors
- Default: OFF
- TRACK_ERRORS
- Store the last error/warning message in $php_errormsg (boolean)
- Default: OFF
- HTML_ERRORS
- Link errors to documentation related to the error
- Default: ON
- INCLUDE_PATH
- Path for PHP source files
- Default: .:/opt/app-root/src:/opt/rh/rh-php56/root/usr/share/pear
- SESSION_PATH
- Location for session data files
- Default: /tmp/sessions
The following environment variables set their equivalent property value in the opcache.ini file:
- OPCACHE_MEMORY_CONSUMPTION
- The OPcache shared memory storage size
- Default: 16M
- OPCACHE_REVALIDATE_FREQ
- How often to check script timestamps for updates, in seconds. 0 will result in OPcache checking for updates on every request.
- Default: 2
You can also override the entire directory used to load the PHP configuration by setting:
- PHPRC
- Sets the path to the php.ini file
- PHP_INI_SCAN_DIR
- Path to scan for additional ini configuration files
You do not need to change anything in your existing PHP project's repository. However, if these files exist they will affect the behavior of the build process:
-
composer.json
List of dependencies to be installed with
composer
. The format is documented here. -
.htaccess
In case the DocumentRoot of the application is nested within the source directory
/opt/app-root/src
, users can provide their own Apache .htaccess file. This allows the overriding of Apache's behavior and specifies how application requests should be handled. The .htaccess file needs to be located at the root of the application source.
In order to immediately pick up changes made in your application source code, you need to run your built image with the OPCACHE_REVALIDATE_FREQ=0
environment variable passed to the Docker -e
run flag:
$ docker run -e OPCACHE_REVALIDATE_FREQ=0 -p 8080:8080 php-app
To change your source code in running container, use Docker's exec command:
docker exec -it <CONTAINER_ID> /bin/bash
After you Docker exec into the running container, your current directory is set
to /opt/app-root/src
, where the source code is located.