This Docker container implements a last generation of LAMP stack with a set of popular PHP modules. Includes support for Composer, Yarn and npm package managers and a Postfix service to allow sending emails through PHP mail() function.
I have made a docker-compose.yml file to show how to use and map additional services like MariaDB, Node.JS and MongoDB. This image still have Node.Js inside, but just for use of npm and library dependecy management.
Includes the following components:
- Ubuntu 16.04 LTS Xenial Xerus base image.
- Apache HTTP Server 2.4
- Postfix 2.11
- PHP 7
- PHP modules
- php-bz2
- php-cgi
- php-cli
- php-common
- php-curl
- php-dbg
- php-dev
- php-enchant
- php-fpm
- php-gd
- php-gmp
- php-imap
- php-interbase
- php-intl
- php-json
- php-ldap
- php-mcrypt
- php-mysql
- php-odbc
- php-opcache
- php-pgsql
- php-phpdbg
- php-pspell
- php-readline
- php-recode
- php-snmp
- php-sqlite3
- php-sybase
- php-tidy
- php-xmlrpc
- php-xsl
- Development tools
- git
- composer
- npm
- yarn
- vim
- tree
- nano
- ftp
- curl
Installation from Docker registry hub.
You can download the image using the following command:
docker pull unixelias/lamp
This image uses environment variables to allow the configuration of some parameteres at run time:
- Variable name: LOG_STDOUT
- Default value: Empty string.
- Accepted values: Any string to enable, empty string or not defined to disable.
- Description: Output Apache access log through STDOUT, so that it can be accessed through the container logs.
- Variable name: LOG_STDERR
- Default value: Empty string.
- Accepted values: Any string to enable, empty string or not defined to disable.
- Description: Output Apache error log through STDERR, so that it can be accessed through the container logs.
- Variable name: LOG_LEVEL
- Default value: warn
- Accepted values: debug, info, notice, warn, error, crit, alert, emerg
- Description: Value for Apache's LogLevel directive.
- Variable name: ALLOW_OVERRIDE
- Default value: All
- All, None
- Accepted values: Value for Apache's AllowOverride directive.
- Description: Used to enable (
All
) or disable (None
) the usage of an.htaccess
file.
- Variable name: DATE_TIMEZONE
- Default value: UTC
- Accepted values: Any of PHP's supported timezones
- Description: Set php.ini default date.timezone directive and sets MariaDB as well.
- Variable name: TERM
- Default value: dumb
- Accepted values: dumb
- Description: Allow usage of terminal programs inside the container, such as
mysql
ornano
.
The image exposes port 80
, and exports the volumes:
/var/log/httpd
, containing Apache log files./var/www/html
, used as Apache's DocumentRoot directory.
The user and group owner id for the DocumentRoot directory /var/www/html
are both 33 (uid=33(www-data) gid=33(www-data) groups=33(www-data)
).
docker run -i -t --rm unixelias/lamp bash
docker run --rm -p 8080:80 -e LOG_STDOUT=true -e LOG_STDERR=true -e LOG_LEVEL=debug -v /my/data/directory:/var/www/html unixelias/lamp
Create a container linking to another MySQL container:
docker run -d --link my-mysql-container:mysql -p 8080:80 -v /my/data/directory:/var/www/html -v /my/logs/directory:/var/log/httpd --name my-lamp-container unixelias/lamp
docker exec -i -t my-lamp-container bash
mysql -u root