Docker untuk Developer PHP: Dari Nol Sampai Deploy
Salah satu masalah klasik developer: "Di komputerku jalan, kok di server error?" Docker menyelesaikan masalah ini dengan mengemas aplikasi beserta seluruh dependensinya ke dalam container yang identik di mana saja.
Kenapa Docker?
- Lingkungan dev dan production identik
- Tidak perlu install PHP, MySQL, Nginx langsung di komputer
- Mudah onboarding developer baru: cukup
docker compose up - Mudah menjalankan beberapa versi PHP sekaligus
Struktur Project
my-blog/
├── docker/
│ ├── php/Dockerfile
│ └── nginx/default.conf
├── src/ ← kode PHP di sini
├── docker-compose.yml
└── .env
Dockerfile untuk PHP
# docker/php/Dockerfile
FROM php:8.3-fpm-alpine
# Install ekstensi yang dibutuhkan Laravel/PHP
RUN apk add --no-cache
linux-headers
$PHPIZE_DEPS
&& docker-php-ext-install pdo_mysql opcache
&& pecl install redis
&& docker-php-ext-enable redis
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
# Copy kode aplikasi
COPY src/ .
RUN composer install --no-dev --optimize-autoloader
Konfigurasi Nginx
# docker/nginx/default.conf
server {
listen 80;
root /var/www/html/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
docker-compose.yml
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
build: ./docker/php
volumes:
- ./src:/var/www/html
environment:
DB_HOST: db
DB_DATABASE: ${DB_NAME}
DB_USERNAME: ${DB_USER}
DB_PASSWORD: ${DB_PASS}
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
MYSQL_ROOT_PASSWORD: root
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
retries: 10
phpmyadmin:
image: phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
volumes:
db_data:
Jalankan
# Pertama kali atau setelah ubah Dockerfile
docker compose up --build -d
# Cek container yang berjalan
docker compose ps
# Lihat log realtime
docker compose logs -f php
# Masuk ke container PHP
docker compose exec php sh
# Hentikan semua
docker compose down
Tips Sehari-hari
# Jalankan artisan (Laravel) dari luar container
docker compose exec php php artisan migrate
# Import database
docker compose exec -T db mysql -u user -ppassword dbname < dump.sql
# Bersihkan semua (termasuk volume database)
docker compose down -v
Dengan setup ini, siapapun di tim tinggal clone repo + docker compose up --build dan langsung bisa development tanpa install apapun lagi.
0 Komentar