🚀 How To Run Laravel Using Docker Container

10, Jul 2025/

Category : Project

Author : NEXT Team

Post Thumbnail

📦 Pendahuluan

Laravel adalah salah satu framework PHP paling populer dan powerful. Supaya project Laravel kita bisa berjalan lebih konsisten dan portabel di berbagai environment (terutama untuk tim atau server production), Docker menjadi solusi modern untuk containerization.

Pada artikel ini, saya akan membagikan pengalaman bagaimana saya membuat dan deploy project Laravel ke dalam container Docker, dan menghubungkannya dengan database MySQL/MariaDB, termasuk bagaimana integrasinya dengan container database yang sudah berjalan di luar Docker Compose.

🛠️ Stack yang Digunakan

  • Laravel 11
  • PHP 8.3 (Apache)
  • MySQL 8.3 / MariaDB (di container terpisah)
  • Docker & Docker Compose
  • Composer

🎯 Tujuan

  • Men-deploy Laravel ke dalam Docker container
  • Menghubungkan Laravel ke database MariaDB yang sudah berjalan
  • Menjelaskan proses build, konfigurasi .env, dan manajemen image/container

🧱 Struktur Project Docker

Dalam project Laravel ini, kita menggunakan:

  • PHP 8.3 + Apache sebagai web server
  • Mysql sebagai database
  • File konfigurasi: Dockerfile, .env, dan docker-compose.yml

🛠️ 1. Dockerfile

FROM php:8.3-apache

# Install PHP extensions
RUN apt-get update && apt-get install -y \
    git zip unzip curl libpng-dev libjpeg-dev libonig-dev libxml2-dev libzip-dev \
    libpq-dev libicu-dev g++ \
    && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip intl

# Enable Apache mod_rewrite
RUN a2enmod rewrite

# Set working directory
WORKDIR /var/www/html

# Set Git safe directory
RUN git config --global --add safe.directory /var/www/html

# Copy Apache vhost config
COPY docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf

# Copy project files
COPY . .

# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Install Laravel dependencies
RUN composer install --optimize-autoloader --no-dev

# Set permissions
RUN chown -R www-data:www-data /var/www/html && chmod -R 755 /var/www/html

EXPOSE 80

⚙️ 2. Contoh docker-compose.yml 

Jika database sudah berjalan di luar (misal di Synology NAS), kita cukup hubungkan Laravel container ke network eksternal:

version: "3.8"

services:
  app:
    build:
      context: .
      dockerfile: dockerfile
    container_name: your_app
    ports:
      - "2025:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - db
    environment:
      - APP_ENV=local
      - APP_DEBUG=true
      - DB_HOST= "Your Host" #Maybe Local Host
      - DB_PORT=3306
      - DB_DATABASE="Your Database"
      - DB_USERNAME="Your Username"
      - DB_PASSWORD="Your Password"

  db:
    image: mysql:8.3
    container_name: mysql_db
    restart: unless-stopped
    ports:
      - "3307:3306" # Post to public port
    environment:
      MYSQL_DATABASE: "Your Database"
      MYSQL_USER: "Your Username"
      MYSQL_PASSWORD: "Your Password"
      MYSQL_ROOT_PASSWORD: "Your Password Root"
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

📄 3. Konfigurasi .env  Laravel

Sesuai dengan pengaturan database yang sudah ada:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=http://localhost

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database

PHP_CLI_SERVER_WORKERS=4

BCRYPT_ROUNDS=12

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database

CACHE_STORE=database
CACHE_PREFIX=

MEMCACHED_HOST=127.0.0.1

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

VITE_APP_NAME="${APP_NAME}"

🚀 Build & Deploy

  • Build Laravel container:
docker compose up -d --build
  • Akses di browser:
http://localhost:8080 //sesuaikan port yang sudah dibuat

🧠 Tips Tambahan

  • Pastikan .env tidak dimasukkan ke Docker Hub: tambahkan ke .dockerignore
  • Gunakan docker exec -it untuk mengakses container secara langsung
  • Gunakan volume mount agar perubahan file langsung tercermin di container

✅ Kesimpulan

Dengan pendekatan ini, kita bisa:

  • Menjalankan Laravel di Docker dengan PHP 8.3 + Apache
  • Menghubungkan Laravel ke MySQL/MariaDB yang sudah ada
  • Menjaga project tetap portable, reproducible, dan mudah dideploy

Semoga artikel ini membantu kamu yang sedang belajar atau membangun sistem Laravel dengan Docker!
Selamat bereksperimen! 🚢

Butuh pertanyaan lebih lanjut?

Klik tombol di bawah untuk chat dengan team kami via WhatsApp.

Mulai Chat