DOCKER Dockerfile (/docker/php/Dockerfile) FROM php:7.4-apache # Install PHP extensions RUN apt-get update && apt-get install -y \ libpng-dev libonig-dev libxml2-dev zip unzip git \ && docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd # Enable Apache rewrite RUN a2enmod rewrite # Set working directory WORKDIR /var/www/html # Set permission RUN chown -R www-data:www-data /var/www/html && chmod -R 755 /var/www/html File docker-compose.yml version: "3.8" services: web: build: context: . dockerfile: docker/php/Dockerfile container_name: ci3_web ports: - "8000:80" volumes: - ./src:/var/www/html depends_on: - db db: image: mysql:8.0 container_name: ci3_db environment: MYSQL_DATABASE: ci3db MYSQL_ROOT_PASSWORD: root MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3307:3306" volumes: - dbdata:/var/lib/mysql volumes: dbdata: Perintah docker Install Docker (cara paling aman: repositori resmi Docker) # Install dependensi sudo apt install -y ca-certificates curl gnupg # Tambahkan GPG key Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Tambahkan repository Docker echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/debian trixie stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Jalankan & cek Docker sudo systemctl enable docker sudo systemctl start docker sudo docker –version # Tes sudo docker run hello-world # Agar Docker bisa dijalankan tanpa sudo sudo usermod -aG docker $USER newgrp docker # Tes tanpa sudo docker run hello-world # Masuk ke container web docker compose exec web bash # Masuk ke container database docker compose exec db bash # Restart container web atau db docker compose restart web docker compose restart db docker compose restart # Backup & restore database backup docker compose exec db mysqldump -u user -ppassword ci3db > backup.sql restore docker compose exec -T db mysql -u user -ppassword ci3db < backup.sql # Stop container ketika tidak digunakan docker compose stop # Hapus container docker rm -f nama_container # Build & Jalankan Docker docker compose build docker compose up -d DOCKER LARAVEL (APACHE + PHP + MySQL) Struktur Folder laravel-docker/ ├── docker/ │ └── apache/ │ └── vhost.conf ├── src/ # Source Laravel ├── Dockerfile ├── docker-compose.yml └── .dockerignore Dockerfile (PHP 8.2 + Apache) FROM php:8.2-apache # Install system dependencies RUN apt-get update && apt-get install -y \ git \ unzip \ zip \ libpng-dev \ libonig-dev \ libxml2-dev \ curl # Enable Apache mod_rewrite RUN a2enmod rewrite # Install PHP extensions RUN docker-php-ext-install \ pdo \ pdo_mysql \ mbstring \ bcmath \ gd \ xml # Install Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Set document root Laravel ENV APACHE_DOCUMENT_ROOT=/var/www/html/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' \ /etc/apache2/sites-available/*.conf \ /etc/apache2/apache2.conf \ /etc/apache2/conf-available/*.conf WORKDIR /var/www/html Apache Virtual Host docker/apache/vhost.conf DocumentRoot /var/www/html/public AllowOverride All Require all granted ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Docker Compose -> docker-compose.yml version: "3.8" services: app: build: . container_name: laravel_app ports: - "8000:80" volumes: - ./src:/var/www/html - ./docker/apache/vhost.conf:/etc/apache2/sites-available/000-default.conf depends_on: - db db: image: mysql:8.0 container_name: laravel_db restart: always environment: MYSQL_DATABASE: laravel MYSQL_USER: laravel MYSQL_PASSWORD: laravel MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" .dockerignore node_modules vendor .env .git Build & run container docker compose up -d --build Install Laravel (di dalam container) docker compose exec app composer create-project laravel/laravel . Set permission docker compose exec app chmod -R 775 storage bootstrap/cache docker compose exec app chown -R www-data:www-data storage bootstrap/cache docker compose exec app chmod -R 775 storage bootstrap/cache Edit .env DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=laravel DB_PASSWORD=laravel Generate key & migrate docker compose exec app php artisan key:generate docker compose exec app php artisan migrate Akses Laravel http://localhost:8000 Perintah Penting docker compose exec app bash # masuk container docker compose down # stop docker compose logs -f # lihat log