This Docker image provides an Apache server with an optional PHP-FPM backend. It allows for dynamic enabling of Apache modules and adjusts server settings based on environment variables.
You can find our builds here:
https://hub.docker.com/r/mxmd/httpd/tags
ie:
docker pull mxmd/httpd:2.4
First, make sure you've cloned the repository and you are inside the directory containing the Dockerfile:
docker build -t mxmd/httpd:2.4.59 .
You can run the image using:
docker run -d -p 80:80 -p 443:443 mxmd/httpd:2.4.59
The following Apache modules come enabled by default:
- core_module (static): Fundamental module for the operation of the Apache server.
- so_module (static): Enables the loading of dynamic modules.
- http_module (static): Core module for processing HTTP requests.
- mpm_event_module (shared): Multi-Processing Module designed for high performance sites.
- authn_file_module (shared): Provides file-based authentication.
- authn_core_module (shared): Core authentication module.
- authz_host_module (shared): Provides host-based authorization.
- authz_groupfile_module (shared): Group file-based authorization.
- authz_user_module (shared): User-based authorization.
- authz_core_module (shared): Core authorization framework.
- access_compat_module (shared): Provides access control compatibility.
- auth_basic_module (shared): Basic authentication.
- reqtimeout_module (shared): Sets timeout for reading request headers and body.
- filter_module (shared): Content filter framework.
- deflate_module (shared): Handles compression of content before it is delivered to the client.
- mime_module (shared): Maps file extensions to MIME types.
- log_config_module (shared): Provides flexible logging capabilities.
- env_module (shared): Provides environment variable manipulation.
- expires_module (shared): Enables control over the setting of Expires and Cache-Control HTTP headers.
- headers_module (shared): Provides directives to manipulate HTTP response headers.
- setenvif_module (shared): Allows conditional setting of environment variables.
- version_module (shared): Determines the configuration layout version.
- proxy_module (shared): Provides basic proxy capabilities.
- proxy_fcgi_module (shared): Enables support for FastCGI proxy.
- unixd_module (shared): UNIX daemon-related functionality.
- status_module (shared): Provides server status information.
- autoindex_module (shared): Generates directory listings.
- dir_module (shared): Handles directory index files.
- alias_module (shared): Provides mapping of URLs to file system locations.
- rewrite_module (shared): Provides URL manipulation capabilities.
You can enable additional Apache modules at runtime by passing the APACHE_MODULES
environment variable. This variable should contain comma-separated values of the module's name and its path. You can get these paths by running docker run --rm httpd:2.4-alpine cat /usr/local/apache2/conf/extra/httpd-default.conf
.
For example, to enable the ratelimit_module
and allowmethods_module
:
docker run -d -p 80:80 -p 443:443 -e APACHE_MODULES="ratelimit_module modules/mod_ratelimit.so,allowmethods_module modules/mod_allowmethods.so" mxmd/httpd:2.4.59
This setup ensures flexibility in managing your Apache modules based on different requirements.
The Docker image allows you to toggle between production
and development
settings by using the HOST_ENV
environment variable:
-
Production Mode: Hide server details.
docker run -d -p 80:80 -p 443:443 -e HOST_ENV=production mxmd/httpd:2.4.59
-
Development Mode: Display full server details.
docker run -d -p 80:80 -p 443:443 -e HOST_ENV=development mxmd/httpd:2.4.59
Upon starting the Docker container, the enabled Apache modules are printed to the console. To view them, you can check the container logs:
docker logs [container_id]
Replace [container_id]
with your running container's ID.