Docker: Mengembangkan aplikasi web tanpa pusing dengan PHP dan Node.js

ilustrasi debian 12 dan debian 13

Bermula dari rasa penasaran saya yang muncul setelah memahami cara kerja Docker, saya mencoba untuk mengembangkan aplikasi web hanya dengan memasang Docker. Ya, hanya Docker saja. Saya menghapus PHP dan Node.js yang ada di komputer dan hanya menyisakan Docker.

Saya menggunakan Laravel dan Nuxt sebagai bahan uji untuk mengetahui kelebihan dan kekurangan dari percobaan ini. Saya yakin framework yang lain juga akan mendapatkan hasil yang kurang lebih sama.

Anda penasaran dengan hasilnya? Simak pengalaman saya menggunakan Docker agar tidak pusing memasang PHP dan Node.js untuk pengembangan web pada artikel berikut.

Latar belakang

Biasanya saya mengatur lingkungan pengembangan web di komputer dengan memasang paket-paket yang tersedia pada sistem operasi. Selain karena lebih praktis, versi yang disediakan adalah Long-Term Support (LTS) sehingga mampu memenuhi kebutuhan dari Laravel dan Nuxt.

Kekurangan dari cara ini adalah biasanya versi framework terbaru sudah tidak mendukung versi LTS tertentu sehingga perlu menggunakan peralatan alternatif seperti nvm yang dapat memasang dan mengelola berbagai versi dari Node.js, atau lewat PPA oleh ondrej/php dan Homebrew.

Oleh karena itu, saya ingin mencoba menggunakan Docker agar lebih leluasa dalam mengembangkan aplikasi web pada Debian.

Memasang Docker

Saya memasang Docker Engine untuk Linux dengan sistem operasi Debian. Anda perlu memasang Docker Desktop atau Docker Engine agar dapat menjalankan perintah docker. Panduan pemasangan Docker dapat Anda ikuti di halaman dokumentasi Docker.

Pada sistem operasi Linux, Anda mungkin perlu menjalankan langkah-langkah setelah pemasangan Docker agar dapat menjalankan Docker tanpa perlu menjadi pengguna root.

Jalankan perintah dari citra Docker

Kita dapat menggunakan citra Docker untuk menjalankan perintah dari paket tanpa perlu memasangnya di komputer. Citra Docker yang kita butuhkan dapat dicari di Docker Hub. Setelah memilih paket, misalnya php, periksa bagian Tags untuk melihat kode citra yang tersedia.

Rumus baris perintah Docker untuk menjalankan paket-paket dari citra Docker adalah sebagai berikut:

docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/app -w /app [kode_citra] [perintah_paket]
ArgumenKeterangan
-itGunakan mode interaktif seperti sedang menjalankan terminal di komputer lokal. Tanpa argumen ini, proses akan langsung keluar ketika muncul prompt.
--rmLangsung hapus wadah setelah selesai. Ini menghemat ruang penyimpanan.
-u $(id -u):$(id -g)Jalankan perintah sebagai pengguna:grup_pengguna komputer saat ini agar kita bisa menghapus berkas-berkas yang dihasilkan dari menjalankan perintah dengan Docker.
-v $(pwd):/appMenghubungkan folder sekarang ke direktori /app di wadah.
-w /appMenetapkan direktori kerja tempat perintah dijalankan. Pastikan direktori yang ditetapkan sama dengan yang ditetapkan pada argumen -v.
[kode_citra]Kode citra paket. Lihat bagian Tags untuk melihat pilihan yang tersedia. Misal, php:8.4-cli.

Mari kita coba gunakan rumus di atas untuk menjalankan perintah-perintah yang biasa digunakan dalam pengembangan aplikasi dengan Laravel dan Nuxt.

Laravel

Composer

Dari rumus dasar sebelumnya, kita dapat menjalankan baris perintah Composer dengan rumus berikut:

docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/var/www/html -w /var/www/html composer:latest composer [perintah_paket]

Bagian [perintah_paket] dapat kita isi dengan perintah untuk membuat proyek atau mengelola paket.

# buat proyek baru dengan Laravel
docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/var/www/html -w /var/www/html composer:latest composer create-project laravel/laravel my-laravel-app

# pasang paket baru
docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/var/www/html -w /var/www/html composer:latest composer require spatie/laravel-permission

Baris perintah Artisan

Kita dapat menggunakan php-cli untuk menjalankan kode PHP seperti baris perintah Artisan.

docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/var/www/html -w /var/www/html php:8.4-cli php artisan route:list

Node.js

Rumus baris perintah untuk menggunakan citra dari Node.js adalah sebagai berikut:

docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/app -w /app node:22-alpine [perintah_paket]

Kita menggunakan argumen -w /app karena Node.js menggunakan direktori /app sebagai direktori utama untuk bekerja dan tidak menggunakan direktori lain selain itu.

Berikut adalah contoh perintah untuk membuat proyek baru dengan Nuxt dan memasang paket ke dalam proyek dengan npm.

# buat proyek baru dengan Nuxt
docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/app -w /app node:22-alpine npm create nuxt@latest

# pasang paket untuk proyek
docker run -it --rm -u $(id -u):$(id -g) -v $(pwd):/app -w /app node:22-alpine npm install @nuxt/ui

Manfaatkan alias untuk baris perintah

Gimana? Sudah capek nulis baris perintah? 😂

Kita dapat menghemat waktu dan teks dengan membuat alias atau singkatan untuk baris perintah yang panjang.

Di sini saya menggunakan .bash_aliases yang disimpan pada direktori /home pengguna. Bagi Anda yang menggunakan shell lainnya seperti zsh, silakan merujuk pada dokumentasi resminya.

Sunting berkas tersebut dengan nano, vim, atau penyunting teks kesukaan kalian.

nano ~/.bash_aliases

Kemudian isi dengan teks berikut:

# buat alias untuk perintah dasar
alias dri='docker run -it --rm -u $(id -u):$(id -g)'

# buat alias untuk perintah selanjutnya
alias php='dri -v $(pwd):/app -w /app php:8.4-cli php'

alias composer='dri -v $(pwd):/var/www/html -w /var/www/html composer:latest composer'

alias npm='dri -v $(pwd):/app -w /app node:22-alpine npm'
alias npx='dri -v $(pwd):/app -w /app node:22-alpine npx'

Buka ulang terminal atau buka terminal di tab baru untuk menggunakan alias yang baru dibuat.

Setelah itu, kita bisa menjalankan perintah seolah-olah kita telah memasang paket-paket tersebut di komputer.

composer require spatie/laravel-permission

npm create nuxt@latest
npm run dev

Kesimpulan

Setelah mencoba menjalankan perintah-perintah tersebut, berikut adalah kelebihan dan kekurangan dari menggunakan Docker sebagai alat pengembangan web utama.

Kelebihan

  • Sistem operasi menjadi "bersih" dari paket-paket aplikasi.
  • Tidak perlu khawatir akan paket-paket yang bertentangan.
  • Leluasa menentukan versi citra atau lingkungan yang akan digunakan dengan alias yang berbeda. Misal, dphp untuk alias PHP yang dijalankan menggunakan Docker.

Kekurangan

  • Ada beban tambahan (overhead) yang menyebabkan penurunan kecepatan. Mungkin tidak terasa signifikan di proyek kecil.
  • Perlu membuat alias yang berbeda untuk menjalankan versi paket yang berbeda.
  • Tidak bisa akses Nuxt dari alamat http://localhost:3000 ketika menjalankan perintah npm run dev. Kita bisa mengakses lewat alamat IP internal yang diberikan Docker kepada container, misal http://172.17.0.2:3000 atau dengan membuat alias baru khusus untuk perintah npm run dev yang berjalan di port 3000.
alias nrd='dri -p 3000:3000' node:22-alpine npm run dev'

Jadi, ketika kita menggunakan Docker sebagai peralatan pengembangan utama, alias adalah koentji.

Kita dapat leluasa mengelola versi paket yang akan digunakan serta tidak perlu khawatir akan bertentangan dengan nama perintah yang berasal dari paket-paket yang dipasang melalui repositori bawaan.

Penutup

Nah, setelah membaca artikel ini, apakah Anda juga tertarik untuk mencoba menggunakan Docker sebagai alat utama untuk pengembangan aplikasi web?

Silakan bagikan pendapat Anda tentang artikel ini pada kolom komentar di sosial media berikut:

LinkedIn - Instagram

Rujukan

Assalaamu 'alaikum 👋

Saya Findra. Selamat datang di blog saya. Di sini, saya berbagi panduan seputar Debian, pengembangan aplikasi web, serta berbagi catatan pribadi.

Saya berharap blog ini bisa jadi sumber daya yang bermanfaat dan menumbuhkan semangat belajar kita bersama, terutama dalam ekosistem Linux dan teknologi web.

Semoga bermanfaat!