Site icon CentLinux

How to install LAMP Stack on Docker

Share on Social Media

Learn how to install LAMP stack on Docker with this step-by-step guide. Set up Linux, Apache, MySQL, and PHP in isolated containers for efficient and scalable web development. Perfect for beginners and advanced users. #centlinux #linux #docker

What is LAMP Stack?

The LAMP stack is a popular set of open-source software used together to create dynamic websites and web applications. LAMP stands for:

  1. Linux: The operating system that forms the foundation of the stack. It’s known for its stability, security, and flexibility.
  2. Apache: The web server software that handles HTTP requests and serves web content to users. It’s highly customizable and widely used.
  3. MySQL: The relational database management system that stores and manages the data for your web application. It’s known for its reliability and performance.
  4. PHP: The server-side scripting language used to develop dynamic web pages. PHP processes the business logic and interacts with the database to generate web content.

Key Features:

Use Cases:

The LAMP stack’s combination of Linux, Apache, MySQL, and PHP offers a powerful and versatile environment for web development, making it a popular choice among developers worldwide.

We are already learned how to install LAMP stack on Ubuntu. But this is now the era of DevOps and it is necessary to explore how to install LAMP Stack on Docker.

If you are new to Docker platform, then you should read Docker in Action (PAID LINK) by Manning Publications.

LAMP Stack Alternatives

There are several alternatives to the traditional LAMP stack, each offering different combinations of technologies to suit various needs and preferences in web development. Here are some popular alternatives:

1. LEMP Stack

2. MEAN Stack

3. MERN Stack

4. LEPP Stack

5. JAM Stack

6. WAMP Stack

7. XAMPP

8. Serverless Architecture

9. Docker and Kubernetes

10. DigitalOcean App Platform

Each of these alternatives offers different advantages, depending on the specific requirements of the project, such as the need for performance, scalability, ease of development, or the preference for certain programming languages or databases.

Recommended Online Training: Setup LAMP Stack on a Remote Cloud Server + PHP Foundations

Docker Host Specification

We are using a Linux based Docker host with following specification.

Although there are many pre-build single LAMP images are available on Docker Hub. But by following the best practice and to maintain the modularity of the software stack, we will run each service in its relevant container.

Read Also: How to install LAMP on Rocky Linux 9

Configure a PHP/Apache Docker Container

Connect with Docker host (docker-01.centlinux.com) as a privileged user by using a ssh tool.

Create a directory to store files related to our LAMP Server.

$ mkdir ~/lamp-server
$ cd ~/lamp-server/

Create a directory that will be mounted as Apache Document Root within the Apache container. This directory is used to deploy our web applications and the php-apache Docker container will serve our web applications to clients.

$ mkdir ~/lamp-server/html

Create a default PHP page in this directory. The PHP script contains a single phpinfo() function, that generates a webpage with detailed information about Apache server and installed plugins.

$ echo "<?php phpinfo(); ?>" > ~/lamp-server/html/index.php

We need to install some additional PHP plugins on the php-apache Docker container. For this purpose, we have to create the build context file for our php-apache Docker container.

Create a directory to store php-apache build context.

$ mkdir php-apache

Create build context file for php-apache Docker container.

$ vi php-apache/Dockerfile

Add following directives there in.

FROM php:7.4-apache

RUN docker-php-ext-install pdo pdo_mysql mysqli

Since, we are deploying a multi-container Docker application, therefore, we need to use docker-compose to create and execute our containers.

For this purpose, we need to create docker-compose.yml file that contains the directives to create our containers.

$ vi docker-compose.yml

And add following directives to create php-apache container.

version: '3'
services:
        php-apache:
                build:
                        context: ./php-apache
                ports:
                        - 80:80
                volumes:
                        - ./html:/var/www/html
                links:
                        - 'mariadb'

Configure MariaDB Docker Container

Create a directory for Dockerfile that will be used to create mariadb Docker container.

$ mkdir -p mariadb/sql

Create a SQL script to prepare our sample table.

