Tutorial ini akan memandu Anda dalam menggunakan Docker untuk menjalankan aplikasi Laravel menggunakan Docker Desktop.
Pastikan Anda sudah menginstall:
- Docker Desktop
- Git (opsional)
Project ini adalah aplikasi Laravel standar dengan penambahan konfigurasi Docker:
dockerfile
- Konfigurasi untuk membuat Docker image.dockerignore
- File untuk mengecualikan file/folder yang tidak diperlukan saat buildREADME.md
- Dokumentasi ini
Dockerfile ini dirancang khusus untuk aplikasi Laravel dengan konfigurasi berikut:
FROM php:8.2-apache
- Menggunakan PHP versi 8.2 dengan web server Apache
- Image ini sudah include PHP dan Apache yang siap pakai
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
nodejs \
npm
- Install paket-paket yang diperlukan Laravel
- Termasuk Node.js dan NPM untuk asset compilation
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
- Install ekstensi PHP yang dibutuhkan Laravel:
pdo_mysql
: Untuk koneksi database MySQLmbstring
: Untuk manipulasi string multibyteexif
: Untuk membaca metadata gambarpcntl
: Untuk process controlbcmath
: Untuk operasi matematika presisi tinggigd
: Untuk manipulasi gambar
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
- Menginstall Composer untuk dependency management PHP
WORKDIR /var/www
COPY . /var/www
COPY --chown=www-data:www-data . /var/www
- Set direktori kerja ke
/var/www
- Copy semua file project ke container
- Set ownership ke user
www-data
(user Apache)
RUN composer install --optimize-autoloader --no-dev
RUN npm install && npm run build
- Install dependencies PHP melalui Composer
- Install dan build asset frontend dengan NPM
RUN a2enmod rewrite
- Enable Apache rewrite module untuk URL rewriting Laravel
- Konfigurasi Apache untuk mengarahkan document root ke folder
public
- Enable
.htaccess
denganAllowOverride All
RUN chown -R www-data:www-data /var/www \
&& chmod -R 755 /var/www/storage \
&& chmod -R 755 /var/www/bootstrap/cache
- Set permission yang tepat untuk folder storage dan cache
File .dockerignore
berfungsi untuk mengecualikan file dan folder yang tidak diperlukan saat proses build Docker image. Ini akan mempercepat proses build dan mengurangi ukuran image.
node_modules/ # Dependencies Node.js (akan diinstall ulang)
/vendor/ # Dependencies Composer (akan diinstall ulang)
.env # File environment (security)
.env.* # Semua variant file environment
.vscode/ # VS Code settings
.idea/ # PhpStorm/IntelliJ settings
/storage/app/* # File upload user
/storage/framework/* # Cache Laravel
/bootstrap/cache/* # Bootstrap cache
/public/build/ # Compiled assets
.git/ # Git repository data
README.md # Documentation (tidak diperlukan di production)
docs/ # Documentation folder
*.log # Log files
*.sqlite # SQLite database files
- π Build Lebih Cepat: Mengurangi file yang di-copy ke Docker context
- π¦ Image Lebih Kecil: Hanya include file yang benar-benar diperlukan
- π Keamanan: Mencegah file sensitif (.env) masuk ke image
- πΎ Efisiensi: Mengurangi penggunaan disk space dan bandwidth
Sebelum build Docker image, kita perlu download base images terlebih dahulu untuk menghindari timeout error:
docker pull php:8.2-apache
docker pull composer:latest
Penjelasan:
docker pull
: Command untuk download image dari Docker Hubphp:8.2-apache
: Base image PHP 8.2 dengan Apache web servercomposer:latest
: Image Composer untuk dependency management PHP
Mengapa perlu pull terlebih dahulu?
- β Menghindari timeout error saat build
- β Memastikan koneksi ke Docker registry stabil
- β Download sekali pakai, bisa digunakan untuk build berkali-kali
- β Mempercepat proses build selanjutnya
Setelah base images berhasil di-download, baru jalankan build:
docker build -t tutorial-docker-laravel .
Penjelasan:
docker build
: Command untuk membuild Docker image-t tutorial-docker-laravel
: Memberikan tag/nama "tutorial-docker-laravel" pada image.
: Menggunakan Dockerfile di direktori saat ini
Tips:
- Pastikan Anda berada di folder project yang berisi
dockerfile
- Proses build akan memakan waktu 3-5 menit untuk pertama kali
- Jika ada error, cek kembali langkah 1 (pull base images)
Setelah build berhasil, jalankan container:
docker run -d -p 8080:80 --name laravel-container tutorial-docker-laravel
Penjelasan:
docker run
: Command untuk menjalankan container-d
: Detached mode (berjalan di background)-p 8080:80
: Port mapping - port 8080 di host diarahkan ke port 80 di container--name laravel-container
: Memberikan nama "laravel-container" pada containertutorial-docker-laravel
: Nama image yang akan dijalankan (sesuai dengan langkah 2)
Buka browser dan akses: http://localhost:8080
Jika berhasil, Anda akan melihat halaman welcome Laravel! π
docker ps
docker ps -a
docker stop laravel-container
docker start laravel-container
docker exec -it laravel-container bash
docker logs laravel-container
docker rm laravel-container
docker rmi tutorial-docker-laravel
Jika mengalami permission error, pastikan folder storage
dan bootstrap/cache
memiliki permission yang tepat:
docker exec -it laravel-container bash
chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache
chmod -R 775 /var/www/storage /var/www/bootstrap/cache
Jika port 8080 sudah digunakan, ubah ke port lain:
docker run -d -p 8081:80 --name laravel-container tutorial-docker-laravel
Pastikan Docker Desktop berjalan dan tidak ada typo di Dockerfile.
Jika mengalami error seperti:
ERROR: failed to resolve source metadata for docker.io/library/php:8.2-apache:
failed to do request: Head "https://registry-1.docker.io/v2/library/php/manifests/8.2-apache":
net/http: TLS handshake timeout
Solusi:
-
Pull base images terlebih dahulu (seperti dijelaskan di langkah 1):
docker pull php:8.2-apache docker pull composer:latest
-
Restart Docker Desktop jika masih error
-
Cek koneksi internet - pastikan koneksi stabil
-
Disable VPN sementara jika menggunakan VPN
-
Cek proxy settings di Docker Desktop Settings > Resources > Proxies
Untuk penggunaan yang lebih advanced, Anda bisa menggunakan Docker Compose. Buat file docker-compose.yml
:
version: "3.8"
services:
app:
build: .
ports:
- "8080:80"
environment:
- APP_ENV=production
- APP_DEBUG=false
volumes:
- ./storage:/var/www/storage
Jalankan dengan:
docker-compose up -d
-
Rebuild Image Setelah Perubahan Code: Setiap kali mengubah code, Anda perlu rebuild image:
docker build -t tutorial-docker-laravel . docker stop laravel-container docker rm laravel-container docker run -d -p 8080:80 --name laravel-container tutorial-docker-laravel
-
Environment Variables: Gunakan file
.env
atau Docker environment variables untuk konfigurasi -
Database: Untuk database, sebaiknya gunakan container terpisah (MySQL, PostgreSQL, dll.)
-
Development vs Production: Dockerfile ini cocok untuk production. Untuk development, pertimbangkan menggunakan volume mounting.
Docker memungkinkan Anda untuk:
- β Menjalankan aplikasi Laravel tanpa install PHP/Apache lokal
- β Konsistensi environment antar developer
- β Easy deployment ke berbagai platform
- β Isolasi aplikasi dari sistem host
- β Scalability dan portability
Selamat mencoba! π³