Skip to content

Instantly share code, notes, and snippets.

@Xnuvers007
Created May 28, 2026 11:28
Show Gist options
  • Select an option

  • Save Xnuvers007/276539a6fa1060c734dbeac15ece54a4 to your computer and use it in GitHub Desktop.

Select an option

Save Xnuvers007/276539a6fa1060c734dbeac15ece54a4 to your computer and use it in GitHub Desktop.

Pastikan WSL Aktif

Check terlebih dahulu dengan:

  • Windows -> ketikan "Turn Windows Features on or off"
  • Cari "Windows Subsystem Linux"
  • Di centang
  • Restart komputer jika dibutuhkan

Cek wsl

  • Tekan Windows + R
  • ketik cmd
  • ketik wsl -v
  • apakah versi 2 ? jika belum ketik
wsl --set-default-version 2
  • Lihat linux dengan
wsl --list --online
wsl --install -d <Nama Linux/Distro>
contoh
wsl --install -d Ubuntu

Install Docker Desktop jika memungkinkan

https://www.docker.com/products/docker-desktop/

Docker Desktop

  • Buka Setting gergaji
  • Pilih Resource
  • Cari WSL dan centang Ubuntu/Linux distro kalian

Install Docker WSL

  • sudo apt update && sudo apt upgrade && sudo apt install nano docker.io docker-compose net-tools -y

Check Docker WSL

  • docker -v

Command Line Untuk docker

cd ~
mkdir web-server
nano Dockerfile
nano docker-compose.yml
mkdir belajardocker
nano index.php

Cek IP Docker

ifconfig

cari yang eth0 dan inet yang diambil / ipnya

Struktur

image

jika ingin buat/edit file tinggal ke folder web-server/belajardocker, dan buat scriptmu sendiri jika sudah maka tinggal ketik, misal disini saya buat file test.php

test.php:

<?php
  echo "testing";
?>

IPmu/test.php contoh: 172.160.x.x/test.php

Dikasus ini

Port 80 adalah apache webservernya dan port 8822 adalah phpmyadminnya port mysql adalah port 3306

Hapus Bersih Docker biar gak makan Penyimpanan

  • pertama kita ketik
docker ps -a
  • Salin container ID dan nama IMAGE nya