$ vi mariadb/sql/init-db.sql

Add following SQL statements in this file.

USE testdb;

CREATE TABLE test (
        name varchar(30),
        email varchar(50)
);

INSERT INTO test (name, email)
VALUES
        ('Ahmer', 'ahmer@centlinux.com'),
        ('Mansoor','mansoor@centlinux.com'),
        ('Salman','salman@centlinux.com');

Create a Dockerfile to customize our mariadb Docker container.

$ vi mariadb/Dockerfile

Add the following build context there in.

FROM mariadb:10.5

ENV MYSQL_ROOT_PASSWORD 123
ENV MYSQL_USER ahmer
ENV MYSQL_PASSWORD 123
ENV MYSQL_DATABASE testdb

COPY ./sql /docker-entrypoint-initdb.d/

Create a directory on Docker Host to store MariaDB Server data files. This directory will be mounted within the MariaDB Docker container on startup.

$ mkdir mariadb_data

Now, configure a MariaDB docker container in the same docker-compose.yml file.

$ vi docker-compose.yml

Append following lines of code under the “services” section in this file.

 mariadb:
         build:
              context: ./mariadb
         volumes:
              - ./mariadb_data:/var/lib/mysql

Install LAMP Stack in Docker

Start our LAMP stack environment by using docker-compose command.

$ sudo docker-compose up
...
Starting lamp-server_mariadb_1 ... done
Starting lamp-server_php-apache_1 ... done
Attaching to lamp-server_mariadb_1, lamp-server_php-apache_1
...
mariadb_1     | 2020-02-28 17:46:24 0 [Note] InnoDB: Buffer pool(s) load completed at 200228 17:46:24

Open URL http://docker-01.centlinux.com in a web browser.

LAMP Stack – PHPInfo Page

Our LAMP Stack has been serving the default PHP page that we have created above.

Connect PHP Application with MariaDB Database

To demonstrate the connectivity between php-apache and mariadb Docker containers, we are creating a PHP webpage that creates connection to MariaDB database to fetch and display the data from a database table.

For this purpose, we are replacing the existing index.php with a new webpage that contains the PHP code to accomplish the required task..

$ mv html/index.php html/phpinfo.php
$ vi html/index.php

Add following HTML code in this file.

<html>
   <head>
      <title>Fetching Data from MariaDB Server</title>
   </head>
   <body>
        <style>
        td,th {
        border: solid black 1px;
        font-size: 30px;
        width: 200px;
        }
        </style>
        <table>
        <tr>
        <th>Name</th>
        <th>Email</th>
        </tr>
      <?php
         $dbhost = "mariadb";
         $dbuser = "ahmer";
         $dbpass = "123";
         $db = "testdb";
         $dbconn = mysqli_connect($dbhost, $dbuser, $dbpass, $db);

         if(! $dbconn ) {
            die('Could not connect: ' . mysql_error());
         }
         $query = mysqli_query($dbconn, "SELECT * FROM test")
            or die (mysqli_error($dbconn));

         while ($row = mysqli_fetch_array($query)) {
            echo
                "<tr>
                <td>{$row['name']}</td>
                <td>{$row['email']}</td>
                </tr>";
         }

         mysqli_close($dbconn);
      ?>
   </body>
</html>

Open URL http://docker-01.centlinux.com in a web browser.

LAMP Stack Sample Page

You can see that, our web page is now displaying data from the test table.

Final Thoughts

Setting up the LAMP stack on Docker provides a flexible and efficient environment for web development, allowing you to run your applications in isolated containers for better performance and scalability. Whether you’re a beginner or an experienced developer, Docker can simplify the deployment and management of your LAMP stack.

If you need assistance with installing the LAMP stack on Docker, I offer a comprehensive service on Fiverr. This service includes:

Get your LAMP stack up and running smoothly with professional help. Visit my Fiverr page for more details: Fiverr – How to Install LAMP Stack on Docker.

Let me help you get started with Docker and the LAMP stack today!

Exit mobile version