Provides a basic LAP stack using stable Alpine, Apache2 and PHP5 (version from stable repository of Alpine), loading in the various extensions along the way (see Dockerfile for full list).
Should allow you to get going with a full LAP stack and support for DB via linked container (such as mysql) with ease, allowing you to fine tune various aspects of the server and php via environment variables.
If you need PHP7 edition look at this project.
List of packages included in this image
bash, apache2, php5, php5-apache2, curl, ca-certificates, git
php5-phar, php5-json, php5-iconv, php5-openssl, php5-ftp, php5-xdebug, php5-mcrypt, php5-soap, php5-gmp, php5-pdo_odbc, php5-dom, php5-pdo, php5-zip, php5-mysqli, php5-sqlite3, php5-pdo_pgsql, php5-bcmath, php5-gd, php5-odbc, php5-pdo_mysql, php5-pdo_sqlite, php5-gettext, php5-xmlreader, php5-xmlrpc, php5-bz2, php5-pdo_dblib, php5-curl, php5-ctype, php5-exif, php5-zlib
List of all available environment variables
Various env vars can be set at runtime via your docker command or docker-compose environment section:
APACHE_SERVER_NAME: Change server name to match your domain name in httpd.conf
PHP_SHORT_OPEN_TAG: Maps to php.ini 'short_open_tag'
PHP_OUTPUT_BUFFERING: Maps to php.ini 'output_buffering'
PHP_OPEN_BASEDIR: Maps to php.ini 'open_basedir'
PHP_MAX_EXECUTION_TIME: Maps to php.ini 'max_execution_time'
PHP_MAX_INPUT_TIME: Maps to php.ini 'max_input_time'
PHP_MAX_INPUT_VARS: Maps to php.ini 'max_input_vars'
PHP_MEMORY_LIMIT: Maps to php.ini 'memory_limit'
PHP_ERROR_REPORTING: Maps to php.ini 'error_reporting'
PHP_DISPLAY_ERRORS: Maps to php.ini 'display_errors'
PHP_DISPLAY_STARTUP_ERRORS: Maps to php.ini 'display_startup_errors'
PHP_LOG_ERRORS: Maps to php.ini 'log_errors'
PHP_LOG_ERRORS_MAX_LEN: Maps to php.ini 'log_errors_max_len'
PHP_IGNORE_REPEATED_ERRORS: Maps to php.ini 'ignore_repeated_errors'
PHP_REPORT_MEMLEAKS: Maps to php.ini 'report_memleaks'
PHP_HTML_ERRORS: Maps to php.ini 'html_errors'
PHP_ERROR_LOG: Maps to php.ini 'error_log'
PHP_POST_MAX_SIZE: Maps to php.ini 'post_max_size'
PHP_DEFAULT_MIMETYPE: Maps to php.ini 'default_mimetype'
PHP_DEFAULT_CHARSET: Maps to php.ini 'default_charset'
PHP_FILE_UPLOADS: Maps to php.ini 'file_uploads'
PHP_UPLOAD_TMP_DIR: Maps to php.ini 'upload_tmp_dir'
PHP_UPLOAD_MAX_FILESIZE: Maps to php.ini 'upload_max_filesize'
PHP_MAX_FILE_UPLOADS: Maps to php.ini 'max_file_uploads'
PHP_ALLOW_URL_FOPEN: Maps to php.ini 'allow_url_fopen'
PHP_ALLOW_URL_INCLUDE: Maps to php.ini 'allow_url_include'
PHP_DEFAULT_SOCKET_TIMEOUT: Maps to php.ini 'default_socket_timeout'
PHP_DATE_TIMEZONE: Maps to php.ini 'date.timezone'
PHP_PDO_MYSQL_CACHE_SIZE: Maps to php.ini 'pdo_mysql.cache_size'
PHP_PDO_MYSQL_DEFAULT_SOCKET: Maps to php.ini 'pdo_mysql.default_socket'
PHP_SESSION_SAVE_HANDLER: Maps to php.ini 'session.save_handler'
PHP_SESSION_SAVE_PATH: Maps to php.ini 'session.save_path'
PHP_SESSION_USE_STRICT_MODE: Maps to php.ini 'session.use_strict_mode'
PHP_SESSION_USE_COOKIES: Maps to php.ini 'session.use_cookies'
PHP_SESSION_COOKIE_SECURE: Maps to php.ini 'session.cookie_secure'
PHP_SESSION_NAME: Maps to php.ini 'session.name'
PHP_SESSION_COOKIE_LIFETIME: Maps to php.ini 'session.cookie_lifetime'
PHP_SESSION_COOKIE_PATH: Maps to php.ini 'session.cookie_path'
PHP_SESSION_COOKIE_DOMAIN: Maps to php.ini 'session.cookie_domain'
PHP_SESSION_COOKIE_HTTPONLY: Maps to php.ini 'session.cookie_httponly'
PHP_XDEBUG_ENABLED: Turns on xdebug (which is not for production really)
You can create a docker-compose.yml
file to keep things nice and simple:
version: "3"
services:
mariadb:
restart: unless-stopped
image: mariadb:10
ports:
# Database port, will be mapped to localhost interface only
- 127.0.0.1:3308:3306
volumes:
# Path to folder of local filesystem with database files
- ./databases/mariadb:/var/lib/mysql
environment:
# Parameters which will be used in application
- MYSQL_ROOT_PASSWORD=ive_got_no_roots
- MYSQL_ROOT_HOST=%
- MYSQL_DATABASE=somedatabase
- MYSQL_USER=user
- MYSQL_PASSWORD=user_pass
application:
image: evilfreelancer/alpine-apache-php5
environment:
# Database parameters of app
- DB_HOST=mariadb
- DB_NAME=somedatabase
- DB_USER=user
- DB_PASS=user_pass
# Settings of php.ini
- PHP_SHORT_OPEN_TAG=On
- PHP_ERROR_REPORTING=E_ALL
- PHP_DISPLAY_ERRORS=On
- PHP_HTML_ERRORS=On
- PHP_XDEBUG_ENABLED=true
ports:
# Web-server HTTP port, will be mapped to all network interfaces
- 80:80
volumes:
# Folder in which will be "public" folder with index.php
# and other sources of application
- ./application:/app
Where:
- mariadb - Is a container with SQL database
- application - Container based on
evilfreelancer/alpine-apache-php5
image with your application
In folder ./application
will be your application, it should have ./application/public
subfolder with index.php
because this container is will use /app/public
path as webroot of Apache.
Then run command below, it will start composition of containers:
docker-compose up -d
If you would like to add some files into this container then you can create your own Dockerfile
based on this image:
FROM evilfreelancer/alpine-apache-php5
ADD ["./public", "/app/public"]
RUN composer update --working-dir=/app/public \
&& chown -R apache:apache /app
Probably you want to install some packages via NPM by NodeJS:
FROM evilfreelancer/alpine-apache-php5
ADD [".", "/app"]
WORKDIR /app
RUN apk update \
&& apk add --update --no-cache nodejs nodejs-npm \
&& npm install \
&& composer update \
&& chown -R apache:apache /app
If you want install some additional extension which not already installed:
FROM evilfreelancer/alpine-apache-php5
ADD [".", "/app"]
WORKDIR /app
RUN apk update \
&& apk add --update --no-cache php5-amqp \
&& composer update --working-dir=/app \
&& chown -R apache:apache /app
You can place them in the /app folder, but your main index.php
file must be in /app/public.
This allows you to have your src files and other outside the public directory.
- Apache WebRoot - /app/public/
- Apache Configs - /etc/apache2/
- Apache Logs - /var/log/apache2/
- Composer - /usr/local/bin/composer
- PHP.ini - /etc/php5/php.ini