docker stop
  • sebagai contoh disini container web-server-web, phpmyadmin/phpmyadmin, dan mariadb:10.11 saya adalah (31627fbeec8c dab0c8f1e0a2 d572bb1a578b
  • maka peritntah buat hapus nya adalah
docker rm <Container ID>
docker rm 31627fbeec8c dab0c8f1e0a2 d572bb1a578b

(Atau bisa juga menggunakan nama containernya: docker rm web-server-web-1 web-server-phpmyadmin-1 web-server-db-1)

Hapus image dockernya

docker rmi web-server-web phpmyadmin/phpmyadmin mariadb:10.11

Install wsl docker without docker desktop

Lihat Disini

Bersihkan Sisa Network dan Volume

docker system prune --volumes -f

🐳 Panduan Modern: Setup Web Server PHP & MySQL dengan WSL 2 dan Docker

Panduan ini dirancang untuk membantu siapa saja—termasuk pemula—untuk membangun lingkungan pengembangan web (local web server) berbasis PHP, Apache, phpMyAdmin, dan MariaDB/MySQL menggunakan teknologi WSL 2 dan Docker.


📌 Daftar Isi

  1. Langkah 1: Aktivasi WSL (Windows Subsystem for Linux)
  2. Langkah 2: Pengecekan & Instalasi Distro Linux
  3. Langkah 3: Instalasi & Konfigurasi Docker
  4. Langkah 4: Struktur Direktori & Pembuatan Server
  5. Langkah 5: Akses & Pengujian Web Server
  6. Langkah 6: Informasi Port Server
  7. Langkah 7: Pembersihan Docker (Menghemat Penyimpanan)

🛠 Langkah 1: Aktivasi WSL (Windows Subsystem for Linux)

Sebelum memulai, kita harus memastikan fitur WSL sudah aktif di sistem operasi Windows Anda.

  1. Buka menu Windows Start, ketik "Turn Windows Features on or off", lalu tekan Enter.
  2. Cari opsi "Windows Subsystem for Linux" di dalam daftar yang muncul.
  3. Berikan tanda Centang (✓) pada opsi tersebut.
  4. Klik OK dan Restart komputer/laptop Anda jika diminta oleh sistem.

💻 Langkah 2: Pengecekan & Instalasi Distro Linux

Setelah komputer menyala kembali, mari pastikan versi WSL Anda sudah menggunakan versi terbaru (Versi 2).

  1. Tekan tombol Windows + R di keyboard, ketik cmd, lalu tekan Enter untuk membuka Command Prompt.

  2. Cek versi WSL Anda dengan perintah berikut:

    wsl -v
  3. Jika versinya belum menunjukkan Versi 2, ubah pengaturan defaultnya menjadi versi 2 dengan perintah:

wsl --set-default-version 2
  1. Lihat daftar distro Linux yang tersedia secara online dengan mengetik:
wsl --list --online
  1. Install distro Linux pilihan Anda (direkomendasikan menggunakan Ubuntu):
wsl --install -d Ubuntu

🐳 Langkah 3: Instalasi & Konfigurasi Docker

Terdapat dua metode untuk menggunakan Docker di dalam WSL. Pilih salah satu metode yang paling sesuai dengan kebutuhan Anda:

Opsi A: Menggunakan Docker Desktop (Sangat Direkomendasikan untuk Pemula)

  1. Unduh installer resmi melalui tautan berikut: Docker Desktop for Windows.
  2. Jalankan installer dan ikuti proses instalasi hingga selesai.
  3. Buka aplikasi Docker Desktop, lalu klik ikon Settings (Roda Gergaji) di pojok kanan atas.
  4. Pilih menu Resources -> WSL Integration.
  5. Cari nama distro Linux Anda (misalnya Ubuntu), lalu aktifkan Centang (✓) untuk mengaktifkan integrasi.
  6. Klik Apply & restart.

Opsi B: Menggunakan Docker via WSL Terminal (Tanpa Docker Desktop)

Jika Anda tidak ingin menginstall Docker Desktop, Anda bisa langsung menginstall Docker di dalam terminal Linux WSL Anda.

🔗 Baca panduan lengkapnya di sini: Cara Install Docker WSL tanpa Docker Desktop

Buka terminal WSL/Ubuntu Anda, kemudian jalankan perintah berikut untuk memperbarui sistem dan memasang Docker beserta komponen pendukungnya:

sudo apt update && sudo apt upgrade && sudo apt install nano docker.io docker-compose net-tools -y

Verifikasi Docker

Pastikan Docker sudah terpasang dengan benar dengan mengecek versinya di dalam terminal WSL:

docker -v

📂 Langkah 4: Struktur Direktori & Pembuatan Server

Mari buat folder kerja untuk web server Anda di dalam lingkungan WSL. Jalankan perintah-perintah berikut secara berurutan di dalam terminal Linux Anda:

# Pindah ke direktori home
cd ~

# Buat folder utama untuk proyek web server
mkdir web-server

# Masuk ke folder tersebut untuk membuat konfigurasi Docker
cd web-server
nano Dockerfile
nano docker-compose.yml

# Buat folder khusus untuk meletakkan file-file website (PHP/HTML)
mkdir belajardocker

# Masuk ke folder website dan buat file index pertama Anda
cd belajardocker
nano index.php

🗂 Struktur Folder Proyek

Struktur folder Anda akan terlihat rapi seperti gambar di bawah ini:

💡 Tips Pengembangan: Jika ke depannya Anda ingin membuat atau mengedit file website, Anda cukup masuk ke dalam folder web-server/belajardocker/ lalu buat script Anda sendiri di sana.


🌐 Langkah 5: Akses & Pengujian Web Server

1. Mengetahui IP Docker Anda

Untuk mengakses website yang berjalan di dalam Docker, Anda perlu mengetahui IP Address dari WSL Anda terlebih dahulu. Jalankan perintah ini di terminal WSL:

ifconfig

Cari bagian eth0 dan lihat pada baris inet. IP yang tertera di sana adalah alamat IP server lokal Anda (Contoh: 172.160.x.x).

2. Menguji File PHP

Sebagai contoh, mari kita buat sebuah file bernama test.php di dalam folder belajardocker:

<?php
  echo "testing";
?>

3. Cara Mengakses di Browser

Buka browser favorit Anda (Chrome/Edge/Firefox), lalu ketikkan alamat IP yang sudah Anda dapatkan diikuti dengan nama filenya:

http://<IP_WSL_ANDA>/test.php

Contoh:
http://172.160.x.x/test.php

🔌 Langkah 6: Informasi Port Server

Secara default, konfigurasi port yang digunakan pada proyek web server ini adalah sebagai berikut:

Layanan Server Nomor Port Deskripsi
Apache Webserver 80 Digunakan untuk mengakses file website utama (PHP/HTML).
phpMyAdmin 8822 Panel web untuk mengelola basis data MySQL/MariaDB secara visual.
MySQL / MariaDB 3306 Port utama koneksi database.

🧹 Langkah 7: Pembersihan Docker (Menghemat Penyimpanan)

Seiring berjalannya waktu, kontainer dan image Docker yang sudah tidak digunakan dapat memakan kapasitas penyimpanan (storage) hardisk Anda. Berikut cara membersihkannya sampai bersih:

1. Cek Seluruh Kontainer yang Ada

docker ps -a

Catat atau salin Container ID dan nama IMAGE yang ingin dihapus.

2. Hentikan Kontainer yang Sedang Berjalan

docker stop <Container_ID>

3. Hapus Kontainer Proyek

Sebagai contoh, jika Anda memiliki kontainer bernama web-server-web, phpmyadmin, dan mariadb dengan ID 31627fbeec8c, dab0c8f1e0a2, dan d572bb1a578b, jalankan perintah:

Menggunakan Container ID:

docker rm 31627fbeec8c dab0c8f1e0a2 d572bb1a578b

Atau menggunakan Nama Kontainer:

docker rm web-server-web-1 web-server-phpmyadmin-1 web-server-db-1

4. Hapus Image Docker

Setelah kontainer dihapus, hapus master image-nya agar ruang penyimpanan benar-benar kembali lega:

docker rmi web-server-web phpmyadmin/phpmyadmin mariadb:10.11

5. Bersihkan Sisa Network dan Volume yang Terbengkalai

Gunakan perintah sakti ini untuk membersihkan sisa-sisa cache, network, dan volume Docker yang tidak terpakai secara otomatis:

docker system prune --volumes -f

Selamat Belajar dan Bereskplorasi dengan Docker & WSL!

version: '3.8'
services:
web:
build: .
ports:
- "80:80"
volumes:
- ./belajardocker:/var/www/html/belajardocker
depends_on:
- db
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: password_super_rahasia_123!
MYSQL_DATABASE: crud_db
MYSQL_USER: admin_crud
MYSQL_PASSWORD: password_user_456!
volumes:
- db_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8822:80"
environment:
PMA_HOST: db
PMA_PORT: 3306
volumes:
db_data:
version: '3.8'
services:
web:
build: .
ports:
- "80:80"
volumes:
- ./belajardocker:/var/www/html/belajardocker
depends_on:
- db
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: password_super_rahasia_123!
MYSQL_DATABASE: crud_db
MYSQL_USER: admin_crud
MYSQL_PASSWORD: password_user_456!
volumes:
- ./mysql_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8822:80"
environment:
PMA_HOST: db
PMA_PORT: 3306
FROM php:8.2-apache
RUN sed -ri -e 's!/var/www/html!/var/www/html/belajardocker!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!/var/www/html/belajardocker!g' /etc/apache2/apache2.conf
RUN docker-php-ext-install pdo pdo_mysql
RUN a2enmod rewrite headers
RUN echo "ServerTokens Prod" >> /etc/apache2/apache2.conf && \
echo "ServerSignature Off" >> /etc/apache2/apache2.conf && \
echo "Header set X-Frame-Options \"SAMEORIGIN\"" >> /etc/apache2/apache2.conf && \
echo "Header set X-XSS-Protection \"1; mode=block\"" >> /etc/apache2/apache2.conf && \
echo "Header set X-Content-Type-Options \"nosniff\"" >> /etc/apache2/apache2.conf
WORKDIR /var/www/html/belajardocker
<?php
$host = 'db'; // Sesuai nama service database di docker-compose
$dbname = 'crud_db';
$user = 'admin_crud';
$pass = 'password_user_456!';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Simulasikan C (Create) - Bikin tabel otomatis kalau belum ada
$pdo->exec("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(50))");
// Simulasikan Insert data acak setiap kali halaman di-refresh
$nama_acak = "User_" . rand(10, 99);
$stmt_insert = $pdo->prepare("INSERT INTO users (nama) VALUES (:nama)");
$stmt_insert->execute(['nama' => $nama_acak]);
// Simulasikan R (Read) - Ambil data dari table
$stmt = $pdo->query("SELECT * FROM users ORDER BY id DESC LIMIT 5");
echo "<h1 style='color: #2c3e50;'>Apache Webserver Sukses Ter-deploy!</h1>";
echo "<h3>Document Root aktif di: <code>/var/www/html/belajardocker</code></h3>";
echo "<hr>";
echo "<h4>5 Data Terakhir dari Database MariaDB:</h4><ul>";
while ($row = $stmt->fetch()) {
echo "<li>ID: " . $row['id'] . " - Nama: " . htmlspecialchars($row['nama']) . "</li>";
}
echo "</ul>";
} catch(PDOException $e) {
echo "<h3 style='color: red;'>Koneksi Database Gagal: " . $e->getMessage() . "</h3>";
}
?>

