---
# System prepended metadata

title: docker-compose
tags: [42-inception]

---

# Resources

+ Docker Compose Quickstart
https://docs.docker.com/compose/gettingstarted/

+ docker compose command list
https://docs.docker.com/reference/cli/docker/compose/

+ Use Docker Compose
https://docs.docker.com/get-started/workshop/08_using_compose/



# Perfect Integration Setup:
```bash
nginx Container (Port 443)
        ↓ HTTPS requests
        ↓ 
  WordPress Container (Port 9000)
        ↓ FastCGI
        ↓
   MariaDB Container (Port 3306)
```

# before cheking with docker-compose

## Complete cleanup (step-by-step)
```bash!
# Stop all services
docker-compose down --remove-orphans

# Clean using Docker containers (this works without sudo)
docker run --rm -v $HOME/data/mariadb_data:/data alpine sh -c "rm -rf /data/* /data/.*" 2>/dev/null || true
docker run --rm -v $HOME/data/wordpress_data:/data alpine sh -c "rm -rf /data/* /data/.*" 2>/dev/null || true

# Clean Docker system
docker system prune -f
docker volume prune -f

# Verify directories are empty
echo "MariaDB data directory:"
ls -la $HOME/data/mariadb_data/
echo "WordPress data directory:"
ls -la $HOME/data/wordpress_data/

# Start fresh
docker-compose up --build
```
## OR: Quick one-liner cleanup
```bash!
docker-compose down && \
docker run --rm -v $HOME/data/mariadb_data:/data alpine rm -rf /data/* && \
docker run --rm -v $HOME/data/wordpress_data:/data alpine rm -rf /data/* && \
docker system prune -f  

#start
&& \ 
docker-compose up --build
```

# Start Fresh Docker Compose:




# Docker Compose Commands:
## Building Specific Services:
```bash!
# Build only WordPress container
docker-compose build wordpress

# Build only nginx container  
docker-compose build nginx

# Build only MariaDB container
docker-compose build mariadb

# Build multiple specific services
docker-compose build wordpress nginx

# Build all services
docker-compose build
```

## Running Services:
```bash!
# Start all services (mariadb, wordpress, nginx)
docker-compose up

# Start all services with build
docker-compose up --build

# Start specific service(s)
docker-compose up mariadb
docker-compose up wordpress nginx

# Start in background (detached mode)
docker-compose up -d

# Start specific service in background
docker-compose up -d wordpress
```

## Service Management:

```bash!
# Stop specific service
docker-compose stop wordpress

# Restart specific service  
docker-compose restart wordpress

# Remove specific service
docker-compose rm wordpress

# View logs of specific service
docker-compose logs wordpress
docker-compose logs -f wordpress  # Follow logs
```

## Checking Status:
```bash!
# See which services are running
docker-compose ps

# See all containers (running and stopped)
docker-compose ps -a

# Check resource usage
docker-compose top
```


## Complete Lifecycle:

```bash!
# Build → Start → Monitor
docker-compose build wordpress
docker-compose up wordpress
docker-compose logs -f wordpress

# Stop everything
docker-compose down

# Clean restart with build
docker-compose down
docker-compose up --build
```



---
# Cleanup thorough commands
🧹 Option 1: Clean Docker Compose Stack (Recommended)
Stop and Clean Your Project:
```bash!
# Navigate to your project
cd /home/yilin/GITHUB/inception/srcs

# Stop and remove containers, networks, and volumes
docker-compose down --volumes --remove-orphans

# Remove project-specific images
docker-compose down --rmi all

# Clean up any remaining project containers
docker rm $(docker ps -aq --filter "label=com.docker.compose.project=srcs") 2>/dev/null || true
```
🧹 Option 2: Clean Docker System (More Thorough)
Remove Unused Docker Resources:
```bash!
# Remove all stopped containers
docker container prune -f

# Remove all unused networks
docker network prune -f

# Remove all unused volumes
docker volume prune -f

# Remove all unused images
docker image prune -f

# Remove all build cache
docker builder prune -f
```
🧹 Option 3: Nuclear Option (Clean Everything)
⚠️ WARNING: This removes ALL Docker data on your system!
```bash!
# Stop all running containers
docker stop $(docker ps -q) 2>/dev/null || true

# Remove all containers
docker rm $(docker ps -aq) 2>/dev/null || true

# Remove all images
docker rmi $(docker images -q) 2>/dev/null || true

# Remove all volumes
docker volume rm $(docker volume ls -q) 2>/dev/null || true

# Remove all networks (except defaults)
docker network rm $(docker network ls -q) 2>/dev/null || true

# Clean everything (NUCLEAR OPTION)
docker system prune -a --volumes -f
```
🧹 Option 4: Clean Your Data Directories
Clean Bind-Mounted Data:
```bash!
# Remove your project data (use Docker to avoid permission issues)
docker run --rm -v $HOME/data:/data alpine sh -c "rm -rf /data/*"

# Or remove directories completely
rm -rf $HOME/data/mariadb_data $HOME/data/wordpress_data

# Recreate empty directories
mkdir -p $HOME/data/mariadb_data $HOME/data/wordpress_data
```
🎯 Recommended Clean Sequence for Your Project:
```bash!
# Complete project cleanup
cd /home/yilin/GITHUB/inception/srcs

# Stop everything
docker-compose down --volumes --remove-orphans --rmi all

# Clean data directories
docker run --rm -v $HOME/data:/data alpine sh -c "rm -rf /data/*"

# Clean Docker system
docker system prune -f
docker volume prune -f
docker network prune -f

# Verify clean state
docker ps -a        # Should be empty or minimal
docker images       # Should be clean
docker volume ls    # Should be minimal
docker network ls   # Should show only defaults

# Clean directory structure
ls -la $HOME/data/mariadb_data/     # Should be empty
ls -la $HOME/data/wordpress_data/   # Should be empty
```
🔍 Check What's Using Space:
```bash!
# See Docker disk usage
docker system df

# See detailed usage
docker system df -v

# See largest images
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k 3 -h

# See largest volumes
docker volume ls --format "table {{.Name}}\t{{.Driver}}\t{{.Size}}"
```
🚀 After Cleanup - Fresh Start:
```bash!
# Verify everything is clean
docker ps -a
docker images
docker volume ls
docker network ls

# Start fresh
cd /home/yilin/GITHUB/inception/srcs
docker-compose up --build
```

# Summay | 📋 Quick Clean Commands by Scope:

| **Scope**              | **Command**                                                 |
| ---------------------- | ----------------------------------------------------------- |
| **Project Only**       | `docker-compose down --volumes --rmi all`                   |
| **Unused Resources**   | `docker system prune -f`                                    |
| **Everything**         | `docker system prune -a --volumes -f`                       |
| **Data Directories**   | `docker run --rm -v $HOME/data:/data alpine rm -rf /data/*` |
| **Specific Container** | `docker rm -f container_name`                               |
| **Specific Image**     | `docker rmi image_name`                                     |


---
# After run ```docker-compose up```, check if everything set up correctly 
## 1. Service Status:
```bash!
docker-compose ps
# All services should be "Up"
```
## 2. Web Test:
```bash!
curl -k https://localhost:8443
```
=> Should return:
```html
<!DOCTYPE html>
<html lang="en-US">
<head>
    <title>My Inception Site</title>
    <!-- WordPress HTML content -->
```
Instead of raw PHP code!

3. Content Type:
```bash!
curl -k -I https://localhost:8443
```
=> Should show:
```bash!
Content-Type: text/html; charset=UTF-8  # ✅ HTML, not text/plain
```
