Roadmap untuk Belajar Docker
Modul 1: Pengantar Docker dan Kontainerisasi
Memahami Konsep Inti: Kontainer, Image, dan Registry.
- Apa Itu Kontainerisasi?
- Kontainer adalah lingkungan eksekusi yang terisolasi, ringan, dan portabel yang mengemas sebuah aplikasi beserta semua dependensinya. Isolasi ini memastikan bahwa aplikasi berjalan secara konsisten di berbagai infrastruktur.
- Kontainerisasi menawarkan sejumlah keuntungan seperti peningkatan portabilitas, konsistensi dalam penyebaran, dan pemanfaatan sumber daya yang lebih efisien dibandingkan dengan mesin virtual tradisional.
- Analogi kontainer dengan kontainer pengiriman secara efektif menggambarkan konsep pengemasan standar untuk penyebaran perangkat lunak.
- Docker Image: Blok Bangunan Kontainer.
- Docker image adalah template read-only yang berisi instruksi untuk membuat kontainer Docker. Image ini mencakup kode aplikasi, lingkungan runtime, pustaka sistem, dan dependensi.
- Docker image dibangun dalam lapisan-lapisan, di mana setiap instruksi dalam Dockerfile menambahkan lapisan baru di atas lapisan sebelumnya. Arsitektur berlapis ini mengoptimalkan penyimpanan dan distribusi image, karena lapisan yang tidak berubah dapat digunakan kembali di berbagai image.
- Dockerfile adalah file teks yang berisi serangkaian instruksi untuk membangun Docker image.
- Docker Registry: Menyimpan dan Berbagi Image.
- Docker registry adalah repositori terpusat untuk menyimpan dan mendistribusikan Docker image. Registry dapat bersifat publik atau privat.
- Docker Hub adalah registry publik default, yang menawarkan koleksi image resmi dan kontribusi komunitas yang sangat besar.
- Registry privat, seperti Amazon ECR, Azure Container Registry, dan Google Container Registry, menyediakan penyimpanan yang aman dan terkontrol untuk image berpemilik.
- Fungsi utama Container Image Registry meliputi penyimpanan, manajemen, berbagi, pencarian, integrasi dengan alat pengembangan, serta penyediaan pemantauan dan pelaporan.
Pemahaman: Perbedaan antara image dan kontainer sangat penting: image adalah cetak biru, sedangkan kontainer adalah instance yang berjalan dari cetak biru tersebut. Registry memfasilitasi kolaborasi dan berbagi cetak biru ini. Ambiguitas istilah “Docker Registry” menyoroti pentingnya penggunaan terminologi yang tepat saat membahas konsep-konsep ini.
Manfaat Menggunakan Docker dalam Pengembangan dan Penyebaran Modern.
- Docker memastikan konsistensi dalam lingkungan aplikasi di berbagai tahap siklus hidup pengembangan perangkat lunak, mulai dari pengembangan hingga pengujian dan produksi.
- Aplikasi yang dikontainerisasi sangat portabel dan dapat berjalan di sistem mana pun yang telah menginstal Docker, menghilangkan masalah kompatibilitas.
- Docker memungkinkan penyebaran aplikasi yang lebih cepat dengan mengemas semua yang dibutuhkan untuk menjalankan aplikasi ke dalam satu unit. Penskalaan aplikasi juga lebih mudah dengan menjalankan beberapa instance dari kontainer yang sama.
- Kontainer bersifat ringan dan menggunakan lebih sedikit sumber daya dibandingkan dengan mesin virtual tradisional, memungkinkan kepadatan aplikasi yang lebih tinggi pada perangkat keras yang sama.
- Docker menyederhanakan pengelolaan dependensi aplikasi dengan menyertakannya di dalam image kontainer, menghindari konflik dengan pustaka sistem host.
- Dukungan Docker untuk arsitektur mikroservis memungkinkan pemecahan aplikasi monolitik menjadi layanan yang lebih kecil dan dapat disebarkan secara independen, meningkatkan kelincahan dan pemeliharaan.
Pemahaman: Manfaat Docker meluas lebih dari sekadar mengemas aplikasi; Docker secara fundamental mengubah cara perangkat lunak dikembangkan, disebarkan, dan dikelola, yang mengarah pada peningkatan efisiensi dan keandalan.
Arsitektur Docker: Model Klien-Server dan Komponen Utama.
- Docker Daemon (dockerd): Ini adalah layanan latar belakang inti yang berjalan pada host Docker dan bertanggung jawab untuk mengelola objek Docker seperti image, kontainer, jaringan, dan volume. Daemon mendengarkan permintaan Docker API dan menjalankannya.
- Docker Client (docker): Docker client adalah cara utama pengguna berinteraksi dengan Docker. Ini menyediakan antarmuka baris perintah (CLI) yang mengirimkan perintah ke Docker daemon. Klien dapat berkomunikasi dengan daemon secara lokal atau jarak jauh.
- Docker Host: Docker host mengacu pada mesin fisik atau virtual tempat Docker daemon berjalan. Ini menyediakan sumber daya (CPU, memori, penyimpanan, jaringan) untuk kontainer dieksekusi.
- Docker Registry: (Telah dibahas sebelumnya)
- Objek Docker: Ini adalah berbagai entitas yang dikelola oleh Docker, termasuk image (template read-only), kontainer (instance image yang berjalan), jaringan (jaringan virtual terisolasi), dan volume (penyimpanan persisten untuk kontainer).
Pemahaman: Model klien-server memungkinkan pemisahan tugas, di mana klien berfokus pada interaksi pengguna dan daemon menangani manajemen kontainer yang mendasarinya. Desain ini memungkinkan fleksibilitas dan skalabilitas dalam cara Docker digunakan.
Modul 2: Menyiapkan Lingkungan Docker Anda
Panduan Instalasi untuk Docker Desktop (Windows dan macOS).
- Prasyarat: Sebelum menginstal Docker Desktop, pastikan sistem Anda memenuhi persyaratan minimum, seperti RAM yang cukup (minimal 4 GB) dan versi sistem operasi yang didukung. Untuk Windows, diperlukan prosesor 64-bit dengan Second Level Address Translation (SLAT).
- Instalasi Windows:
- Unduh installer Docker Desktop (Docker Desktop Installer.exe) dari situs web resmi Docker.
- Klik dua kali installer untuk menjalankannya dan ikuti instruksi di layar.
- Selama instalasi, Anda mungkin diminta untuk memilih antara menggunakan WSL 2 atau Hyper-V sebagai backend, tergantung pada versi Windows dan konfigurasi sistem Anda. WSL 2 umumnya direkomendasikan untuk kinerja yang lebih baik.
- Untuk pengguna tingkat lanjut, Docker Desktop dapat diinstal melalui baris perintah dengan opsi untuk menentukan direktori instalasi dan menerima perjanjian lisensi. Misalnya, menggunakan PowerShell sebagai administrator: Start-Process ‘Docker Desktop Installer.exe’ -Wait -ArgumentList ‘install’, ‘—accept-license’, ‘—installation-dir=D:\Docker\Docker’.
- Setelah instalasi selesai, restart komputer Anda seperti yang diminta.
- Verifikasi instalasi dengan membuka terminal dan menjalankan docker version atau docker run hello-world.
- Instalasi macOS:
- Unduh installer Docker Desktop (Docker.dmg) dari situs web resmi Docker.
- Klik dua kali file .dmg untuk membuka installer, lalu seret ikon Docker ke folder Applications.
- Klik dua kali Docker.app di folder Applications untuk memulai Docker Desktop.
- Terima Perjanjian Layanan Berlangganan Docker saat diminta.
- Verifikasi instalasi dengan mengklik ikon Docker di bilah menu, yang seharusnya menunjukkan bahwa “Docker Desktop is running”. Anda juga dapat membuka terminal dan menjalankan docker version atau docker run hello-world.
Panduan Instalasi untuk Docker Engine (Distribusi Linux).
- Prasyarat: Pastikan sistem Linux Anda memiliki kernel 64-bit dan dukungan CPU untuk virtualisasi. Dukungan virtualisasi KVM dan QEMU versi 5.2 atau lebih baru juga direkomendasikan.
- Instalasi Ubuntu:
- Pendekatan yang direkomendasikan adalah menyiapkan repositori paket Docker. Ini melibatkan penambahan kunci GPG Docker dan repositori ke daftar sumber sistem Anda.
- Perbarui indeks paket: sudo apt-get update.
- Instal versi terbaru Docker Engine, containerd, dan plugin Docker Compose: sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin. Anda juga dapat menginstal versi tertentu jika diperlukan.
- Sebagai alternatif, Anda dapat mengunduh paket .deb secara langsung dan menginstalnya menggunakan apt.
- Skrip kenyamanan di https://get.docker.com/ dapat digunakan untuk instalasi non-interaktif di lingkungan pengembangan, tetapi tidak direkomendasikan untuk produksi.
- Aktifkan layanan Docker untuk memulai saat boot: sudo systemctl enable docker. Mulai layanan Docker: sudo systemctl start docker.
- Verifikasi instalasi dengan menjalankan sudo docker run hello-world.
- Distribusi Linux Lain: Proses instalasi bervariasi untuk distribusi lain seperti Fedora, CentOS, Debian, dll. Rujuk dokumentasi resmi Docker untuk instruksi khusus distribusi.
Memverifikasi Instalasi Docker yang Berhasil.
- Buka terminal atau command prompt dan jalankan docker version untuk memeriksa versi Docker client dan server yang terinstal.
- Jalankan docker info untuk mendapatkan informasi terperinci tentang instalasi Docker, termasuk jumlah kontainer dan image.
- Jalankan docker run hello-world. Jika instalasi berhasil, perintah ini akan mengunduh image pengujian dan menjalankannya dalam kontainer, mencetak pesan konfirmasi.
Pemahaman: Docker Desktop menyediakan GUI yang ramah pengguna untuk mengelola Docker di Windows dan macOS, sedangkan Docker Engine adalah komponen inti yang diinstal langsung di Linux. Metode instalasi di Linux melibatkan pengelolaan repositori paket, yang merupakan praktik umum bagi pengguna Linux.
Modul 3: Dasar-Dasar Docker - Bekerja dengan Image dan Kontainer
Memahami Docker Image: Base Image, Lapisan Image, dan ID Image.
- Base Image: Saat membangun Docker image, Anda mulai dengan base image, yang menyediakan sistem operasi dasar dan lingkungan runtime. Base image umum meliputi ubuntu, alpine, centos, dan image khusus bahasa seperti node, python, dan openjdk.
- Lapisan Image: Docker membangun image sebagai serangkaian lapisan read-only. Setiap instruksi dalam Dockerfile membuat lapisan baru di atas lapisan sebelumnya. Pendekatan berlapis ini memungkinkan penyimpanan dan distribusi image yang efisien, karena lapisan digunakan bersama di berbagai image jika memungkinkan.
- ID dan Tag Image: Setiap Docker image diberi ID Image heksadesimal unik. Tag adalah label yang mudah dibaca manusia yang digunakan untuk mengidentifikasi berbagai versi atau varian image. Satu image dapat memiliki beberapa tag.
- Pustaka Docker Hub: Docker Hub berfungsi sebagai repositori publik yang luas tempat Anda dapat menemukan dan mengunduh image pra-bangun yang dibuat oleh penerbit resmi, penerbit terverifikasi, dan komunitas. Image ini dapat digunakan sebagai base image atau dijalankan langsung sebagai kontainer.
Mengelola Kontainer Docker: Membuat, Memulai, Menghentikan, Memulai Ulang, dan Menghapus.
- Membuat Kontainer: Perintah docker create membuat kontainer dari image tetapi tidak memulainya. Anda dapat menentukan berbagai opsi seperti nama, jaringan, dan volume selama pembuatan.
- Menjalankan Kontainer: Perintah docker run membuat dan memulai kontainer dari image. Opsi utama meliputi:
- Menjalankan di latar belakang (mode terlepas) menggunakan -d.
- Memetakan port antara host dan kontainer menggunakan -p host_port_port untuk memungkinkan akses eksternal.
- Memberi nama kontainer menggunakan —name nama_kontainer untuk pengelolaan yang lebih mudah.
- Melihat Daftar Kontainer: Gunakan docker ps untuk melihat daftar kontainer yang sedang berjalan dan docker ps -a untuk melihat semua kontainer (berjalan dan berhenti).
- Memulai dan Menghentikan Kontainer: Gunakan docker start nama_kontainer_atau_id untuk memulai kontainer yang berhenti dan docker stop nama_kontainer_atau_id untuk menghentikan kontainer yang sedang berjalan secara halus.
- Memulai Ulang Kontainer: Gunakan docker restart nama_kontainer_atau_id untuk memulai ulang kontainer yang sedang berjalan.
- Menghapus Kontainer: Gunakan docker rm nama_kontainer_atau_id untuk menghapus kontainer yang berhenti. Untuk memaksa penghapusan kontainer yang sedang berjalan, gunakan flag -f.
Menjelajahi Docker Registry: Publik (Docker Hub) dan Privat.
- Docker Hub:
- Anda dapat mencari image di Docker Hub menggunakan situs web atau perintah docker search.
- Unduh image dari Docker Hub ke mesin lokal Anda menggunakan perintah docker pull nama_image.
- Buat akun gratis di Docker Hub dan buat repositori untuk menyimpan image Anda sendiri.
- Kirim image yang Anda buat secara lokal ke repositori Docker Hub Anda menggunakan docker push nama_pengguna/repositori.
- Registry Privat:
- Organisasi menggunakan registry privat untuk keamanan dan mengontrol akses ke image Docker internal mereka.
- Contohnya termasuk registry berbasis cloud seperti Amazon ECR, Azure Container Registry, dan Google Container Registry, serta opsi yang dihosting sendiri seperti Harbor dan JFrog Artifactory.
- Untuk berinteraksi dengan registry privat, Anda biasanya perlu melakukan autentikasi menggunakan perintah docker login <url_registry>, memberikan nama pengguna dan kata sandi atau token akses Anda.
Pemahaman: Memahami siklus hidup kontainer dan perintah Docker dasar untuk mengelola kontainer dan image sangat penting untuk menggunakan Docker secara efektif. Docker registry adalah pusat utama untuk berbagi dan mendistribusikan aplikasi yang dikontainerisasi.
Modul 4: Membangun Docker Image Kustom dengan Dockerfile
Pengantar Sintaks Dockerfile dan Praktik Terbaik.
- Dockerfile adalah file teks biasa yang berisi serangkaian instruksi yang digunakan Docker untuk membangun image secara otomatis.
- Sintaks dasar Dockerfile melibatkan penentuan instruksi dalam huruf besar diikuti oleh argumennya.
- Urutan instruksi dalam Dockerfile sangat penting karena Docker membangun image dalam lapisan dan menyimpan cache setiap lapisan. Menempatkan instruksi yang sering berubah di bagian akhir Dockerfile dapat secara signifikan meningkatkan waktu build dengan memanfaatkan cache untuk lapisan yang lebih awal dan jarang berubah.
- Menggunakan file .dockerignore di direktori yang sama dengan Dockerfile Anda memungkinkan Anda untuk menentukan file dan direktori yang harus dikecualikan dari konteks build, mengurangi ukuran image dan meningkatkan kinerja build.
- Mengikuti praktik terbaik seperti menggunakan base image minimal, membersihkan file yang tidak perlu, dan mengamankan image Anda sangat penting untuk membuat Docker image yang efisien dan aman.
Instruksi Dockerfile Esensial yang Dijelaskan (FROM, WORKDIR, COPY, RUN, ENV, EXPOSE, CMD, ENTRYPOINT, USER, VOLUME).
- FROM: Ini adalah instruksi pertama dalam Dockerfile dan menentukan base image yang akan digunakan untuk membangun image Anda. Pilih base image yang paling sesuai dengan persyaratan aplikasi Anda.
- WORKDIR: Instruksi WORKDIR menetapkan direktori kerja untuk instruksi RUN, CMD, ENTRYPOINT, COPY, dan ADD berikutnya dalam Dockerfile. Merupakan praktik yang baik untuk menetapkan direktori kerja tertentu untuk aplikasi Anda.
- COPY: Instruksi COPY menyalin file dan direktori dari lokasi di host (dalam konteks build) ke lokasi di sistem file image.
- RUN: Instruksi RUN menjalankan perintah apa pun di lapisan baru di atas image saat ini dan melakukan commit hasilnya. Instruksi RUN digunakan untuk menginstal paket perangkat lunak, mengonfigurasi lingkungan, dll..
- ENV: Instruksi ENV menetapkan variabel lingkungan di dalam Docker image. Variabel ini dapat digunakan oleh aplikasi yang berjalan di dalam kontainer.
- EXPOSE: Instruksi EXPOSE mendeklarasikan port yang akan didengarkan kontainer saat runtime. Ini terutama untuk tujuan dokumentasi dan tidak secara otomatis memublikasikan port (lihat flag -p di docker run).
- CMD: Instruksi CMD menentukan perintah default yang akan dijalankan saat kontainer dimulai. Hanya boleh ada satu instruksi CMD dalam Dockerfile. Jika Anda perlu meneruskan argumen ke ENTRYPOINT, CMD sering digunakan.
- ENTRYPOINT: Instruksi ENTRYPOINT mengonfigurasi kontainer untuk berjalan sebagai executable. Ini sering digunakan bersama dengan CMD untuk menentukan perintah utama dan argumen defaultnya.
- USER: Instruksi USER menetapkan ID pengguna (UID) atau nama pengguna yang akan digunakan untuk instruksi RUN, CMD, dan ENTRYPOINT berikutnya. Menjalankan kontainer sebagai pengguna non-root adalah praktik terbaik keamanan.
- VOLUME: Instruksi VOLUME membuat titik mount dengan nama yang ditentukan dan menandainya sebagai tempat untuk volume yang dipasang secara eksternal dari host asli atau kontainer lain.
Membangun Docker Image Menggunakan Perintah docker build.
- Perintah docker build digunakan untuk membangun Docker image dari Dockerfile dan “konteks”. Konteks adalah kumpulan file yang terletak di PATH atau URL yang ditentukan.
- Sintaks dasarnya adalah docker build PATH | URL | -. PATH biasanya merupakan direktori pada sistem file lokal Anda yang berisi Dockerfile.
- Opsi umum meliputi:
- -t atau —tag: Digunakan untuk memberi tag image dengan nama dan opsional tag dalam format nama. Contoh: docker build -t aplikasi-saya:1.0 ..
- -f atau —file: Menentukan nama dan jalur Dockerfile jika tidak bernama Dockerfile atau terletak di root konteks build. Contoh: docker build -f Dockerfile.dev ..
- —build-arg: Menetapkan variabel build-time yang dapat diakses dalam Dockerfile menggunakan instruksi ARG. Contoh: docker build —build-arg KUNCI_API=kunci_api_anda ..
- —no-cache: Memaksa Docker untuk mengabaikan image antara yang di-cache dan membangun ulang image dari awal.
- —target: Jika Dockerfile Anda mendefinisikan beberapa tahap build menggunakan instruksi FROM dengan kata kunci AS, Anda dapat menggunakan —target untuk menentukan tahap mana yang akan dibangun. Contoh: docker build —target builder -t aplikasi-saya..
Memberi Tag Docker Image untuk Kontrol Versi dan Manajemen Registry.
- Memberi tag Docker image sangat penting untuk kontrol versi dan untuk mengidentifikasi image saat mengirim dan menarik dari registry.
- Anda dapat memberi tag image selama proses build menggunakan opsi -t dengan docker build.
- Anda juga dapat memberi tag image yang ada menggunakan perintah docker tag nama_image[] nama_target_image[]. Contoh: docker tag aplikasi-sayanama-pengguna-saya/repositori-saya:1.0.
- Nama Docker image biasanya mengikuti format [registry/]nama_pengguna/repositori. Jika tidak ada tag yang ditentukan, Docker akan menggunakan tag terbaru secara default.
- Praktik terbaik untuk memberi tag meliputi penggunaan versi semantik (misalnya, 1.0.0, 1.0.1-beta), menyertakan informasi yang relevan dalam tag (misalnya, versi base image: 1.0.0-alpine), dan mempertahankan strategi pemberian tag yang konsisten di seluruh proyek Anda.
Pemahaman: Menulis Dockerfile yang efektif memerlukan pemahaman instruksi yang tersedia dan bagaimana instruksi tersebut memengaruhi image akhir. Pemberian tag sangat penting untuk mengelola berbagai versi image Anda dan untuk mengorganisasinya di registry.
Instruksi | Sintaks | Tujuan |
---|---|---|
FROM | FROM <image>[:<tag>] | Menentukan base image yang akan digunakan sebagai dasar. |
WORKDIR | WORKDIR <path> | Menetapkan direktori kerja untuk instruksi berikutnya. |
COPY | COPY <src>… <dest> | Menyalin file/direktori dari host ke image. |
RUN | RUN <command> (shell) atau RUN [“exe”, “param1”, “param2”] (exec) | Menjalankan perintah di dalam kontainer. |
ENV | ENV <key>=<value> … | Menetapkan variabel lingkungan. |
EXPOSE | EXPOSE <port> [<port>/<protocol>…] | Mendeklarasikan port yang didengarkan kontainer saat runtime. |
CMD | CMD [“exe”,“param1”,“param2”] | Menyediakan perintah default yang akan dijalankan saat kontainer dimulai. |
ENTRYPOINT | ENTRYPOINT [“exe”, “param1”, “param2”] | Mengonfigurasi kontainer untuk berjalan sebagai executable. |
USER | USER <user>[:<group>] | Menetapkan pengguna yang akan digunakan untuk menjalankan perintah berikutnya. |
VOLUME | VOLUME [“/data”] | Membuat titik mount untuk volume bernama atau anonim. |
Modul 5: Mengelola Docker Image dan Berinteraksi dengan Registry
Melihat Daftar Docker Image Lokal.
- Untuk melihat Docker image yang disimpan di mesin lokal Anda, Anda dapat menggunakan perintah docker images atau bentuk panjangnya docker image ls.
- Output dari perintah ini biasanya mencakup kolom seperti REPOSITORY, TAG, IMAGE ID, CREATED, dan SIZE, yang memberikan informasi kunci tentang setiap image.
Menarik Image Pra-bangun dari Docker Hub dan Registry Lain.
- Perintah docker pull digunakan untuk mengunduh Docker image dari registry, dengan Docker Hub sebagai registry default.
- Untuk menarik image spesifik dengan versi tertentu, Anda tentukan tag: docker pull nama_image. Jika tidak ada tag yang diberikan, Docker akan menarik tag terbaru secara default.
- Anda juga dapat menarik image berdasarkan digest uniknya, yang memastikan Anda mendapatkan versi image yang spesifik: docker pull nama_image@digest.
- Untuk menarik image dari registry selain Docker Hub, Anda perlu menyertakan nama host registry dalam nama image: docker pull url_registry/nama_image.
- Opsi —all-tags atau -a dengan docker pull akan mengunduh semua image dengan tag berbeda dalam sebuah repositori.
- Waspadai batasan tarif penarikan Docker Hub untuk akun gratis, yang mungkin membatasi jumlah penarikan dalam jangka waktu tertentu.
Mengirim Image Kustom Anda ke Docker Registry.
- Perintah docker push digunakan untuk mengunggah Docker image yang Anda buat secara lokal ke registry.
- Sebelum mengirim image, Anda biasanya perlu memberi tag dengan nama pengguna registry dan nama repositori Anda. Misalnya, untuk mengirim ke Docker Hub: docker tag aplikasi-saya:1.0 nama-pengguna-saya/repositori-saya:1.0, diikuti oleh docker push nama-pengguna-saya/repositori-saya:1.0.
- Anda perlu login ke registry menggunakan perintah docker login <url_registry> sebelum Anda dapat mengirim image. Untuk Docker Hub, perintahnya cukup docker login.
- Mengirim ke registry privat seperti ECR, ACR, dan GCR mengharuskan Anda untuk melakukan autentikasi terhadap registry spesifik tersebut, sering kali menggunakan alat CLI penyedia cloud untuk mendapatkan token autentikasi.
Menghapus Docker Image yang Tidak Digunakan.
- Untuk menghapus satu atau beberapa Docker image dari sistem lokal Anda, gunakan perintah docker rmi nama_image_atau_id. Anda dapat menentukan beberapa nama atau ID image yang dipisahkan oleh spasi.
- Anda juga dapat menghapus image berdasarkan tag-nya.
- Jika sebuah image saat ini digunakan oleh satu atau beberapa kontainer, Anda perlu menghentikan dan menghapus kontainer tersebut sebelum Anda dapat menghapus image, atau Anda dapat menggunakan flag -f untuk memaksa penghapusan.
- Perintah docker image prune dapat digunakan untuk menghapus semua image dangling (image yang tidak diberi tag dan tidak direferensikan oleh kontainer mana pun) atau semua image yang tidak digunakan (dengan flag -a).
Pemahaman: Mengelola Docker image lokal Anda dan berinteraksi dengan registry adalah keterampilan mendasar untuk bekerja dengan Docker. Memahami cara menarik, mengirim, dan menghapus image memungkinkan Anda untuk secara efektif menggunakan dan berbagi aplikasi yang dikontainerisasi.
Modul 6: Mengorkestrasi Aplikasi Multi-Kontainer dengan Docker Compose
Pengantar Docker Compose dan Manfaatnya.
- Docker Compose adalah alat untuk mendefinisikan dan menjalankan aplikasi Docker multi-kontainer. Alat ini menggunakan file YAML untuk mengonfigurasi layanan (kontainer) aplikasi dan memungkinkan Anda untuk memulai dan mengelola semua layanan dengan satu perintah.
- Manfaat menggunakan Docker Compose meliputi penyederhanaan pengelolaan aplikasi kompleks, pendefinisian dependensi layanan, penskalaan layanan yang mudah, dan memastikan lingkungan yang konsisten untuk tumpukan aplikasi Anda.
- Anda mendefinisikan layanan, jaringan, dan volume aplikasi Anda dalam file docker-compose.yml.
Membuat dan Mengonfigurasi File docker-compose.yml.
- Struktur file: version, services, networks, volumes.
- Mendefinisikan layanan: image, build, ports, volumes, environment, depends_on, networks.
- Mendefinisikan jaringan: driver, ipam.
- Mendefinisikan volume: driver, driver_opts.
- Contoh docker-compose.yml untuk aplikasi web dengan database.
Mendefinisikan dan Mengelola Beberapa Layanan, Jaringan, dan Volume.
- Menggunakan bagian services untuk mendefinisikan kontainer individual.
- Menghubungkan layanan ke jaringan menggunakan bagian networks.
- Berbagi data antar kontainer menggunakan bagian volumes.
Menjalankan dan Mengelola Seluruh Tumpukan Aplikasi dengan Docker Compose.
- Memulai semua layanan: docker-compose up.
- Menjalankan dalam mode terlepas (-d).
- Membangun image jika belum ada (—build).
- Menghentikan semua layanan: docker-compose down.
- Melihat status layanan: docker-compose ps.
- Melihat log layanan: docker-compose logs.
- Membangun atau membangun ulang layanan: docker-compose build.
- Menghentikan dan memulai layanan individual: docker-compose stop <layanan>, docker-compose start <layanan>.
Pemahaman: Docker Compose secara signifikan menyederhanakan pengelolaan aplikasi multi-kontainer dengan memungkinkan Anda untuk mendefinisikan dan mengontrol semua layanan dalam satu file konfigurasi. Ini merampingkan proses memulai, menghentikan, dan menskalakan aplikasi yang kompleks.
Modul 7: Memahami Jaringan Docker
Driver Jaringan Docker: Bridge, Host, Overlay, Macvlan.
- Jaringan Bridge: Driver jaringan default, membuat bridge perangkat lunak untuk kontainer pada host yang sama.
- Jaringan bridge default (docker0).
- Jaringan bridge yang ditentukan pengguna dan keuntungannya (resolusi DNS).
- Jaringan Host: Menghapus isolasi jaringan, memungkinkan kontainer untuk berbagi tumpukan jaringan host. Kasus penggunaan dan batasan.
- Jaringan Overlay: Mengaktifkan jaringan multi-host untuk kontainer di berbagai daemon Docker (memerlukan mode Swarm).
- Jaringan Macvlan: Menetapkan alamat MAC ke kontainer, membuatnya tampak sebagai perangkat fisik di jaringan. Kasus penggunaan dan pertimbangan.
Komunikasi Kontainer dalam Jaringan yang Sama dan Berbeda.
- Kontainer pada jaringan bridge yang ditentukan pengguna yang sama dapat berkomunikasi berdasarkan nama (resolusi DNS).
- Komunikasi antar kontainer pada jaringan yang berbeda memerlukan pemetaan port atau menghubungkannya secara eksplisit ke jaringan bersama.
Mengekspos dan Memublikasikan Port untuk Akses Eksternal.
- Instruksi EXPOSE: Mendokumentasikan port yang didengarkan kontainer.
- Flag -p atau —publish: Memetakan port host ke port kontainer, membuat layanan dapat diakses dari host dan secara eksternal.
- Memublikasikan ke alamat IP atau antarmuka spesifik.
- Memublikasikan semua port yang diekspos (-P atau —publish-all).
Membuat dan Mengelola Jaringan yang Ditentukan Pengguna.
- Membuat jaringan: docker network create -d bridge <nama_jaringan>.
- Melihat daftar jaringan: docker network ls.
- Memeriksa jaringan: docker network inspect <nama_jaringan>.
- Menghubungkan kontainer ke jaringan: docker network connect <nama_jaringan> <nama_kontainer>.
- Memutuskan kontainer dari jaringan: docker network disconnect <nama_jaringan> <nama_kontainer>.
- Menghapus jaringan: docker network rm <nama_jaringan>.
Pemahaman: Jaringan Docker memungkinkan Anda untuk mengisolasi dan menghubungkan kontainer dengan berbagai cara. Memahami berbagai driver jaringan dan cara mengelola jaringan sangat penting untuk membangun aplikasi yang kompleks.
Driver | Deskripsi | Kasus Penggunaan Utama |
---|---|---|
bridge | Membuat bridge perangkat lunak untuk kontainer pada host yang sama. | Pengembangan lokal, aplikasi host tunggal, default untuk kontainer standalone. |
host | Menghapus isolasi jaringan, kontainer berbagi tumpukan jaringan host. | Aplikasi yang kritis terhadap kinerja, ketika isolasi jaringan tidak menjadi perhatian. |
overlay | Mengaktifkan jaringan multi-host untuk kontainer di berbagai daemon Docker. | Aplikasi yang menjangkau beberapa host Docker (memerlukan mode Swarm). |
macvlan | Menetapkan alamat MAC ke kontainer, tampak sebagai perangkat fisik. | Aplikasi warisan, akses jaringan langsung, menetapkan IP khusus ke kontainer. |
Modul 8: Mengelola Data dengan Volume Docker
Memahami Persistensi Data di Docker.
- Kontainer bersifat ephemeral; data di dalam kontainer hilang saat kontainer dihapus.
- Volume menyediakan penyimpanan persisten di luar siklus hidup kontainer.
- Manfaat menggunakan volume untuk persistensi data, berbagi, dan backup.
Membuat, Melihat Daftar, dan Menghapus Volume Docker.
- Membuat volume bernama: docker volume create <nama_volume>.
- Melihat daftar volume: docker volume ls.
- Memeriksa volume: docker volume inspect <nama_volume>.
- Menghapus volume spesifik: docker volume rm <nama_volume>.
- Menghapus volume yang tidak digunakan: docker volume prune.
Memasang Volume ke Kontainer untuk Penyimpanan Persisten.
- Menggunakan flag -v dengan docker run: docker run -v <nama_volume>:<jalur_kontainer>.
- Menggunakan flag —mount dengan docker run (sintaks yang lebih eksplisit).
- Memasang direktori host sebagai bind mount (untuk pengembangan).
- Memasang volume read-only (option).
- Menggunakan volume anonim.
Kasus Penggunaan dan Praktik Terbaik untuk Volume Docker.
- Mempertahankan data database.
- Berbagi file konfigurasi antar kontainer.
- Menyimpan file log.
- Menggunakan volume bernama untuk lingkungan produksi.
- Menghindari bind mount untuk produksi karena ketergantungan host.
- Mempertimbangkan enkripsi volume untuk data sensitif.
Pemahaman: Volume Docker sangat penting untuk mengelola aplikasi stateful dan memastikan persistensi data. Memilih jenis volume yang tepat dan mengikuti praktik terbaik sangat penting untuk integritas data dan keandalan aplikasi.
Modul 9: Praktik Terbaik Keamanan Docker
Memilih Base Image yang Aman dan Minimal.
- Selalu mulai Docker image Anda dengan base image dari sumber tepercaya, seperti repositori resmi di Docker Hub atau penerbit terverifikasi.
- Pilih base image minimal seperti Alpine Linux jika memungkinkan, karena memiliki permukaan serangan yang lebih kecil karena lebih sedikit paket yang terinstal.
- Hindari penggunaan base image dari sumber yang tidak dikenal atau tidak tepercaya untuk mencegah masuknya kerentanan atau kode berbahaya.
Menjalankan Kontainer sebagai Pengguna Non-Root.
- Secara default, kontainer sering kali menjalankan proses sebagai pengguna root, yang dapat menjadi risiko keamanan. Merupakan praktik terbaik untuk membuat pengguna non-root khusus di dalam Docker image Anda dan menjalankan aplikasi Anda sebagai pengguna tersebut. Anda dapat menggunakan instruksi USER dalam Dockerfile Anda untuk menentukan pengguna.
- Anda juga dapat menggunakan flag —user dengan perintah docker run untuk mengganti pengguna yang ditentukan dalam Dockerfile.
- Menerapkan prinsip hak istimewa terendah berarti memberikan hanya izin yang diperlukan kepada proses yang dikontainerisasi.
Menerapkan Batasan Sumber Daya untuk Kontainer.
- Docker memungkinkan Anda untuk menetapkan kuota sumber daya untuk setiap kontainer, membatasi penggunaan memori dan CPU-nya. Ini membantu mencegah satu kontainer yang terkompromi menghabiskan semua sumber daya host, yang menyebabkan penolakan layanan (DoS).
- Anda dapat membatasi memori yang dapat digunakan kontainer dengan flag -m atau —memory (misalnya, -m=128m untuk 128 megabyte).
- Anda dapat membatasi sumber daya CPU menggunakan flag —cpus, yang menentukan jumlah inti CPU yang dapat diakses kontainer (misalnya, —cpus=2).
Memindai Docker Image untuk Kerentanan.
- Pindai Docker image Anda secara teratur untuk kerentanan yang diketahui menggunakan alat pemindai keamanan. Banyak alat yang tersedia, termasuk Docker Scan (terintegrasi ke dalam Docker Desktop), dan alat sumber terbuka seperti Trivy.
- Penting untuk memindai image baik selama pengembangan maupun dalam produksi untuk mengidentifikasi dan memperbaiki potensi masalah keamanan.
- Jaga agar base image dan dependensi aplikasi Anda tetap mutakhir dengan patch keamanan dengan membangun ulang image Anda secara teratur.
Mengamankan Akses Docker Daemon dan Registry.
- Hindari mengekspos soket Docker daemon (docker.sock) ke kontainer kecuali benar-benar diperlukan, karena memberikan kontrol tingkat root atas host Docker.
- Enkripsi komunikasi dengan Docker registry menggunakan TLS untuk melindungi integritas dan kerahasiaan lalu lintas jaringan.
- Terapkan kontrol akses berbasis peran (RBAC) untuk Docker registry Anda untuk membatasi siapa yang dapat mengakses dan memodifikasi image.
- Gunakan registry privat untuk menyimpan image kontainer sensitif atau berpemilik dan kontrol akses ke image tersebut.
- Pastikan Docker Engine Anda selalu menjalankan versi stabil terbaru dengan pembaruan keamanan terbaru yang diterapkan.
Pemahaman: Keamanan di Docker adalah masalah multi-aspek yang perlu ditangani di berbagai tahap, mulai dari memilih base image hingga menjalankan kontainer dan mengelola registry. Pendekatan proaktif terhadap keamanan sangat penting untuk melindungi aplikasi dan infrastruktur Anda.
Modul 10: Konsep Docker Tingkat Lanjut dan Langkah Selanjutnya
Pengantar Multi-Stage Build untuk Image yang Lebih Kecil dan Lebih Aman.
- Multi-stage build melibatkan penggunaan beberapa instruksi FROM dalam Dockerfile Anda untuk membuat tahap build yang berbeda.
- Pola ini memungkinkan Anda untuk memisahkan lingkungan build (dengan semua alat dan dependensi yang diperlukan) dari lingkungan runtime akhir, menghasilkan image yang lebih kecil dan lebih aman karena Anda hanya menyalin artefak yang diperlukan ke tahap akhir.
Ikhtisar Singkat Docker Swarm dan Kubernetes untuk Orkestrasi Kontainer dalam Skala Besar.
- Docker Swarm: Docker Swarm adalah solusi asli Docker untuk pengklusteran dan orkestrasi kontainer Docker. Ini memungkinkan Anda untuk mengelola kluster node Docker sebagai satu sistem virtual.
- Kubernetes: Kubernetes (sering disingkat K8s) adalah platform sumber terbuka yang kuat untuk mengotomatisasi penyebaran, penskalaan, dan pengelolaan aplikasi yang dikontainerisasi. Ini banyak digunakan untuk mengorkestrasi kontainer dalam skala besar di berbagai host.
- Pertimbangkan untuk menggunakan alat orkestrasi kontainer seperti Swarm atau Kubernetes ketika Anda perlu mengelola sejumlah besar kontainer, menskalakan aplikasi Anda secara dinamis, dan memastikan ketersediaan tinggi.
Menjelajahi Ekstensi dan Alat Docker yang Berguna.
- Docker Desktop menawarkan ekstensi yang dapat meningkatkan pengalaman Docker Anda dengan menyediakan fitur dan integrasi tambahan.
- Docker Compose Watch dapat secara otomatis membangun ulang dan memulai ulang layanan Anda selama pengembangan ketika mendeteksi perubahan file.
- BuildKit adalah mesin build baru untuk Docker yang menawarkan peningkatan kinerja dan fitur tingkat lanjut seperti build paralel dan peningkatan caching.
Sumber Daya untuk Pembelajaran dan Pengembangan Keterampilan Berkelanjutan.
- Rujuk dokumentasi resmi Docker untuk informasi mendalam tentang semua aspek Docker.
- Jelajahi bagian “Learn” di Docker Hub untuk tutorial dan panduan.
- Manfaatkan berbagai kursus dan tutorial online yang tersedia di platform seperti Coursera, Udemy, dan YouTube.
- Terlibat dengan komunitas Docker melalui forum dan blog untuk belajar dari orang lain dan tetap mengikuti praktik terbaik.
Pemahaman: Ekosistem Docker sangat luas dan terus berkembang. Modul ini mendorong peserta didik untuk terus menjelajahi konsep dan alat tingkat lanjut serta memanfaatkan sumber daya yang tersedia untuk lebih meningkatkan keterampilan mereka.
Kesimpulan
Roadmap ini menyediakan jalur pembelajaran yang terstruktur untuk menguasai Docker, mulai dari konsep dasar hingga topik tingkat lanjut. Dengan mengikuti setiap modul dan mempraktikkan keterampilan yang dipelajari, individu akan dapat secara efektif menggunakan Docker untuk pengembangan, penyebaran, dan pengelolaan aplikasi modern. Penting untuk diingat bahwa teknologi kontainerisasi terus berkembang, sehingga pembelajaran berkelanjutan dan eksplorasi sumber daya tambahan sangat dianjurkan.