CARA 1: Paling Praktis (Ubah ke Local Bind Mount lalu Zip)

Di script docker-compose.yml sebelumnya, kita menyimpan database MariaDB menggunakan Named Volume bawaan Docker (db_data:/var/lib/mysql). Volume ini tersimpan jauh di dalam sistem Linux/WSL.

Biar gampang dikirim, kita paksa MariaDB untuk menyimpan datanya langsung di dalam folder project kita.

Langkah 1: Edit file docker-compose.yml dengan isian dari docker-compose2-share.yml Ubah bagian volumes pada service db menjadi titik-slash (./), seperti ini:

Langkah 2: Restart Docker-nya Jalankan lagi docker compose up -d. Sekarang, kamu akan melihat folder baru bernama mysql_data muncul di dalam folder project-mu.

Langkah 3: Kirim ke Orang Lain

  • Matikan dulu Docker-nya: docker compose down (biar datanya nggak ada yang corrupt saat dikirim).
  • Jadikan seluruh folder project-mu (yang isinya docker-compose.yml, Dockerfile, folder belajardocker/, dan folder mysql_data/) menjadi file .zip atau .tar.gz.
  • Kirim file .zip tersebut ke temanmu.

Langkah 4: Cara Temanmu Menjalankannya Temanmu cukup mengekstrak file .zip tersebut, buka terminal di dalam folder itu, lalu ketik: docker compose up -d --build Boom! Server jalan, dan datanya langsung persis seperti yang ada di komputermu karena folder mysql_data tadi ikut terbawa.

