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