LAMP Stack with Docker Compose

This guide sets up a basic LAMP (Linux, Apache, MySQL, PHP) stack using Docker and Docker Compose. It includes PHP 7.4 with Apache, MySQL 5.7, and phpMyAdmin.


๐Ÿ”ง Prerequisites

Install Docker and Docker Compose:

sudo apt install docker.io            
sudo apt install docker-compose       

๐Ÿ“ Project Setup

Create the project directory and subdirectories:

mkdir -p my-lamp-project/www          
cd my-lamp-project                    

๐Ÿณ docker-compose.yml File

Create a docker-compose.yml file with the following content:

version: '3.8'

services:
  web:
    image: php:7.4-apache
    container_name: lamp_web
    ports:
      - "80:80"                             
    volumes:
      - ./www:/var/www/html                
    depends_on:
      - db
    command: /bin/bash -c "docker-php-ext-install mysqli pdo pdo_mysql && apachectl -D FOREGROUND"

  db:
    image: mysql:5.7
    container_name: lamp_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword    
      MYSQL_DATABASE: mydatabase           
      MYSQL_USER: user                     
      MYSQL_PASSWORD: password             
    volumes:
      - db_data:/var/lib/mysql             

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: lamp_phpmyadmin
    depends_on:
      - db
    environment:
      PMA_HOST: db                         
      MYSQL_ROOT_PASSWORD: rootpassword
    ports:
      - "8080:80"                          

volumes:
  db_data:

๐Ÿš€ Starting the Containers

Run the stack in detached mode:

docker-compose up -d

๐Ÿง  Useful Docker Commands

docker stats                             
docker top <container_id>               
docker inspect <container_id>           

# Get internal IP of the database container
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' lamp_db

๐Ÿ˜ Accessing MySQL

Enter the database container and connect to MySQL:

docker exec -it lamp_db mysql -u root -p

๐Ÿ› ๏ธ Installing MySQL Extensions in Web Container

Sometimes needed manually:

docker exec -it lamp_web bash
docker-php-ext-install mysqli pdo pdo_mysql
apachectl restart
exit

๐Ÿ” Post-Install: Run Docker Without Sudo

Add your user to the docker group:

sudo usermod -aG docker $USER
newgrp docker

๐Ÿงน Cleanup

Stop and remove all containers and images:

docker-compose down --rmi all