CARA 2: Best Practice Server (Backup Data ke File .SQL)

Cara pertama praktis untuk development, tapi kalau beda sistem operasi (misal kamu pakai Linux, temanmu pakai Windows), folder mysql_data kadang suka kena masalah permission (hak akses). Cara paling aman dan pro adalah melakukan Database Dump.

Langkah 1: Export Data (Dump) dari dalam Container Pastikan container database kamu sedang jalan, lalu ketik perintah ini di terminal WSL kamu untuk mengekspor isi databasenya menjadi file SQL:

# Ganti 'nama_container_db' dengan nama container database kamu (bisa dicek pakai 'docker ps')
docker exec nama_container_db mariadb-dump -u admin_crud -puser_password_rahasia crud_db > backup_data.sql

Catatan: Tidak ada spasi antara -p dan password user_password_rahasia.

Langkah 2: Kirim Project & File SQL Jadikan folder project-mu (file compose, source code PHP) ditambah file backup_data.sql tadi menjadi satu file .zip, lalu kirim ke temanmu.

Langkah 3: Cara Temanmu Menjalankannya

  • Temanmu mengekstrak .zip dan menjalankan docker compose up -d --build. (Aplikasi jalan, tapi data masih kosong).
  • Temanmu menyuntikkan file backup_data.sql ke dalam databasenya dengan perintah:
cat backup_data.sql | docker exec -i nama_container_db mariadb -u admin_crud -puser_password_rahasia crud_db

(Info Tambahan) Bagaimana dengan Image-nya?

Di kasus kita, karena kamu mengirimkan file Dockerfile dan docker-compose.yml, temanmu akan men-download dan men-build ulang image-nya secara otomatis saat dia mengetik docker compose up -d --build. Ini adalah cara paling elegan dan ukurannya paling kecil untuk dikirim (karena kamu cuma mengirim text/kode).

Tetapi, jika kamu punya Image yang tidak ada Dockerfile-nya dan mau dikirim mentahannya dalam bentuk file offline, kamu bisa menggunakan fitur Save dan Load:

  • Kamu menyimpan Image ke file tar: docker save -o mentahan_image.tar nama_image_kamu

  • Temanmu me-load Image tersebut di komputernya: docker load -i mentahan_image.tar

(Namun ingat, docker save ini HANYA mengirim aplikasinya saja, TIDAK membawa data dari Volume database seperti yang sudah saya jelaskan di atas).

Untuk project webserver dan CRUD kamu, saya sangat menyarankan menggunakan CARA 1 jika temanmu juga menggunakan WSL/Linux, atau CARA 2 jika ingin menghindari error beda Operating System!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment