Docker Deployment Guide | Tadreeb LMS
DOCKERFILE:
# Dockerfile
```dockerfile
FROM php:8.3-apache
RUN apt-get update && apt-get install -y \
curl \
unzip \
zip \
libzip-dev \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
libxml2-dev \
libonig-dev \
libldap2-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-configure ldap \
&& docker-php-ext-install \
pdo \
pdo_mysql \
mysqli \
mbstring \
xml \
zip \
bcmath \
gd \
exif \
ldap
COPY --from=composer:2.7.8 /usr/bin/composer /usr/local/bin/composer
WORKDIR /var/www/html
COPY . .
RUN mkdir -p \
storage/framework/cache/data \
storage/framework/sessions \
storage/framework/views \
storage/logs \
bootstrap/cache \
&& chown -R www-data:www-data /var/www/html \
&& chmod -R 775 /var/www/html
RUN a2enmod rewrite
RUN sed -i 's!/var/www/html!/var/www/html/public!g' \
/etc/apache2/sites-available/000-default.conf
EXPOSE 80
CMD ["apache2-foreground"]
```
✅ Step 1: Install Docker
curl -fsSL https://get.docker.com | sh
sudo apt update
sudo systemctl enable docker
sudo systemctl start docker
✅ Step 2: Create docker-compose.yml
nano docker-compose.yml
Paste the following:
# docker-compose.yml
```yaml
services:
app:
container_name: tadreeblms_app
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "8000:80"
volumes:
- laravel_storage:/var/www/html/storage
- laravel_cache:/var/www/html/bootstrap/cache
networks:
- appnet
db:
container_name: tadreeblms_db
image: mysql:8.0
restart: unless-stopped
env_file:
- .env.example
volumes:
- mysql_data:/var/lib/mysql
networks:
- appnet
networks:
appnet:
volumes:
mysql_data:
laravel_storage:
laravel_cache:
```
Save:
- Press `CTRL + O` → Enter
- Press `CTRL + X`
---
## ✅ Step 3: Run Containers
```bash
sudo docker-compose up -d
✅ Step 4: Open Port 8000 (AWS EC2)
Go to AWS EC2 → Security Groups → Inbound Rules
Add rule:
- Type: Custom TCP
- Port: 8000
- Source: 0.0.0.0/0
✅ Step 5: Access Application
Open in browser:
http://<your-server-ip>:8000
✅ Step 6: Run Installer
Enter database details:
- Host:
db - Port:
3306 - Database:
tadreeblms - Username:
tadreeb - Password:
secret
🔍 Troubleshooting
Check running containers:
docker ps
Check logs:
docker-compose logs -f
Check DB logs:
docker-compose logs -f db
🧠 Notes
- No need to clone project on server
- No need Dockerfile on server
- Image is pulled from Docker Hub
- docker-compose is only used to run services
🔥 Final Flow
Install Docker → Create compose → Run → Open port → Access app → Install