Ngobrolin Kontainer
Ringkasan Episode
Bantu KoreksiEpisode Ngobrolin Web ini membahas teknologi containerization, khususnya Docker, sebagai solusi modern untuk masalah kompatibilitas dan dependency management yang telah menjadi tantangan sejak lama dalam pengembangan aplikasi. Diskusi dimulai dengan sejarah perkembangan environment development dari era XAMPP yang all-in-one, masalah versi yang berbeda-beda antar developer, hingga munculnya solusi version manager seperti NVM untuk Node.js. Para host menjelaskan evolusi dari virtual machine yang berat namun powerful, hingga lahirnya teknologi container yang lebih efisien dengan konsep layer-based dan image sharing. Diskusi mendalam mengurai perbedaan antara VM dan Container, di mana VM membutuhkan OS lengkap sementara container hanya membutuhkan library dan komponen yang spesifik, membuatnya jauh lebih ringan dan cepat. Episode ini juga membahas Docker Hub sebagai registry untuk berbagai image siap pakai, konsep image vs container, serta Docker Compose untuk mengelola multi-container application. Para host mendemonstrasikan penggunaan Portainer sebagai container management tool yang production-ready, serta membahas konsep Dev Container untuk development environment yang konsisten. Episode ini menutup dengan contoh praktis deployment Next.js tanpa terikat pada Vercel, menunjukkan fleksibilitas yang ditawarkan oleh Docker.
Poin-poin Utama
- •Docker adalah teknologi containerization yang menghilangkan masalah "it works on my machine" dengan konsistensi environment
- •Perbedaan utama VM dan Container: VM butuh OS lengkap sementara container hanya butuh library spesifik yang lebih efisien
- •Docker menggunakan sistem layer-based di mana layer yang sama bisa di-share antar container, menghemat storage dan build time
- •Docker Hub adalah registry berisi ribuan image siap pakai dari PHP, MySQL, Node.js, hingga kombinasi custom
- •Image adalah blueprint/template aplikasi sedangkan Container adalah instance yang sedang running dari image tersebut
- •Docker Compose memudahkan mengelola multi-container application dengan menentukan urutan start dan dependency antar service
- •Portainer adalah container management tool yang production-ready dengan UI untuk deploy dan monitor container
- •Dev Container memungkinkan development environment yang konsisten, bahkan bisa dijalankan di GitHub Codespace
[Menelefon]
Halo, halo, halo. Selamat malam.
Bertemu lagi bersama kita bertiga. Ada saya Rizza, ada Eka dan juga ada Ivan.
Seperti biasa di Selasa Malam.
- Waktunya kita mau rolling web. - Mau rolling web.
Mungkin waktu kita live ini sudah waktunya lebaran ya, jadi mohon maaf lah ya.
- Hampir lebaran ya, besok lebaran. Besok lebaran ya. - Besok, besok.
- Minta maaf lah ya, batin. - Minta maaf lah ya, batin.
- Iya. - Mohon maaf lah ya dan batin.
Iya, siapa tahu kita pernah menyampaikan informasi yang salah, jadi mohon maaf ya.
- Mohon dikoreksi. - Menyesatkan.
- Lebih tepatnya. - Menyesatkan.
- Mudah-mudahan enggak ya, mudah-mudahan enggak. - Atau bercandanya enggak, co.
- Membingungkan. - Atau hot take-nya kurang hot.
- Biasanya Ivan tuh punya hot take tapi kurang hot. - Bisa terlalu hot?
Ternyata enggak hot, ternyata banyak orang mikir begitu juga.
Tapi privacy-nya teranjur bilang, "Mungkin spicy opinion."
Ya, ekspetasinya terlalu tinggi ya.
Kirain se-kontroversial apa, taunya pasti sampai yang kita, "Oh iya, iya."
- "Oh gitu, iya sama." Atau, "Ya, gitu doang." - "Ya, gitu doang."
Ya. Berhubung sudah hampir lebaran, jadi malam ini kita tidak live dulu.
Jadi kita ini edisi rekaman.
Ini rekaman buat nanti dipublikasi di tanggal 9 April 2024.
Jadi ada kemungkinan besok tanggal 10 atau tanggal 11-nya dua hari lagi lebaran.
- Pasti lagi pada lihat hilal malam ini. - Iya, lagi siap-siap.
Apakah besok mau, apa, mau masak atau mau lanjut puasa ya?
- Iya, iya, iya. Nah, malam hari ini... - Liburan ke mana?
- Huh? - Liburan ke mana, Mas Riza?
Liburan? Liburan di sini aja.
Nanti abis lebaran baru dicari waktu liburan.
Lihat transkrip lengkap (986 segmen lagi)
- Yang tidak diurus sama-sama. - Oh iya, selalu anti-mainstream ya.
Anti-mainstream.
- Soalnya tidak, apa ya, tidak menikmati... - Macet.
...tradisi kemacetan, rebut-rebutan, dan harga tiket yang melambung tinggi.
Kita tunggu dari work trip saja.
Setuju, setuju.
Enggak, enggak.
Ya, cuman kan, ya itulah faktor ekonomi kan kalau dulu waktu masih single, ya hitungannya cuma satu.
Misalkan dulu masih sama orang tua, pokoknya terserah mau tiket berapa juga harus pulang.
Oh ya udah, udah dibayarin orang tua sendiri, aman kan.
Sekarang kalau mikir mau pulang kampung, di kali empat.
Sekarang apa? Itu ya, oh pangkat N.
Iya, eksponensial, di kali empat ya kalau tiketnya yang normal 700-800 aja, di kali empat, ya kan.
Belum lagi penginapan dan lain-lain.
Jadi ya, pulang kampungnya nanti-nanti aja.
Mudah-mudahan kalau ada libur long weekend atau anak-anak libur sekolah baru begitu.
Oke, topik kita malam ini apa? Topik kita malam ini adalah tentang container.
Atau yang populernya, salah satu teknologi yang populernya adalah docker ya.
- Docker, produk populernya. - Dokernya namanya docker. Teknologinya namanya container.
Tapi itu sama web container, web container API.
Web container API itu apa ya?
Oh, web assembly kan ya?
Yang kayak stack boots itu loh.
- Iya, iya, iya. - Dia pakai web assembly. - Iya, dia jalanin mesin di browser.
Mesinnya sendiri, titol memori nya sendiri dan segala macamnya.
Itu bisa kita lakukan nanti.
Nah, itu bisa besok-besok, tapi docker itu adalah container.
Container yang dimaksud di sini ya apanya untuk sekarang bedain aja konsep web container yang satu frase.
C-nya besar gitu, web container, sama konsep container ala si docker ini.
Nah, bingung-bingung ya.
Ini sebenarnya kalau mau dikategorisasikan itu masuknya sebenarnya ke arah ke ranah cloud atau ke ranah DevOps kali ya.
Semakin kesini, semakin kesini kayaknya kita web developer atau developer pada umumnya juga semakin terekspos nih sama tools-tools seperti ini.
Nah, mungkin sebelum kita mulai gali lebih dalam tentang docker dan container, kita bahas dulu kali ya sejarah perkembangan gimana kita develop aplikasi.
- Kenapa sampai ada container-containeran ya? - Betul.
Nah, awalnya kan umpangan aplikasi di lokal server gitu ya, di lokal environment.
- Lokal host. - Lokal host.
Pertama kali teman-teman di sini yang develop pertama kali Hello World-nya itu menggunakan tools apa untuk lokal host?
Saya pakai ASP. ASP itu berarti apa ya?
- Windows, eh, Microsoft. - IES, IES.
- IES, IES. - Iya itu web server-nya ya?
- Web server, iya web server. - Apache yang alternatifnya Apache ya, Apache.
- Iya, web server itu kan? - Nginx.
Apache, Nginx, kalau Java.
- Tomcat. - Tomcat.
- Tomcat. - Iya, Tomcat.
Kalau Windows, IES ya.
Kalau Hello World ke dulu nggak pakai server, karena HTML, CSS.
Front-end banget ya udah file-nya langsung dibuka aja, file system.
Cuma pertama kali pakai server udah XAMPP.
Oh, udah sama, iya. Sama sih, awal-awal.
Versi berapa ya? IES versi 5 gitu ya.
IES itu bawaan dari Windows kan, nggak perlu diinstall kan, tinggal jalanin servisnya kan ya.
Udah ada dia di Windows kan. Eh kalau Windows Pro ya, Pro.
- Jadi waktu itu masih XP ya, masih XP. Sampai serialkinya juga dihapal.
- FG KGW. - XP Ultimate.
- Nah itu... - Eh bang, serialkinya sama gitu buat semua?
- Sama, banyakan sama sumbernya. - Ada di Gejaya, ada di Gejaya itu.
Banyak.
Ya, hidupin IES itu hanya dari klik-klik aja sih.
- Karena environment-nya si Microsoft jadi lebih gampang ya.
Kalau saya, ya dari XAMPP dulu memang, mulainya dari XAMPP.
Terus pas skripsi itu kebetulan nggak pakai MySQL.
Kan XAMPP itu kan ada MySQL-nya kan ya.
Nah pas skripsi itu diminta pakai Postgre.
Jadi XAMPP-nya tetap dinyalain, MySQL-nya dimatiin, Postgre-nya di install sendiri.
- Tinggal install extent-nya kan. - Iya betul.
- Ya installasi, ya jadi diinstall di host ya.
- Kenapa dulu pakai XAMPP nggak kita install sendiri agak ribet ya?
- Karena ribet install satu-satu. Udah pernah nyobain juga sih.
Berusaha kan dulu buat belajar WordPress, terus kek install.
Kan Windows kan nggak ada apasai server-nya ya?
- Iya. - Ya, ribet lah.
- Hmm. - MySQL-nya sih relatif gampang ya.
Ada executable-nya. Yang ribet itu ngegabungin semuanya.
Yang ribet itu sebenarnya adalah PHP mining-nya.
Coba install PHP mining sendiri. Coba deh. Itu susah.
- Susahnya apa konfigurasinya? - Konfigurasinya susah.
- Konfigurasinya. - Karena dia kan PHP mining kan aplikasi PHP.
Terus kemudian harus connect. - Iya.
- Berarti kan install, jadi ibaratnya dia cuma file aja ya file.
Terus kemudian .conf-nya, .conf-nya harus sesuaiin.
Terus harus kemudian buat lagi user yang punya permisi untuk bisa connect ke MySQL-nya.
Dan segala macamnya lah. Dan cache-nya di mana, terus kemudian .conf-nya di mana.
Konfig-nya juga nggak cuma di satu tempat. Nah, pusing.
Makanya pakai XMPP itu gampang banget jadinya semua PHP mining-nya udah disiapin.
PHP-nya, executable-nya sudah disiapin. Tinggal pencet, localhost jalan.
- Yang menarik adalah kan di Windows memang agak ribet ya.
Karena command line tools-nya kan tidak se-powerful Unix-based kan yang Linux atau Mac OS gitu kan.
Tapi yang menariknya, ketika saya berpindah dari Windows ke Linux waktu udah kerja,
tetap yang dicari SAM juga ada ternyata.
Padahal di Linux Ubuntu itu tinggal apt-get install apache-2, apt-get install php.
Terus php-mode-nya juga diinstall sama terakhir MySQL atau Postgre kan.
Sebenarnya kan sederhana itu. Cuman karena udah terbiasa, cari juga yang seperti itu.
Ternyata ada. - Itu kan memudahkan dan streamline.
Maksudnya streamline experience buat orang yang mau pakai Windows, mau pakai Linux.
Nah, ini kan mindset-nya prinsipnya yang nanti sekian tahun kemudian diterapin di dokter juga kan.
Yang penting kalau kita bahas.
- Dan parahnya ketika pindah ke Mac OS juga nyari juga ada yang namanya MAM, M-A-M-P.
- Bayar kan tapi ya, MAM. - Iya, berbayar. Yang pro-nya berbayar.
Jadi experience yang menarik karena kita nggak perlu install macem-macem.
Cukup install satu executable, kemudian udah terima.
Jadi dia ada di kanan bawah, tinggal kita klik mau di-start atau di-stop gitu kan.
Walaupun kalau starting Windows-nya jadi lebih lambat karena dia harus start beberapa service tambahan.
Nah, dari some kemudian udah mulai kan, udah mulai belajar-belajar akhirnya bisa install sendiri.
Apache-nya udah bisa di-install sendiri, PHP-nya udah bisa di-install sendiri.
Terus MySQL dan lain-lain udah bisa install sendiri karena kemudahan pada saat menggunakan Linux terutama ya.
Terus ada masalah lagi, masalahnya adalah ketika kita bekerja di team itu biasanya masing-masing device itu punya versi sendiri-sendiri.
Misalkan saya developnya pakai PHP versi berapa dulu ya? 3.5 gitu kan.
Ivan udah versi 6 misalkan atau versi berapa gitu. Jauh banget kan.
Sementara ketika di-clone repo-nya nggak bisa jalan karena beda versi.
Ya kan, baik itu PHP, Apache, mungkin juga database-nya berbeda versi akhirnya.
Kenapa sudah pakai repo-repoan dulu? Pakai SVN gitu?
Ada, ada SVN, CVS.
- Udah ada package manager-nya juga? - Udah ada, eh package manager? Belum, belum ada.
Berarti beli versi berapa dong masing-masing dependensinya?
- Semuanya di-include monolitik. - Iya, di-include semua.
- Kan belum ada komputer. - Jadi kayak di-zip gitu kan, terus di-unzip.
- Tapi... - Terus ada ritminya gitu, silakan install php5 gitu. MySQL.
Jadi kita asumsi bahwa semua orang punya versi yang sama kadang-kadang ya.
Tapi kalau yang apa, ritminya orang yang apa, package-nya bagus ya ada.
Lebih masalahnya kalau di pengalaman saya itu biarpun misalnya sama-sama PHP versiannya sama lah.
Misalnya 5.5 atau 5.6 jaman itu ya.
- Tetapi ada extension yang nggak ada. - Oh iya benar.
Ada extension yang kita butuhkan di komputer lain nggak ada extension php-nya itu nggak di-install.
Contohnya PHP yang untuk image-image itu, image magic, atau iron cube, loader segala macem itu kan.
Itu kan PHP extension yang jarang dipakai, tetapi ternyata kita pakai itu dan nggak bisa.
Jadi sering terjadi masalah kompatibilitas seperti itu yang meributkan,
"Oh ini saya keluar kenapa nggak jalan, atau senapa saya pakai nggak jalan, nggak bisa stay set up di lokal."
Akhirnya ya kayak gitu kelamaan.
- Terlalu banyak troubleshooting ya. - Betul.
- Nah yang di front-end lebih parah lagi. - Susah ya.
Developer jaman sekarang kalau sekarang aja udah banyak complain.
- Kalau ngalamin yang.. - Pokoknya kalau jaman dulu lebih susah lagi.
Kalau di front-end beda lagi.
Kalau jQuery, masing-masing plugin bisa punya jQuery versi sendiri.
Oh itu entry point gue ke dalam web development yang serius.
Maksudnya yang total dulu-dulu kan kelihatannya cuma iseng-iseng doang, freelancen,
cuma bisa HTML, CSS, sama JavaScript yang client-side.
Karena mikir nggak diseriusin lama-lama, makin banyak di upwork tuh yang murah-murah, job yang kecil-kecil.
Itu yang kayak gitu-gitu tuh error kan dulu nggak tahu sekarang mungkin udah dihandle.
Kemana dulu semua plugin WordPress bawa jQuery sendiri-sendiri.
Terus ya udah sosokan webbing, tapi sebenarnya sambil masih baca-baca,
sebenarnya nggak worth it sama bayaran yang didapet.
Tapi karena ternyata penasaran, ya udah.
Terus malah dapet ilmu, "Oh ini race condition, oh gini caranya."
"JQuery-nya jadi jQuery 2, jadi jQuery 3."
Terus ditumbung beneran deh jadi WordPress.
Jadi ada apa ya?
Ada lucu-lucuannya juga, maksudnya lucu-lucuannya.
Mungkin siapa tahu kenapa sampai sekarang jQuery point-nya tinggi, pemakaiannya usage-nya.
Salah satunya karena satu web bisa jadi dipakai dua versi jQuery.
Jadi keitungnya dua jQuery versi 2 sama jQuery versi 3.
Karena ada satu plugin yang tidak update, jadi dia tetap pakai jQuery versi 2 misalkan.
Terus sementara yang website di komponen yang lain itu semuanya versi 3.
Jadi tetap harus ada dua versi jQuery dalam satu aplikasi.
- Cuma itu masuk akal sih.
Maksudnya itu kalau udah ternyur kayak gitu dan udah lama developer aslinya nggak ada yang megang,
pasti nggak ada yang mau benerin kan, ya udah selama masih jalan biarin aja,
di alias atau apalah biar nggak tabrakan atau isu-isu lainnya.
- Mereka pakai jQuery No Conflict.
- Oh iya, ada ya.
- Ini jQuery No Conflict, iya nggak ada.
- Jadi mengalias, sebenarnya dia kayak cuma nunggu,
dia nunggu ada, mungkin nggak tahu pakai timeout atau pakai apa,
dia nunggu setiap jQuery baru datang di alias, ya semacam gitu lah nggak tahu.
- Nah pada saat perpedaan versi ini, ada solusi yang ditawarkan sama developer.
Yang paling populer adalah version manager.
Biasanya kalau Node itu ada namanya NVM, Node Version Manager.
Kalau Ruby ada Ruby Version Manager.
Ada RBA NV juga.
Terus kalau Python itu ada macem-macem, ada PIP, ada...
- Krokodaya.
- Krokodaya lagi, konda anak konda.
- Konda.
- Apa lagi?
Ada virtual ENV, ya.
Jadi kita bisa definisikan, wah saya mau install Node versi 14,
padahal sekarang yang terbaru adalah versi 21 atau 18 gitu kan.
Kita bisa install yang versi 14 khusus untuk project ini aja.
Tapi masalah yang database-nya beda versi itu nggak bisa disolving di sana.
Karena nggak ada database version manager kayaknya nggak ada.
- Iya itu sempat masalah juga kan dari MySQL 5, MySQL 5 loncat ke-8 kan.
- Wah jauh ya loncatnya.
- Iya.
- Itu kenapa?
- Nggak tahu.
- Konflikt.
- MySQL, MySQL 5...
- Pak Angkasir 657.
- Keluar MariaDB, MariaDB sebagai fortnya.
Terus itu yang MySQL, Oracle apa Sun ya?
- Sun.
Sun abis itu dibeli Oracle.
- Ya oke, berarti begitu. Jadi MySQL, apa sekarang kan sudah MySQL 8 kan?
- Ya, MySQL dibeli Sun, Sun dibeli Oracle.
Jadi semua yang barangnya Sun jadi punya Oracle, termasuk MySQL.
Itu juga susah tuh kompatibilitasnya tuh kayak kalau misalnya mau convert dari MySQL 5 ke MariaDB,
engine-nya kan beda. Ada yang kan kalau MySQL kan bawa engine MySQL sama InnoDB.
Kalau MariaDB beda lagi. Ada tetap bawa itu tapi ada tambah ketambahan lain.
Terus nanti naik ke MySQL 8, ada lagi itu, ada sedikit kompatibilitas isu.
Nah itu terlibat.
- Terlibat ya.
- Selain versi itunya sendiri, kadang antar OS juga kan.
Kalau misalnya Windows harus install apalagi kayak ada driver atau apa,
dependensi sih library bawaan yang ternyata nggak ada kalau kita mau install apalah MySQL atau PHP.
- Ya, ya, ya, ya. Terutama yang Windows ya agak berbeda ya.
- Redis juga akan menuju hal yang sama nanti lagi.
- Apa tuh?
- Dengar nggak?
- Dengar, dengar, dengar.
- Dibeli?
- Licensing ya? Itu harusnya kita bawa topik tentang licensing.
- Iya. Licensingnya Redis baru aja berubah.
- Oh nggak MIT lagi.
- BSD. Dia BSD license sebelumnya.
- BSD? Litang selalu.
- Iya.
- Iya. Nah, dari situ kita bisa solving satu, apa ya?
Programming line juice-nya bisa ada versinya atau platform kayak Node.js, PHP, Ruby, Python itu bisa.
Tapi database nggak bisa. Akhirnya muncul ide menarik gimana kalau kita running-nya di virtual machine.
Muncul lah.
- Itu karena teknologi Hyper-VM mulai...
- Mulai berkembang ya.
- Mulai muncut.
- Hyper-VM apa tuh? Nggak nyamain.
- Hyper-VM.
- Ingat nggak jamanya Intel mulai mengeluarkan Hyper-V atau Hyper-VM?
- Hyper-VM kan? Kayaknya maksudnya ini deh yang di private chat.
- Coba.
- Yang saya maksud itu mulai, prosesor itu mulai, ya itu ada open PC, Hyper-VM ada open PC sama send virtualization.
- Oh iya, iya, iya.
- Ingat nggak jamanya prosesor, ini Intel ya, jadi mulai mengeluarkan yang namanya multi-treading.
Jadi core-nya 2, tetapi trade-nya bisa 4.
- Oke.
- Atau mulai lah itu i3, i5, i7, i9.
Jadi dengan teknologi hyper-trading itu mulai lah muncul virtualization seperti ini.
Di perakarsai, yang paling gede itu kan, ininya, engine-nya itu kan open PC sama send virtualization.
Kalau ininya VMware, pernah dengar nggak?
- VMware, VMware iya.
- Enggak juga. Gila semua ini nggak ngerti gitu.
- Itu berbayar ya?
- Ada yang gratisnya.
- Oke.
- Dan yang free itu adalah VirtualBox.
- VirtualBox.
- Ya, VirtualBox itu free.
Jadi ibaratnya kita bisa menjalankan OS lain apapun di atas OS kita dengan teknologi virtualization.
Virtualization ya.
- Jadi virtual itu sebenarnya lawan katanya real machine ya.
Real machine itu maksudnya lokal machine kita.
- Host, kalau disebutnya host.
- Untuk yang kita pakai sekarang itu adalah host.
Tapi bukan dual boot ya.
- Bukan.
- Kalau pernah dual boot, misalnya kalau mau booting itu, booting ke Windows apalagi.
Bootloader-nya bisa pilih pakai Group, ya.
Pakai Group ke Linux.
Kalau ini bukan.
- Kita di dalam Windows.
- Di atas Windows bisa jalanin Linux.
- Ya, begitu juga sebaliknya.
- Karena itu tersimpan sih, itu virtualnya.
- Ya, anak jaman sekarang taunya WSL.
Tetapi bukan, WSL beda teknologi.
- Beda lagi.
- Itu subsystem kan.
Kalau HPM ini benar-benar dibooting.
Jadi dia nyalak, nge-booting, dan pakai memory, pakai disk, storage, pakai CPU.
- Ya, virtual semua.
- Jadi kayak bikin mesin di atas mesin gitu nggak sih kalau istilah yang sudut teknis.
- Bikin OS di atas OS.
- Menjalankan OS di atas OS.
Prosesornya itu virtual, memori-nya virtual.
Semua hardware-nya itu virtual.
Itu teknologi virtual mesin.
Dan itu solving problem ketika kita jalankan kita develop di dalam OS yang guest itu kan.
OS yang di dalam OS gitu kan.
Di dalam virtual.
Ya, OS virtual itulah ya, OS virtual.
Jadi kita developnya antara kita masuk ke OS yang kita inginkan itu.
Dalam hal ini misalkan Linux.
Atau kita konekin.
Bisa pakai FTP.
Jadi kita kayak remote ke dalam OS itu.
Jadi modingnya tetap pakai...
- Atau bisa share folder.
- Iya, share folder.
- Bisa share folder tapi network ya.
- Network.
- Network set.
- Jadi kita nggak langsung moding di Ubuntu.
Nggak perlu install editor.
Kita cukup install editor-nya di Windows kita.
Atau dimana kita connect-nya atau share folder ke OS tersebut.
Cuman problemnya adalah berat.
- Iya.
- Iya berat makan space.
- Ya berat lah satu OS saja jaman dulu.
Udah pemain berat.
- Iya berat sekali gitu kan.
- Not aja, sampai sekarang virtual ini masih dipakai loh.
- Masih masih.
- Kalau misalnya pernah denger kata VPS, Virtual Private Server, ya kan?
Sewa VPS, ya itu teknologinya ini virtualization.
- Tapi berarti dia server yang khusus, server yang khusus bikin banyak kayak virtual system kan?
- Iya, satu hardware bisa dibagi-bagi ke banyak mesin.
- Contohnya kalau di Google Cloud, buka satu kalau di Amazon kan EC2 atau EC2.
Kalau di Google Cloud apa ya?
VM.
VM ya namanya.
- Virtual Machine ya.
Compute Machine, Compute Engine.
- Compute Engine.
Kalau jalanin satu Compute Engine, kayak gini, sama.
Jadi OS gede-nya kan ada sendiri.
Nah, saya ingat zaman ini waktu virtualization ini pakai yang namanya Vagran.
Itu Vagran itu yang buat Hasicore.
Hasicore itu yang bikin Ansible.
- Oh iya benar.
Jadi sebelum ke Vagran, kayaknya kita lebih ke Ansible dulu nggak sih?
- Iya, Ansible dulu ada.
- Papet, papet.
- Papet, papet.
- Papet ya.
Safe.
Yang buku Kukuk kan, namanya Kukuk ya.
- Kukuk.
Safe ya, safe.
- Safe kan.
- Ya.
- Untuk runner-nya.
- Apa namanya ya?
- Untuk ya Kukuk, Vagran.
- Ini Vagran, ini kan problemnya tadi kan berat, satu berat.
Kedua, misalkan nih, saya punya satu project, Node.js-nya versi 14,
mungkin Postgreene-nya versi 9.
Terus abis itu selang beberapa bulan saya punya project, Node.js versi 18,
Postgreene-nya versi 10.
Itu kan setiap kali ada project, itu berarti kita harus punya satu VM kan.
Dan kita harus klik di GUI-nya, harus bikin dulu pilih OS-nya.
- Space-nya bakal besar banget ya.
- Betul.
Nah, munculah Vagran ini, tujuannya untuk bisa kita definisikan pakai script kan.
Saya pengen Ubuntu-nya versi sekian, Node.js-nya versi sekian,
Postgreene-nya versi sekian, terus kita bisa running.
- Dia yang set up sama Ribut, dia, si Vagran-nya itu ya.
- Istilahnya Headless.
- Selama ini tuh sering banyak Vagran tangga, dari mana?
Dari Laravel kan punya, Laravel kan banyak produknya tuh yang waktu itu kita bahas.
Ada produknya namanya Homestead.
Homestead itu, jadi kalau buat orang yang nggak terbiasa install,
set up Laravel, Composer, apa sih kan harus PHP, artisan, blablabla, Composer kan agak ribet.
Kalau pengen yang langsung jadi, itu pakenya Laravel Homestead.
Nah, itu di Vagran Box, tapi kayaknya berbayar deh.
Ya gitu, cuma sering baca karena itu, cuma nggak pernah ada kebutuhan pakai, jadi belum pernah coba.
Nah, ini salah satu server development yang untuk WordPress development dan PHP.
- Khusus untuk WordPress ya, berarti ini ya?
- Iya, Community Build untuk WordPress jaman itu ya, 10 tahun lalu kayaknya.
Jadi caranya, tekniknya di sini tuh sudah disiapin semua untuk template-template-nya
untuk bisa buat sebuah local machine yang sudah optimize untuk WordPress atau PHP.
- Tanpa harus install PHP kan? Bahkan nggak ada, kita nggak install PHP manualnya kan?
- Tapi harus install Virtual Box ya, dan Vagran.
- Iya, harus install.
- Jadi Virtual Box dan Vagran nanti dia yang akan create Virtual Box-nya,
berapa disk-nya, segala macam, dan software-software apa yang dibutuhkan dari Apache Engine X,
terus kemudian PHP-nya, versi berapa didefinisikan, PHP admin,
- Composer? - Composer, NPM, segala macam, sudah ada di sini semua.
Di-maintain komunitas, dan dulu saya suka pakai ini. Ini cuma kayak kalau mau naikin Vagran Up, Vagran Down, Vagran Destroy,
- Ini mirip Docker ya, konsepnya. - Iya, ini cikal bakal-nya.
- Cikal bakal-nya, Vagran, dan Ansible. Jadi script-nya ini Ansible sebenarnya dia untuk nge-generate.
- Script-nya Ansible. Untuk otomasi kan, otomasi deployment kan sebenarnya awalnya ya.
Si Ansible ini kan. - Lebih tepat, dia cuma runner ya.
Jadi mau pakai buat deployment bisa, mau pakai buat development bisa, bahasanya profisioning bisa.
- Profisioning, oke. Nah, habis dari sini baru muncul Docker.
- Iya. - Docker. Docker ini adalah salah satu.
- Jadi kenapa muncul teknologi ini? Karena untuk profisioning sebuah virtual environment, lama.
Butuh download, butuh setup, segala macam. - Betul.
Sedangkan teknologi container ini, dia nggak lama, karena dia cuma application, dia nggak virtualization.
Beda ya? - Iya.
Jadi kembali lagi ya, diingatkan Docker ini adalah nama produk, teknologinya adalah container.
Jadi apa yang membedakan antara container dengan VM, ya ini.
Jadi kalau VM kan semua, satu OS-nya dibuat, di-load oleh OS.
Sementara kalau Docker, dia bisa numpang sama OS kita sekarang,
hanya menginstall library-library atau komponen-komponen yang tidak ada di OS ini aja.
- Punya kita di tempat kita yang asli. - Iya, jadi bisa dibilang loading-nya itu bisa lebih cepat setengah atau lebih dari VM.
Dan ukurannya ya lebih kecil tentunya, karena nggak perlu.
Kalau misalkan kita punya 5 VM, ya berarti 1 VM misalkan 1 GB, ya jadi 5 GB, kan.
Sedangkan container ini dia ada, apa ya, ada kayak div-nya, kayak div gitu.
- Jadi misalkan kita udah... - Lebih tepatnya layer-layer.
Jadi si Docker ini punya layer, layer-layer OS, layer aplikasi, layer komen apa gitu, layer-layer.
Jadi kalau misalnya aplikasi kita, sorry, Docker application-nya ya, application yang dijelankan di atas Docker.
- Yang dijelankan di Docker. - Bins sama lips-nya itu, layer-nya sama dengan up, misalnya up-bis, bins-dama-lips, sama up-c, ternyata ada 3 layer yang sama.
- Bisa kayak di-share gitu. - Bisa di-share, nggak perlu di-download lagi, jadi dia di-share aja.
- Betul. - Yang di-download hanya yang perbedaannya aja yang berbeda.
- Library-library yang berbeda. - Kemona repo ya?
- Kemona repo tapi buat totalization. - Betul. - Jadi indahnya adalah kalau misalnya kita nge-build application B berulang-ulang,
yang berubah itu hanya layer yang di-build itu hanya layer yang berbeda aja.
Layer yang sama nggak di-build ulang, maka bisa cepat banget.
- Betul. Dan Docker ini yang cukup terkenal adalah dia menghilangkan memes, it works on my machine.
- On my machine nih. Karena semua jadi pakai machine yang sama.
- Termasuk sampai deployment. Di-deployment-nya bisa pakai service-service ya Docker image-nya.
- Iya portability ya. - Iya portable.
- Karena layer yang sama, mau di-local, mau di-server, di-staging, production, dan development itu sama semua.
- Sama semua. - Sehingga menghilangkan asumsi karena perbedaan environment.
- Itu susah ngedebug-nya kalau beda.
- Jadi mungkin ya buat teman-teman web-dev sekarang kayaknya udah mulai relevan untuk belajar Docker ya.
Mungkin beberapa tahun yang lalu kayaknya masih ngapain, masih pakai NVM, masih oke lah gitu.
Atau pakai version manager lain masih oke. Kalau sekarang kayaknya udah lebih apa ya.
Resource-nya udah banyak, tempat belajarnya udah banyak.
Dan di beberapa perusahaan yang saya tahu juga menggunakan Docker untuk onboarding.
Jadi ketika kita baru masuk langsung dikasih ini Docker image-nya, silahkan langsung kalau mau ngerjain ya tinggal Docker up atau something gitu.
Kayak docker-compose-up gitu kan, udah semua docker-compose-up.
- Minimal bisa DCUPD itu. Shortcut-nya DCUPD itu kalau pakai CSH.
- Iya sih, minimal. Kita sebagai web developer, seawam apapun kita kan adalah user-nya dari Docker itu.
Maksudnya kita yang dimudahkan misalnya kita punya project fleet atau orang DevOps, atau orang infra, atau apalah.
Sekan tim kita yang lebih puasain soal ini, udah dibikin disepakatin ada Docker image-nya.
Minimal kita harus tahu kalau misalnya kita nge-fork repo yang ada Docker image-nya itu cara pakainya gimana.
Minimal banget kan pertama bisa menggunakan.
Pasti lebih ideal lagi kalau kita bisa bikin image-nya juga, bisa nge-deploy, dan lain-lain.
Tapi pertama kita minimal mulai sebagai pengguna, yaitu DCUPD.
- Apa itu DCUPD? - Itu kalau pakai alias.
- Alias ini CSH. - CSH ya. Udah bawaannya ya.
- Iya. - Docker Compose App D-nya itu sebagai diamond.
- Diamond. - Jadi di background.
- Oke. Tadi kan sempat ngomongin tentang image. Nah, ini kayaknya harus kita klarifikasi.
Kita jelasin dulu Docker image itu apa, container itu apa.
- Kalau image-nya itu blueprint. Image-nya itu udah seperti blueprint aplikasi yang kita,
yang akan kita jalankan contoh dalam hal ini. Anggap aja PHP.
- Server PHP MySQL. - Iya. Jadi MySQL itu blueprint-nya, sudah ada image-nya.
Jadi bisa blueprint-nya untuk image-nya itu bisa buka di hub.docker.com.
- Oke. Nah, ini ada registry ya. Istilahnya yang ini ya. Registry ya.
- Iya. Registry betul. - Registry itu adalah kumpulan Docker image yang bisa kita gunakan.
- Iya. Ini public ya. Ada private-nya juga. Dan kita bisa bikin private repository juga bisa.
- Betul. - Nah, ini PHP official image.
- Official. - Dan kalau misalnya dari tag-nya itu bisa ke tag di atas.
Nah, ada macam-macam tag-nya. - Ada letters.
- Mau dia pakai gitu. Yang OSR-nya itu segala macam kan ada tuh.
Ada 5 more. Nah, ada macam-macam ini-nya. Tagging-nya dan target arsitekturnya.
Jadi bisa dipakai sesuai dengan kebutuhan. Itu kayak contohnya di scroll sedikit.
Nah, Docker pull-up itu ZTS bullseye. Itu artinya dia di debian dan dia itu trade safety.
Jadi ada PHP yang trade safety, ada PHP yang dibuild non-trade safety.
Jadi bisa dipilih apa itu trade safety atau tidak. Itu bisa nanti jadi kita punya bahasan selanjutnya.
- Kapan-kapan? - Ini kan image-nya, image-nya itu di tagging.
Dan kita mau pakai image-nya mana. Nah, container itu adalah aplikasi sudah berjalan.
Jadi image yang kita tarik tadi ke lokal dan image itu dijalankan sebagai sebuah proses.
- Server, kayak sudah server jalan kan? - Ya, service. Jadi sebuah service.
- Oh ya, service. - Dan itu service itu jadinya namanya container.
Dan itu satu service pasti satu image ya. - Gak bisa kita jalanin multi-HP sama MySQL, gak bisa ya?
Kecuali dalam image-nya, image itu mau expose dua service itu. Bisa juga kalau kita bikin.
Jadi kalau kalian mau bikin custom image yang di dalamnya itu sudah ada langsung apa aja.
Ada kok kalau misalnya Mastiza naik ke satu level ini, ada PHP yang sudah, bukan, bukan, di overview aja.
Ada enggak? - Official image.
- Overview? - Ya, turun, turun, turun, turun.
Itu kan ada PHP 82 CLI. Yang CLI saja. Ada yang sudah dibang, sudah dibungkus dengan apa sih.
- Oh, sudah dibanding sama yang lain. - Ya, coba turun, turun, turun, turun.
- Nah ini dibanding. - Karena itu dependensinya sih PHP.
- Oh, macam-macam variasi dependensi. - Ada variannya. Turun lagi.
Turun lagi. Atau sobat search Apache misalnya.
Nah, ini dia ada yang sudah dibungkus sama Apache. Ini dia contohnya.
PHP 782 Apache. Berarti dia sudah dibungkus sama apa. Jadi dia sudah running di port 80.
Sedangkan kalau tadi kita runningnya di PHP FPM, berarti dia runningnya di port 9000.
Satu service pasti satu image. Dan satu image bisa dijalankan lebih dari satu service.
- Iya. - Iya, misalnya image-nya tetap sama MySQL.
Tetapi kalian mau pakai MySQL untuk yang aplikasi A, aplikasi B, aplikasi C, terserah.
Tetapi harus kalau jalan bersamaan port yang di-expose waktu di mapping berbeda karena dia koneksinya ke port.
Contohnya di sini docker file itu kan docker run minde portnya yang dari host 80 di mapping ke 80 yang ada di dalam service.
- Kita tempat kita. - Iya.
Kalau mau dibikin yang service yang kedua, berarti nggak boleh 80 lagi. Berarti 81.2.80.
Artinya di mapping. Jadi nanti localhost 81. Tapi nggak bisa sih, 81 sudah dipakai. Jadi bisa 88.1.
- 88, ya di atas ribuan ya. - Di atas 1024.
- 1028, gitu. - Iya.
- Tapi pada umumnya kita ngerunning satu image untuk satu container nggak sih? Nggak juga?
- Satu image untuk, nggak juga. Contohnya yang saya bilang tadi. - Nggak juga ya. Bisa aja.
- Saya nge-develop saat ini ya di company yang saya kerja, menjalankan 3 project, ya kan?
- 3 project ini tentunya my scale-nya sama image-nya. Kan masih satu. - Iya, karena versinya sama.
Harus versinya sama. - Iya, butuhnya masih scale 8, gitu ya.
Jadi sama aja. Jadi satu image kan. Tetapi waktu saya kompos up masing-masing, ya dia...
- Harus ada id-nya masing-masing ya? - Nanti kan volume-nya beda, volume-nya beda.
Jadi volume yang untuk ngehost data my scale-nya bin file-nya itu kan berbeda.
Jadi service-nya tetap bisa jalan. Port-nya beda.
- Coba balik ke artikel yang tadi deh. Ternyata ada penjelasan juga tentang image.
- Scroll up dikit, itu menarik tuh. Eh, scroll down dikit. Kalau di sini dia analogikan sebagai photocopy.
- Mesin photocopy ya? - Mesin photocopy template yang berisi aplikasi dan dependensi.
Seperti kode, library, termasuk config-config-nya. - Blueprint benar.
- Bisa di-copy ke image tersebut. Yang di-deploy adalah image-nya.
Jadi misalkan image yang kita pakai adalah, anggaplah kalau tadi kan PHP, kita pakai Ubuntu.
Terus di Ubuntu ini kita bisa customize lagi kan. Kita mau tambahin note versi 18,
Postgre version 12, nginx-nya versi berapa gitu kan.
Abis itu udah di-install, abis itu di-jalanin masing-masing service-nya.
Terus abis itu, apa perintahnya, kopi lokal folder yang ada aplikasi kita ke folder-nya si misalkan nginx.
Nginx itu misalkan di far www atau di tempat lain. Gitu kan. Dan seterusnya, dan seterusnya kan.
Jadi istilahnya itu infrastructure as code kan. - Oh iya ya.
Infrastructure tapi disimpan dan di-deploy sebagai kode. - Bukan ya, beda ya.
Ini bukan infrastruktur kan. Termasuk infrastruktur juga sih ya.
- Kalau udah di-deploy ke server, itu udah jadi infrastruktur buat aplikasi-nya.
- Bisa jalan di lokal, bisa jalan di server, bisa jalan di CI.
- Di mana aja. Selama ada docker service-nya, itu udah bisa jalan.
- Bisa jalan di atas docker juga. - Iya, docker jalan di atas docker.
- Mana tau gak? - Bisa tau tau.
Salah satunya, kalau temen-temen tadi kan Ivan sempet bilang di awal kan ada WSL, Windows Subsystem Linux.
Nah itu docker. Dan di dalam WSL itu kita bisa jalanin docker lagi.
- Bisa install docker. Dalam docker-nya, install docker lagi.
- Coba balik ke hub docker, misalnya cari Alpine atau Debian.
- Alpine itu OS kan ya. - Iya, Debian deh. Alpine juga boleh lah.
- Debian yang lebih terkenal. - Jadi docker pull Debian, jalanin,
terus CLI ke Debian-nya atau connect ke CLI-nya itu sudah OS sendiri.
- Betul. - Dan di dalam Debian-nya, install aja container.
- Tapi ini walaupun OS-nya, meskipun ini ditulis Debian, tapi ini tidak full OS ya.
Yang ada di docker hub ini, registry, tidak full OS. Jadi jangan harap bisa jalanin Windows ini-nya.
Aplikasi desktop-nya. - Xorg-nya.
- Aplikasi desktop-nya. - Ini nggak bisa, tapi kalau buat service,
kayak buat kebutuhan service aja ya server. - Untuk development lah.
- Untuk development. Agablah kita install versi Debian yang hanya bisa jalan di terminal.
Gitu lah kira-kira. Nah kalau Alpine tadi, Alpine ya.
Alpine ini juga OS Linux, tapi khusus dibuat untuk docker image.
Jadi dia optimize. - Cukup 5 MB. Wow.
- 5 MB itu yang... - OS-nya.
- Bukan OS. - Apa?
- 5 MB itu kayak bin-nya si Alpine sendiri, tapi kalau OS-nya itu kan...
- Oh iya, iya. - Kalau gede install, ngelar ya.
- Gede juga. - Iya.
- Nggak kecil. Tapi ini salah satu yang paling kecil kan Alpine, yang paling sering dipakai juga ya.
Karena memang dia tujuannya adalah dibuat untuk docker ini kan ya.
- Dan kelebihan-nya berarti itu ya, portability kan. - Portability.
- Jadi yang dideploy, yang di-share ke mesin, local mesin kita masing-masing,
kan image-nya, walaupun nanti pasti jalanin di-install bin-nya melar.
Tapi ini portability tadi kan? - Iya. Betul.
Nah, tadi kan pertanyaan saya apakah satu image, satu container hanya berisi satu image atau nggak?
Jawabannya bisa ya, bisa tidak kan?
Maksud saya adalah biasanya kalau misalkan kita mau install Node.js sama Postgre dan sama Engine X,
biasanya itu kan masing-masing ada, kita menjalankan dokeran masing-masing kan dari 3 itu.
Abis itu kita bisa gunakan daripada capek-capek kita harus, oh, sebelum kita jalanin Engine X dan Node.js,
kita harus jalanin service database-nya dulu, karena si Node.js-nya akan connect ke database kan.
Kalau Node.js-nya duluan, database-nya belum jalan, maka akan error kan.
Nah, ini bisa kita akalin dengan tools yang namanya Docker Compose, benar nggak sih?
- Betul. - Buat menjadikan satu ya?
- Untuk menjadikan satu.
- Karena ribet juga kan, jalanin satu-satu service, nge-define port-nya,
terus kemudian nge-link antar container, nge-link antar container, susah ya.
- Ya, jadi contohnya ini kayak gini nih, kita definisikan service-nya dalam format YAML,
kita kasih tahu service web ini akan dibuild di local directory, port-nya 5000,
volume-nya di sini, kemudian ada service kedua, database, dalam hal ini Redis,
menggunakan image yang namanya Redis.
Jadi kita punya dua container nih ya, berarti ya?
Satu yang untuk web, satu untuk database.
- Caching. - Iya, caching atau apapun.
Jadi kita nggak perlu Docker run web, kemudian Docker run Redis, kita tinggal jalankan Docker Compose up.
Atau sebelumnya Docker Compose build dulu, abis itu baru di up ya?
- Sekarang sudah jadi sub-comment, kalau dulu Docker-DashCompose.
- Ya. - Oke, nah lanjut dari containerization dari aplikasi yang udah kita bikin satu-satu ini,
baik itu web, database, mungkin nginx atau proxy, gitu kan?
Itu kan satu container, maksudnya cuma satu kan?
Kalau misalkan nanti kita bawa comproduction dan butuh diskaling, baru kita butuh yang namanya orchestration.
Jadi itu yang membedakan antara containerization sama orchestration.
Dalam hal ini kubernets, kubernets itu adalah?
- Docker Swarm. - Docker Swarm juga, ya.
- Itu adalah? - Kalau di Amazon.
Kalau di Amazon namanya AWS itu?
- EKS. - EKS, kalau di Google Cloud namanya ECS.
- Cloud Engine apa? ECS? - Cloud.
- Container Engine. - Google Container gitu namanya.
- Google Container Engine. - Google Container Engine.
Google Kubernetes Engine GKE.
- Oh ada ya GKE. - Iya.
Ya intinya orchestration. Nah kalau udah orchestration ngomongnya sudah harus ada kayak namanya load balancer,
ada yang namanya service legislation, ada health check, scale up, scale down, segala macem.
- Kita undang nanti. - Iya, kalau udah ngomongin orchestration kita nggak bisa ngomong banyak-banyak karena kita nggak ngerti.
Jadi harus mengundang orang yang lebih mengerti.
Jadi kita batasi obrolan kita di containerization aja. Sekedar pengetahuan aja ya kalau kubernets itu sekedar pengetahuan.
Apa sih bedanya containerization sama kubernets gitu kan atau docker?
Nah docker sendiri kan tadi produk, tapi kan ada alternatifnya kan, ada alternatifnya.
Docker itu alternatifnya ada yang namanya portman. Portman ini API-nya atau CLI-nya itu mirip.
Jadi kita bisa alias, alias docker sama dengan portman buat ganti in gitu.
- Cuma susahnya sama? - Sama.
- Kalau command lainnya sama? - Sama. - Memang docker itu logonya ikan paus ya tadi.
Sekarang ini singa laut. Ada-ada aja.
- Kelebihan si portman ini setau saya ya, tolong koreksi kalau salah.
Jadi kalau docker itu kan kalau kita mau jalanin kan harus ada docker service yang berjalan kan.
- Iya kita install aplikasinya. - Iya kita install aplikasinya.
Baik itu docker desktop atau yang lain ya.
- Nah kalau portman ini... - Nah desktop itu nggak gratis ya.
- Kalau untuk komersial? - Iya.
- Apa itu nggak gratis? - Gratis dipake untuk personal use.
Kalau untuk komersial up to sekian juta dolar itu harus beli license.
- Kalau disusia up to sekian juta dolar. - Kalau disusia up to sekian juta dolar.
- Harus ada kalau udah pake beberapa kali sebetulnya harus beli.
- Nggak ada orang yang pernah beli. - Ada alternatifnya.
Ada alternatifnya kok. Nanti kita akan bahas juga.
Portman ini dia stand alone. Jadi nggak perlu ada daimernya, nggak perlu ada servisnya.
Bisa langsung jalan. - Oh nice.
- Jadi tinggal jalanin dari CLI aja gitu dari terminal di ketik komennya.
Asal di direktori yang ada file-file itunya portmannya jalan.
Salah satu yang menariknya itu.
- Compose juga berarti ya? - Compose nggak kayaknya nggak deh.
Nggak tahu deh. Portman desktop. Oh ada portman desktop.
- Manage container dalam burung not just portman.
Podify. Ini namanya podify into pods.
- Itu. Portman run, portman build. Nggak ada sih.
Kayaknya nggak ada. Compose itu beda deh kayaknya.
- Wah kalau nggak ada susah. - Ada buku mu warnanya ya ampun.
- Iseng amat. - Bece juga ya.
Orang investor kresi.
- Gua yakin nanti muncul lagi nih. - Portman.
- Port apa namanya? Portwoman. - Portman compost.
- Ini ada portman compost. Oh ada berarti ada. - Portperson ada, ada.
- Ini kisahnya sama kayak postman. - Postman.
- Oh kita juga bikin postwoman ada juga. - Oh iya.
- Postwoman bener bener bener. - Tapi udah ganti nama kayaknya.
- Iya. - Iya.
- Udah dibeli. - Tadi kita mau bahas alternatif dari docker compost.
E docker desktop. Alternatif.
Ada yang namanya apa ya? Cholima kalau nggak salah. Bener nggak?
- Iya kolima. Iya betul betul. - Oh bacanya kolima ya.
Kolima eh ini mana isinya? Oh belum.
Ada video version. Nah ini portman.
Alternatifnya portman karena ada portman desktop, ada kolima.
- Ada ranger. - Kolima.
- Ini only available for Linux sama Mac OS. - Iya nggak ada Windows ya.
- Sayangnya. - Kolima ku udah punya, kok nggak salah.
Itu alternatifnya. Jadi kalau misalkan temen-temen mau pakai docker desktop tapi komersial.
Dipakai untuk kerja, untuk kantor. Coba cari alternatifnya jangan pakai docker desktop karena itu berbayar.
Kalau bisnisnya di atas jutaan dolar, berapa juta dolar gitu.
- Oke. - Oke.
Jadi kalau misalnya pokok ijo misalnya ya. Itu kan udah lebih tuh ya.
Itu sebenernya nggak boleh pakai docker desktop. Oh sebetulnya.
Oh iya ya. Harusnya kita tanya ya sama developer toko ijo ya.
Kalian pakai desktop docker desktop atau nggak ya?
Tapi mereka udah bayar lah. Masa sih.
- Portman. - Harus kerelan.
- Iya. - Buildah.
Buildah.
- Buildah. - Ada.
Run C. Ada build kit. Banyak ya sekarang ya.
LXD. Ini lumayan jadul juga nih.
Terus mesos juga ya. Apa aja mesos baru tau nih.
- Container D. - Ternyata ini semua nggak one-on-one comparison sama docker.
Tapi ya. Maksudnya ada hal yang bisa digantiin.
Ada yang nggak kayaknya.
Iya, iya, iya. Benar, benar.
Gitu.
Nah untuk informasi atau untuk teman-teman belajar gimana caranya,
bisa langsung ke dokumentasinya docker langsung.
- Dokumentasi resminya udah sangat lengkap. - Dokumentasi resminya udah sangat lengkap.
Apa, dokumentasi tutorialnya juga ada?
Tutorialnya juga udah lengkap. Mau pilih bahasa apa atau itu.
Ada semua di sini.
Teman-teman tinggal ikutin aja.
Ini udah lengkap. Udah nggak perlu ke tempat yang lain kayaknya ya.
Tinggal ngikutin, benar-benar ngikutin. Udah, bisa.
Dan paling reliable kan. Karena dari pihak apa, offisial dokernya.
Langsung offisial. Jadi kalau ada update, udah langsung.
Bahkan most likely, kalau misalnya kalian bukan solo developer
atau posisinya bukan intra atau devops atau apa,
paling baru baca satu-dua halaman, udah nemu yang dibutuhin,
udah ngerti, udah bisa pakai, abis itu nggak pernah baca sisanya gitu.
Karena sangking lengkap dan jelasnya.
Tapi ya, kalau pengen belajar secara lengkap, ya itu tinggal dibaca aja, udah satu-satu.
Di sini ada konsepnya. Apa itu, container, image, registry, sama docker, compose.
Terus ada language specific guide. Mau node.js, ada.
Sampai C# juga ada. PHP juga ada.
Misalkan ini, PHP. Kita kan tadi ngomongin PHP, misalkan gimana caranya.
Ini dikasih contoh projeknya, kemudian kita init.
Init ini bikin sendiri ya, jarang ya, kecuali kalau kita yang setup.
Ya ini, kalau kita mau belajar setup, in case kita harus meng setup.
Kenapa?
Saya barusan tutup koneksinya.
Oh, tapi sekarang udah nyambung lagi. Kayak nggak ada ini.
Dari kita kelihatan, maksudnya, aman aja, nggak ilang.
Oh, gara-gara tadi nggak ngomong kali, jadi kita nggak jadar.
Dari docker init, nanti dia bikinin compose yaml, compose json, docker ignore, dan lain-lain.
Pasti udah bisa nebak apa itu docker ignore.
Terus kita bisa jalankan docker compose up.
Kalau misalkan baru ya pakai build.
Kalau -d artinya diamond.
Jadi di belakang layar atau background.
Kalau udah selesai, kita compose down, selesai.
Mungkin di awal agak merasa ribet, susah, gitu kan.
Tapi ya, ini sebagai mana tools baru yang dipelajari akan mudah.
Konceptnya sih yang susah adalah koncept awalnya.
Tapi kalau udah jalanin semua, terus pasti yang, oh gitu maksudnya.
Sambil banget ranggut gitu, oh gitu.
Ya biasanya gitu. Biasanya konceptnya dulu yang harus kita pahamin benar-benar baru kita pakai.
Kalau kita konceptnya belum ngerti tapi udah pakai, biasanya ada missing link biasanya.
Begitu.
Ada lagi tuh yang dockercurriculum.com. Buat belajar docker.
Oh iya ini juga bagus nih. Ini juga bagus. dockercurriculum.com.
Sama satu lagi mau bagi pengalaman. Jangan push ke docker hub
kalau aplikasi image yang kalian buat itu ada API key.
Aduh sama ya.
Saya melakukannya. Paniknya kayak panik banget itu pasti.
Oh shoot gitu ya. Oh no, langsung hapus. Langsung hapus.
Ya ngomongin registri, kita bisa publish registri bukan hanya di docker hub ya.
Service cloud masing-masing baik GCP, AWS, dan lain-lain itu ada semua kan ya.
Menyediakan registri kan.
GitHub ya kalau mau free ya. GitHub nggak ada?
Gak ada.
Masalahnya nggak ada.
GitLab yang ada?
Oh canggih juga GitLab ya.
Oke. Ini ada docker-curriculum.com. Tadi dokumentasinya teman-teman bisa cari juga.
Rasanya dari situ aja udah cukup dan langsung praktek.
Gak lebih dari cukup sih. Gak usah cari-cari tutorial lainnya lagi.
Ada project baru atau project yang udah jalan, sekalian dicatat kan, butuh.
Kadang-kadang kita bikin project tapi kita lupa.
Apalagi project pribadi gitu kan.
Kita mau publish lah pakai GitHub atau pakai apa.
Tapi kita lupa kan, mencantumkan versinya.
Terus tiba-tiba ada yang klon, kok nggak bisa ya?
Nah itu waktunya. Waktunya kita nyetet-nyetet, oh saya jalanin di PHP versi sekian, Node.js versi sekian.
Ya udah dicatat sekalian dibikin docker file-nya atau docker compose-nya.
Udah membantu teman-teman yang lain juga untuk belajar.
Ada satu lagi yang docker ini apa namanya?
Kayak, saya nggak tahu, mungkin bukan container-management.
Itu ada juga seperti portainer.
Apalagi tuh.
Portainer.
Portainer.
Portainer.
Portainer.
Oh, portainer.
Ini kayak docker.
Atau container-management.
Container-management.
Untuk membantu kita memanage, jadi kita bisa nge-deploy container di mana server juga bisa.
Untuk IoT device kita bisa nge-deploy bermacam-macam sesuka hati kita.
Container-management software that simplifies secure adoption of containers with remarkable speed.
Ini mau demo-in nggak?
Boleh, boleh, boleh.
Mau dong.
Ini demo-in apa?
Portainer, portainer.
Portainer.
Oh, kirain mau demo-in docker dulu?
Portainer-nya aja udah.
Portainer, coba ya.
Bisa nggak ya? Bisa nggak ya?
Udah.
Share screen, share screen.
Oke, udah.
Sudah, sudah.
Nah, ini kan saya jalaninya di, apa namanya, di Raspberry Pi.
Portainer-nya.
Ini apa nih?
Ini Raspberry Pi.
Terus, portainer-nya itu.
Zoom in, zoom in.
Portainer, ini kan.
Nah, jadi saya buat itu semua, ini aplikasi ini sendiri ya.
Ini aplikasi portainer sendiri.
Aplikasi yang jalan di atas docker sendiri.
Saya lupa namanya apa.
Terus, ini portainer.
Ada 2 server, satu yang di sana, satu lagi Open Media Vault.
Contohnya, ada jalanin 5 container.
Oh, itu namanya Homer.
Untuk tampilan ini namanya Homer.
Terus, satu aplikasi sendiri.
Terus, saya ada engine exposure.
Jadi, lihat ya, kan ada portainer, pi, port, ika2.org, kan?
Ini hanya jalan di lokal network-nya saya.
- Alias doang.
- Nggak, dia jalan dari pi-hole.
Jadi pakai DNS.
DNS-nya sendiri itu punya lokal DNS.
- Oh, bagus.
Terus, kemudian dari...
Terus saya punya engine exposure manager.
Ini untuk jadi hub-nya.
Jadi, supaya bisa kayak engine x54, terus kemudian DNS 54, portainer 54.
Ini semuanya jadi gate-nya lewat engine x.
Dan itu semua di dalam container.
Dari di-host sama portainer.
Nah, ini kan jalannya di port.
Jadi, portainer ini yang memanage container-container-nya saya.
Jadi, kalau saya mau hidupin satu aplikasi baru,
tinggal stack-nya apa, tinggal add stack,
mau taro komposernya di sini bisa, mau...
- Eh, enak banget.
Ada GUI-nya gitu.
- Oh, ini GUI buat docker kompos gitu ya kira-kira ya?
- Iya.
- Segerananya.
- Aplikasi template itu udah banyak.
Contohnya mau jalanin apa?
Bind, mau jalanin caddy,
atau calibre,
cloudplay,
- Codeserver.
- Codespotetolah, deluge.
Apalagi, file browser, kalau mau ada filezilla.
Yang server ini filezilla server.
- Iya, iya.
- Git-tea, git-tea juga ini kayak, apa?
- Kayak GitLab.
- Kayak GitLab.
Ada Grafana, macem-macem ini banyak banget nih.
Jellyfin, kalau mau denger lagu.
- Oh, menarik ya.
Media server.
- Jadi kita gak perlu bikin docker kompos yaml sendiri ya?
Kita tinggal pilih dari template ini ya?
- Mau jalanin piehole nih.
Select.
Advance portnya.
Ini kan belum play komposnya saja.
Kita deploy.
Nanti kan dia bakal jalan di port berapa nih?
Kelihatan nih portnya berapa.
Kalau mau mengunjungi langsung begini juga bisa nih.
Jalanin sini.
Berarti dia jalanin di sini.
Jalan kan?
- Oh, wow.
- Kalau homework-nya saya jalanin di sini ya, jalan tuh 192 skin-skin.
Cuma karena saya gak suka pakai IP,
saya tambahin Engine Explosive Manager di proxy.
- Oh, supaya namanya ada namanya.
- Jadi saya bisa punya nama, dan nama ini saya registrekan ke Cloudflare.
Di Cloudflare-nya saya.
Saya bisa kunjungi ini dari seperti ini deh.
Kayak kunjungi biasa.
Tapi ini hanya bisa di rumah saya.
Nah, satu.
Terus saya, kan ada dua portainer.
Satu lagi portainer, dia bisa nge-manage satu.
Jadi ada portainer yang bahasanya "host",
satu lagi "satellite" atau "agent".
Kalau gak salah "agent"nya itu yang di OMV ini "agent" deh.
Kalau gak salah saya.
Jadi kalau saya bisa punya lebih dari 10 atau 100,
bisa pakai portainer.
Jadi saya bisa, ini saya contohnya mau masuk ke portainernya si OMV ini.
Saya bisa manage.
Jadi dari tampilan portainer host saya yang di Raspberry Pi A,
saya bisa nge-manage yang di Open Media Fold.
Ada dua transmission sama portainer "agent" jalan.
Itu Open Media Fold-nya sendiri kan,
Debian ditambahin aplikasi OMV.
Jadi ya saya punya, OMV saya ini kan punya hard disk gede banget nih.
Sampai berapa? 7GB.
7GB tapi dia di "memory".
Kalau ini sih 4.5TB.
Dan ini di "mirror".
Dan ini SSD di "mirror" juga, 500GB untuk backup.
Jadi kayak time machine saya selalu backup ke Open Media Fold secara otomatis.
Ya 3TB lah, 4TB kalau gak salah hard disk-nya.
Di RAID 1.
Yang lain di RAID juga ini.
Apa lagi ya? Itu portainer jadi bisa virtual container management software.
Bisa produksi, ini produksi ready ya.
Jadi bukan cuma buat mainan-mainan di rumah doang.
- Tinggal di deploy ke remote. - Di deploy ke mana gitu ya.
Contohnya di situs www.id.org.
Ini kita pakai container base.
Dan kita pakai portainer untuk ini.
Untuk handle service-service-nya.
- Satu VPS doang sih itu. - Oke.
- Begitulah kira-kira. - Menarik.
- Terakhir. - Contoh lain yang gak terlalu wow tadi.
Itu sih yang simpel, Next.js.
Selama ini orang mikir ada asumsi bahwa dimonopoly oleh Vercel.
Karena kalau kita deploy ke Vercel kan gampang.
Tinggal ketik saja, deploy, udah langsung semua server-site-nya diurus sama Vercel semua.
Ya karena itu punya Vercel dan kalau usage-nya udah besar, kita harus bayar ke Vercel.
Tapi sebetulnya Next.js-nya sendiri itu gak log in, gak terikat, gak kekunci sama Vercel.
Karena bisa dideploy sendiri.
Tapi orang kan selama ini asumsinya ribet ya kalau nge-deploy Next.js sendiri.
Terutama buat server-site sama ISR dan blablabla.
Nah biasanya orang solusinya pakai docker file, jadi ya udah itu tinggal ikutin.
Iya ini contohnya ya, node versi 18, terus kita mau taruh file-nya di folder apa, kita copy package JSON-nya,
termasuk package log-nya ke slash, kemudian jalanin npm install,
copy semua source code-nya, buka port 3000, jalanin npm run dev.
Udah, jalan untuk development ya, ini khusus untuk development ya docker file-nya ya.
Iya ada lagi, turun-turun.
Nah untuk menjalankan pakai ini kan.
Tapi kan ini buat itu doang.
Buat development ya.
Kalau ini multi-stage, multi-stage itu maksudnya?
Bisa membedakan, membedakan dengan development.
Jadi kalau misalkan kita yang mau jalanin yang production,
dia akan jalanin yang ini sampai ke mana, sampai sini ya npm run start ya.
Terus kalau mau ini untuk yang dev tadi ya sama ya, untuk yang dev kurang lebih sama.
Jadi memudahkan kita untuk nggak perlu install-install ya, nggak perlu install macem-macem di laptop kita,
bisa pakai docker bergantung kepada kebutuhan atau dependensi dari proyek kita.
Jadi maksudnya kita nggak terkunci harus pakai Fairsell.
Jadi misalnya kita di tempat kerja atau kita sendiri udah punya pakai layanan lain, ya udah.
Asal bisa deploy Docker Image, sebetulnya relatif, nggak sesulit yang dibayangkan.
Oke, kalau begitu sebelum mudahan kita kesimpulan dulu kali ya.
Docker itu apa? Docker itu adalah teknologi containerization untuk memudahkan semua dependensi,
konfigurasi, versi-versi dan settingan-settingan dalam suatu proyek.
Bisa dipakai di local machine, bisa di deploy ke server.
Bahkan kita nggak perlu install macem-macem di laptop baru, misalkan dapet laptop baru dari kantor nih,
baru masuk kantor, dapet laptop, nggak perlu install macem-macem, pakai docker aja udah.
Iya, tinggal install docker sih ya, bener. Terus abis itu masuk ke folder proyeknya,
ada docker file, tinggal docker build dan docker compose-up dan lain-lain.
Jadi kemudian ketika kita masuk ke proyek yang beda dengan dependensi yang beda juga,
misalkan tadi PHP, terus sekarang ke Node.js, juga bisa switch nggak perlu install Node.js dan lain-lain versi berapa,
udah tinggal menggunakan spesifikasi yang sudah disediakan sama docker file.
Itu kalau proyeknya sudah ada docker file, kalau belum ada ya kita buat.
- Ya, bikin sendiri kayak tadi tuh contohnya. - Bikin sendiri kayak tadi contohnya.
Sumber belajarnya langsung ke dokumentasi dockernya, itu sudah sangat lengkap.
Sama yang tadi docker-curriculum.com, itu juga menarik.
Ada lagi yang terlewat? Alternatifnya ada portman, kemudian tadi kita sudah bahas beberapa tools seperti docker compose,
terus tadi ada port container, container management.
Dan terakhir kita belum bahas dev container yang bisa dijalankan di Codespace.
- Oh Codespace nya GitHub? - Iya. Atau bisa dijalankan di VS Code.
- Jadi kalau ada, mau di demoin sebentar? - Boleh, boleh, boleh dong.
Demo dulu, kayak memasak.
- Atau seorang demonstran, demonstran kode? - Ini contohnya di web web passkey di GitHub.
- Zoom in, zoom in. - Kan ada dev container nih.
Ada note, dev container. Dengan adanya ini saja, dari si GitHub nya itu bisa jalanin.
- Oh dia otomatis baca ya? Otomatis ngerti? - Iya, otomatis baca bahwa ada Codespace.
- Oh, dependensinya apa aja, konfigurasinya gimana? - Kita klik aja.
Biar nanti sambil ngomong dia selesai ininya. - Oh, jadi dia akan install dependensi yang dibutuhkan?
- Iya. Tuduh, kok dia ngefreeze?
Definisinya kan ada di devcontainer.json. Definisi untuk CPS Code sih sebenarnya lebih tepatnya.
VS Code. Dan akan menjalankan Docker Compose YAML.
- Oke. - Dimana Docker Compose YAML ini dia akan...
Docker Compose YAML ini menjalankan dua service, WordPress dan database-nya.
Pakai MariaDB, lalu apa masalahnya dia nge-build. Build titik ya. Build titik artinya mencari Docker File.
Docker File-nya ini. WordPress php81 kalau nggak salah pakai Debian, kalau nggak salah.
Atau bisa macam-macam yang nggak tahu. Dan terakhir di devcontainer itu saya post create comment-nya itu ngejalanin setup.sh.
- Setup. - Jadi saya butuh kayak nge-setup.
NPM brand build, dan nge-setting database WordPress-nya. Install WordPress-nya lah gitu ya.
Dan activate plugin-nya. Udah selesai. Oh, masih belum.
Jadi dia otomatis build kan nih. Image file, terus build container.
Ini Docker Compose-nya udah jalan tuh. Udah selesai. Tadah! Sudah jadi.
- Wow! - Sudah jadi. Lalu file-nya masih belum muncul. Sabar.
Lalu, ini harusnya dia muncul sesuatu di terminalnya. Masih di barang-barang siang kali ya.
Nah, udah selesai. Saya, webp, option, get site url.
- Oke. - Not initialize. - Oh, dia belum selesai jalanin saya.
- Oh, port-nya udah jalan tuh. - Iya, port-nya udah jalan nih.
- Oh, sudah. Ini aja ini. - Langsung.
- Saya click. - Langsung bisa diakses?
- Wow! - Langsung bisa diakses.
- Dan dia... - Kira ini saving time sama energy.
Berapa banyak ya? Kayak jaman itu nih harus satu-satu di install.
- Oh, ini dia jalanin post komen-nya saya nih yang setup.essa nih.
- Iya. - Dan, selesai. Ini baru selesai.
- Baru bisa... - Udah, udah selesai. Mungkin kalau saya refresh.
- Saya reload. - Udah, install. Tinggal login ya.
- Login pakai sampel. - Iya, udah jalan tuh paskinnya tuh.
- Oh, iya tadi kelihatan.
- Tadah! - Oke, mantap.
- Wah! - Mantap sekali.
- Jadi bisa pakai dev container. Nah, cara yang sama.
Misalnya saya, misalnya Mas Riza atau Mbak Eka nge-clone.
Ini, nge-clone repo ini ke lokal, buka di VS Code,
nanti VS Code bilang, "Eh ada dev container, mau di-running nggak?"
Kalau di-running, kalau ada docker atau container-nya di lokal terinstall,
dia akan setup, dan langsung remote ke container itu.
VS Code-nya akan ngebuka di remote, di dalam container.
Dan langsung bisa moding. Saat itu juga.
- Mantap. - Ya, butuh.
Kalau kecepatan internet-nya oke, 10 menit.
- Tadi nggak nyampe? 5 menit? - Iya.
- Kecepatan si GitHub-nya kan kencang banget dia, nyedot image.
Kalau dari lokal, terasa. Kalau dari 4G.
- Intinya docker itu memudahkan ya, memudahkan kita untuk kerja sama,
untuk deployment juga. Walaupun mungkin awalnya di ranah DevOps,
tapi kita sebagai web developer, sebagai anak front-end, juga tetap butuh ya.
Karena masing-masing library atau masing-masing platform, kita butuh
spesifik versi, kadang-kadang ada versi yang bahkan breaking chains ya.
Jadi dengan adanya docker ini, bisa solving problem yang tadi kita udah bahas.
Dari mulai localhost, VM, dan lain-lain akhirnya sampai ke sini,
teknologi container masih akan relevan dalam beberapa tahun ke depan,
kecuali ada yang... - Malah tambah relevan mungkin.
- Iya, malah tambah relevan. - Malah tambah relevan karena
set-up makin ribet, versi-versi makin banyak.
Ya, dokernya sendiri mungkin bisa aja digantiin sama produk lain ya.
Tapi kalau prinsipnya kan tetap... - Prinsipnya sama, tetap sama.
- Oke itu aja untuk malam ini. Terima kasih teman-teman yang sudah nonton.
Kalau ada saran atau ada topik, silahkan kesana.in/ngobrolin.
- Salah itu ngobrolin web, kesana.in/ngobrolinweb.
- Iya, langsung hotfix ngobrolin web. - Udah hotfixen web.
- Hotfixen, sepi ya. - Eh ternyata salah.
- Selama ini, oh jangan-jangan sepi gara-gara salah ya.
Nggak ada yang nyoba sih.
Ya sudah kalau gitu, kalau ada sumur di ladang, boleh kita menumpang mandi?
- Karena air mati. Ternyata bukan bantun, air mati.
- Siapa yang masih mandi di sumur?
- Iya. - Kita ketemu lagi.
Jangan, kalau ada sumur di ladang, mari kita menumpang mandi.
Gimana yang mungkin sampai jumpa minggu depan ya.
Kalau ada umur panjang, hari selasa depan kita ketemu lagi.
Sampai jumpa, bye bye.
Deskripsi asli dari YouTube
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. Topik, tautan dan pertanyaan menarik bisa dilayangkan ke https://ksana.in/ngobrolinweb ----------------------------------------------------------------------------------- Bergabung menjadi anggota elit di kanal ini: https://www.youtube.com/channel/UCHhAlFGFCGgIusQkQIqJLYw/join Donasi dapat meningkatkan kualitas kanal ini: 💰 https://karyakarsa.com/rizafahmi/tip 💸 https://saw Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.
Episode Terkait
3 Jul 2024
Ngobrolin Elixir
Episode ini membahas tentang Elixir, bahasa pemrograman fungsional yang berjalan di BEAM (Erlang Virtual Machine), bersa...
2 Okt 2024
Ngobrolin Drama Trademark & Open Source
Episode ini membahas drama perseteruan antara Matt Mullenweg (co-founder WordPress) dengan WP Engine, sebuah perusahaan ...
11 Agu 2026
Local Development Server
Episode ini membahas local development server, dari XAMPP yang legendaris sampai pendekatan modern berbasis kontainer. P...
Suka episode ini?
Episode baru setiap Selasa malam. Dengarkan lewat YouTube, Spotify, atau feed podcast favoritmu.
Memuat komentar dari GitHub Discussions...
Jika komentar tidak muncul karena ekstensi privasi / adblocker, kamu bisa berdiskusi langsung di GitHub Discussions .