Reading Time: 2 minutes

Here’s an example of a Dockerfile to create a web server with PHP and MariaDB:
# Define the Docker base image
FROM php:7.4-apache
# Update package repositories
RUN apt-get update
# Install necessary dependencies
RUN apt-get install -y \
mariadb-client \
libzip-dev \
zip \
unzip
# Install required PHP extensions
RUN docker-php-ext-install mysqli pdo pdo_mysql zip
# Copy the application source code to the container
COPY . /var/www/html/
# Configure Apache
COPY docker/apache2.conf /etc/apache2/apache2.conf
RUN a2enmod rewrite
# Expose port 80 to access the web server
EXPOSE 80
# Configure MariaDB
ENV MYSQL_ROOT_PASSWORD=secret
ENV MYSQL_DATABASE=mydb
ENV MYSQL_USER=myuser
ENV MYSQL_PASSWORD=mypassword
# Execute the MariaDB initialization script
COPY docker/init.sql /docker-entrypoint-initdb.d/
In this example, we create an image based on the php:7.4-apache base image. We then update the package repositories and install necessary dependencies like mariadb-client, libzip-dev, zip, and unzip. We also install required PHP extensions to run PHP applications with MySQL, including mysqli, pdo, pdo_mysql, and zip.
Next, we copy the application source code to the container and configure Apache. In this example, we copy the docker/apache2.conf file, which contains Apache configuration, to the /etc/apache2/ directory and enable the rewrite module in Apache.
Finally, we expose port 80 to access the web server and configure MariaDB. In this example, we set the environment variables MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, and MYSQL_PASSWORD and execute the MariaDB initialization script, which we copy to the /docker-entrypoint-initdb.d/ directory.
This Dockerfile can be used to build a Docker image containing a web server with PHP and MariaDB. To build the image, you can run the following command in the same folder where the Dockerfile is located:
docker build -t myapp .
Then, you can start a container from the created image with the following command:
docker run -p 80:80 --name myapp-container -d myapp
This command starts a container in the background and names it myapp-container. The container’s port 80 is mapped to the host’s port 80, which means you can access the web server from a web browser using the host’s IP address.
I hope this example is useful to you!
