Adinusa: Docker Fundamental
Docker hadir sebagai solusi inovatif yang mengubah cara pengembang dan tim operasional mengelola aplikasi mereka. Dengan mengemas aplikasi beserta semua dependensinya ke dalam satu wadah yang ringan dan portabel, Docker memungkinkan proses pembangunan, pengujian, dan penerapan aplikasi berjalan lebih cepat dan lebih konsisten. Dalam rangkuman course Docker Fundamental ini, kita akan menjelajahi konsep dasar Docker, manfaat utamanya, serta bagaimana teknologi ini mengoptimalkan pengembangan perangkat lunak dalam skala besar
Introduction to Container
Docker memungkinkan pengembang untuk membangun, mengirim, dan menjalankan aplikasi secara konsisten di berbagai lingkungan. Dibandingkan dengan virtual machine (VM), yang memerlukan sumber daya lebih besar karena harus menginstal sistem operasi lengkap, container jauh lebih efisien dan cepat. Container juga meningkatkan keamanan dengan isolasi aplikasi menggunakan fitur kernel Linux, serta memudahkan manajemen dan pengujian aplikasi dengan memastikan konsistensi di seluruh platform.
Selain itu, Docker dan teknologi terkait seperti Podman, LXC, dan LXD menyediakan alat yang memungkinkan pengelolaan aplikasi dalam lingkungan terisolasi tanpa membebani sistem. Dengan demikian, penggunaan container mengurangi friksi dalam rantai pasokan perangkat lunak, meningkatkan keamanan, dan menyederhanakan proses pengembangan hingga produksi. Lab lingkungan yang disiapkan untuk pelatihan Docker mencakup konfigurasi VM, jaringan, dan pengaturan SSH untuk memfasilitasi komunikasi antar-node, mempersiapkan peserta untuk bekerja dengan container di skala nyata.
Introduction to Docker
Docker menawarkan dua produk utama, yaitu Docker Community Edition (CE) yang gratis dan Docker Enterprise Edition (EE) yang berbayar dan dilengkapi dengan fitur-fitur lanjutan untuk kebutuhan perusahaan. Docker CE cocok untuk pengembang, menyediakan alat seperti Docker for Desktop untuk membangun dan menguji aplikasi Dockerized, sementara Docker EE lebih fokus pada organisasi besar dengan dukungan 24/7 dan kontrol akses berbasis peran (RBAC). Docker juga telah memperkenalkan model langganan baru yang memerlukan organisasi besar untuk membeli langganan berbayar mulai dari $5 per pengguna per bulan. Dalam kursus ini, peserta belajar menginstal Docker, menjalankan dan mengelola container dengan berbagai aplikasi seperti Redis, Nginx, MySQL, dan WordPress, serta memanipulasi container melalui berbagai perintah untuk mengelola sumber daya, log, dan proses dalam container. Melalui serangkaian lab praktis, peserta diajarkan cara mengkonfigurasi Docker, menguji aplikasi, dan mengelola container menggunakan berbagai fitur seperti penanganan port, volume, dan pengelolaan sumber daya, yang semuanya mendalamkan pemahaman mereka tentang penggunaan Docker dalam skenario dunia nyata.
Managing Docker Container
Bagian ini membahas berbagai aspek terkait dengan Docker images, registri Docker, dan pembuatan custom images menggunakan Dockerfile. Docker image adalah template yang digunakan untuk membuat container dan terdiri dari beberapa layer, di mana setiap layer menyimpan perubahan terhadap filesystem dasar. Setiap layer bersifat immutable, yang memungkinkan image untuk di-cache dan dibagikan antar banyak container, mengurangi penggunaan sumber daya dan mempercepat proses pembuatan container. Docker Registry memungkinkan penyimpanan dan distribusi image, dengan Docker Hub sebagai registri publik utama, sementara Docker Registry memungkinkan pengguna untuk mengelola image secara privat. Pengguna dapat mengupload image ke registri menggunakan perintah docker push
setelah menandai image dengan tag yang sesuai.
Selain itu, pengguna diajarkan untuk membuat custom images dengan Dockerfile, yang berisi serangkaian instruksi untuk membangun image, seperti menginstal perangkat lunak, menyalin file, dan mengatur perintah yang akan dijalankan saat container dibuat. Lab-lab terkait dengan Dockerfile memandu peserta untuk membuat, mengonfigurasi, dan menjalankan container menggunakan berbagai image, seperti aplikasi Flask dan Nginx, serta mengunggah image ke Docker Hub untuk distribusi lebih lanjut. Praktik ini memberikan pemahaman mendalam tentang pembuatan dan pengelolaan container images dalam pengembangan aplikasi.
Creating Custom Docker Container Image
Bagian ini membahas berbagai aspek terkait dengan Docker images, registri Docker, dan pembuatan custom images menggunakan Dockerfile. Docker image adalah template yang digunakan untuk membuat container dan terdiri dari beberapa layer, di mana setiap layer menyimpan perubahan terhadap filesystem dasar. Setiap layer bersifat immutable, yang memungkinkan image untuk di-cache dan dibagikan antar banyak container, mengurangi penggunaan sumber daya dan mempercepat proses pembuatan container. Docker Registry memungkinkan penyimpanan dan distribusi image, dengan Docker Hub sebagai registri publik utama, sementara Docker Registry memungkinkan pengguna untuk mengelola image secara privat. Pengguna dapat mengupload image ke registri menggunakan perintah docker push
setelah menandai image dengan tag yang sesuai.
Selain itu, pengguna diajarkan untuk membuat custom images dengan Dockerfile, yang berisi serangkaian instruksi untuk membangun image, seperti menginstal perangkat lunak, menyalin file, dan mengatur perintah yang akan dijalankan saat container dibuat. Lab-lab terkait dengan Dockerfile memandu peserta untuk membuat, mengonfigurasi, dan menjalankan container menggunakan berbagai image, seperti aplikasi Flask dan Nginx, serta mengunggah image ke Docker Hub untuk distribusi lebih lanjut. Praktik ini memberikan pemahaman mendalam tentang pembuatan dan pengelolaan container images dalam pengembangan aplikasi.
Docker Compose
Docker Compose adalah alat yang memungkinkan pengelolaan dan orkestrasi beberapa container dalam satu host Docker menggunakan pendekatan deklaratif melalui file YAML (docker-compose.yml
). Dengan pendekatan ini, pengguna cukup mendefinisikan layanan yang dibutuhkan, seperti database dan aplikasi web, beserta konfigurasi jaringan, volume, dan port yang digunakan. Docker Compose kemudian menangani eksekusi container sesuai dengan definisi yang telah dibuat, sehingga memudahkan proses pengelolaan aplikasi multi-container, baik untuk pengembangan, pengujian, maupun implementasi dalam lingkungan produksi.
Dalam praktiknya, Docker Compose digunakan untuk membangun, menjalankan, dan menskalakan aplikasi secara efisien. Dengan perintah docker-compose up
, layanan dapat dijalankan dalam mode interaktif atau sebagai daemon di latar belakang, sementara docker-compose down
menghentikan dan menghapus semua container yang terkait. Selain itu, fitur seperti docker-compose scale
memungkinkan peningkatan jumlah instans layanan secara otomatis, mendukung fleksibilitas dalam menangani peningkatan beban aplikasi. Lab dalam bagian ini mengajarkan cara menginstal Docker Compose, membuat file YAML untuk aplikasi seperti WordPress, serta menjalankan dan mengelola container dengan lebih efisien menggunakan Docker Compose.
Docker Continous Integration (CI)
Continuous Integration (CI) adalah praktik pengembangan yang memungkinkan para pengembang untuk mengintegrasikan kode mereka ke dalam repositori bersama beberapa kali sehari. Setiap perubahan kode akan diuji dengan build otomatis untuk mendeteksi masalah lebih awal. CI memungkinkan pengembang untuk menguji kode di berbagai lingkungan dan secepat mungkin, sehingga bug dapat ditemukan dan diperbaiki lebih awal dalam siklus pengembangan aplikasi. Dengan integrasi Docker ke dalam alat seperti Jenkins dan GitHub, proses pengujian dan pembangunan kode menjadi lebih efisien. Kode yang didorong ke GitHub dapat otomatis memicu Jenkins untuk membangun image Docker, yang kemudian dapat diuji dan dipublikasikan ke Docker Hub atau Docker Trusted Registry, menghemat waktu dan meningkatkan kolaborasi antar pengembang.
Docker Hub menyediakan fitur build otomatis yang memungkinkan pembuatan image Docker secara otomatis dari kode sumber di repositori eksternal seperti GitHub. Dengan mengatur build otomatis, setiap kali ada perubahan pada branch tertentu, webhook akan memicu pembuatan dan pengiriman image ke Docker Hub. Fitur ini memastikan bahwa image selalu dibangun sesuai dengan Dockerfile yang ada, memperbarui repositori secara otomatis, dan memungkinkan akses terbuka ke Dockerfile bagi siapa saja yang memiliki akses ke repositori. Dengan dukungan untuk repositori publik dan privat, serta platform seperti GitHub dan Bitbucket, build otomatis mempermudah alur kerja pengembangan dan integrasi aplikasi.
Docker Swarm & Portainer
Bagian ini membahas tentang Docker Swarm, alat untuk mengelola dan mengorkestrasi container di beberapa host Docker. Docker Swarm menyediakan kemampuan clustering, orkestrasi, dan penjadwalan bawaan dalam Docker, memungkinkan manajemen layanan multi-container dengan fitur seperti pemantauan kesehatan, load balancing, dan replikasi layanan. Swarm menggunakan pendekatan deklaratif untuk mendefinisikan keadaan yang diinginkan dari layanan dalam aplikasi, memastikan bahwa jumlah salinan layanan tetap konsisten meskipun ada node yang gagal. Swarm juga mendukung jaringan multi-host dan penemuan layanan untuk memudahkan komunikasi antar container dalam cluster.
Selain itu, Portainer, alat manajemen container yang kompatibel dengan Docker dan Kubernetes, mempermudah pengelolaan lingkungan Docker, baik dalam mode standalone maupun Swarm. Portainer menyediakan antarmuka pengguna yang intuitif untuk mengelola container, image, volume, dan jaringan. Dengan Portainer, pengguna dapat mengelola beberapa cluster dan cloud, mengurangi kompleksitas operasional, dan meningkatkan efisiensi pengelolaan container.
Dalam serangkaian lab, peserta diajarkan cara menginisialisasi Swarm, mendepoy layanan ke Swarm, menskalakan layanan, serta memperbarui dan mengelola container melalui Portainer. Lab juga mencakup pembuatan dan pemindahan image Docker melalui Portainer, mengintegrasikan fungsionalitas build dan push image yang efisien.
Logging Driver
Bagian ini membahas tentang Docker logging drivers, yang memungkinkan pengguna untuk mengonfigurasi mekanisme pencatatan informasi dari container yang sedang berjalan. Secara default, Docker menggunakan json-file
sebagai logging driver, yang menyimpan log dalam format JSON. Namun, untuk mencegah masalah kehabisan ruang disk karena log yang terus menumpuk, disarankan untuk menggunakan logging driver local
yang memiliki fitur rotasi log secara otomatis. Anda dapat mengonfigurasi logging driver ini melalui file konfigurasi daemon.json
pada Docker daemon atau menggunakan opsi --log-driver
saat menjalankan container.
Pada lab yang diberikan, peserta diajarkan cara mengonfigurasi logging driver untuk Docker daemon dengan mengedit file daemon.json
dan mengonfigurasi opsi rotasi log, seperti max-size
dan max-file
. Setelah melakukan konfigurasi ini, peserta diminta untuk menjalankan container dan memeriksa apakah log yang dihasilkan sesuai dengan pengaturan yang telah ditentukan. Lab ini mengajarkan pentingnya manajemen log pada Docker, terutama dalam konteks skalabilitas dan pengelolaan sumber daya untuk container yang menghasilkan banyak output log.
Health Check
Pada bagian Health Check di Docker, instruksi HEALTHCHECK
digunakan untuk memeriksa kesehatan container dengan menjalankan sebuah perintah di dalamnya. Terdapat dua bentuk dari instruksi ini, yaitu dengan menggunakan perintah CMD
untuk menjalankan perintah pemeriksaan kesehatan, atau dengan HEALTHCHECK NONE
untuk menonaktifkan pemeriksaan kesehatan dari image dasar. Status kesehatan container dapat berupa starting, healthy, atau unhealthy berdasarkan hasil pemeriksaan. Docker menyediakan beberapa opsi konfigurasi seperti --interval
, --timeout
, --start-period
, dan --retries
untuk mengatur frekuensi, batas waktu, dan jumlah percobaan ulang pada pemeriksaan kesehatan.
Praktikum yang diberikan mengharuskan peserta untuk membuat dan mengonfigurasi health check dalam Dockerfile serta menjalankan container dengan perintah yang sesuai. Dalam praktik pertama, peserta membuat container web server dengan health check untuk memeriksa apakah server dapat diakses dengan curl. Praktikum kedua melibatkan pembuatan server dengan dua port, dan health check dilakukan pada port 8080 untuk memastikan bahwa server berfungsi dengan benar. Selama praktikum, peserta diinstruksikan untuk memeriksa status container dengan perintah docker ps
dan menggunakan curl
untuk menguji apakah server dalam keadaan sehat atau tidak.
Dengan menggunakan fitur health check ini, pengguna dapat memantau status aplikasi di dalam container dan melakukan tindakan otomatis jika status kesehatan container berubah menjadi tidak sehat.
Security
Membahas berbagai aspek penting terkait keamanan dan pengelolaan Docker, dimulai dari pengenalan tentang namespaces dan control groups yang digunakan untuk isolasi dan pengaturan sumber daya antar container. Docker memanfaatkan fitur-fitur seperti Linux kernel namespaces untuk memastikan bahwa setiap container memiliki jaringan dan ruang prosesnya sendiri, serta control groups untuk mencegah satu container menghabiskan sumber daya yang berlebihan. Keamanan juga dijaga dengan cara membatasi kemampuan yang diberikan kepada container menggunakan Linux kernel capabilities, serta dengan implementasi Docker Content Trust yang memverifikasi tanda tangan image.
Selain itu, course ini juga menjelaskan pentingnya pengaturan endpoint API Docker, penerapan seccomp untuk membatasi panggilan sistem dalam container, serta manajemen "secrets" yang menyimpan data sensitif dengan cara aman, baik dalam layanan Docker Swarm. Secara keseluruhan, Docker memberikan kerangka keamanan yang cukup kuat dengan opsi tambahan untuk meningkatkan proteksi, seperti menggunakan AppArmor atau SELinux. Keamanan ini sangat penting terutama dalam lingkungan multi-tenant atau produksi
Storage Driver
mencakup pembahasan mengenai Docker Storage Drivers, yang mengelola cara penyimpanan dan pengelolaan container pada host Docker. Docker mendukung beberapa jenis storage driver seperti overlay2, aufs, devicemapper, btrfs, dan vfs, yang masing-masing memiliki karakteristik dan kinerja berbeda tergantung pada kernel dan distribusi Linux yang digunakan. Overlay2 adalah driver yang disarankan untuk sebagian besar lingkungan karena performa dan stabilitasnya yang baik, sementara vfs lebih cocok untuk tujuan pengujian. Pemilihan storage driver yang tepat sangat bergantung pada kebutuhan workload, dengan beberapa driver yang hanya tersedia di distribusi Linux tertentu atau memerlukan pengaturan khusus.
Selain itu, course ini memberikan latihan praktis dalam mengonfigurasi storage driver, seperti mengganti driver ke vfs pada sistem menggunakan file daemon.json, serta melakukan verifikasi dan pengujian untuk memastikan pengaturan yang benar. Pengguna dapat memantau perubahan dengan perintah seperti docker info
untuk memastikan driver yang digunakan sesuai dengan kebutuhan dan konfigurasi yang diinginkan
Logging and Error Handling
Secara default, perintah docker logs
akan menampilkan output dari container, yang mencakup aliran data STDOUT dan STDERR. Output ini sering kali digunakan untuk menampilkan informasi umum dan pesan kesalahan dari perintah yang dijalankan dalam container. Namun, dalam beberapa kasus, log yang lebih berguna mungkin tidak muncul jika aplikasi di dalam container mengarahkan outputnya ke file log atau ke backend logging eksternal, bukan ke STDOUT atau STDERR.
Sebagai solusi, beberapa image resmi Docker, seperti nginx dan Apache httpd, mengonfigurasi aplikasi mereka untuk mengarahkan log ke STDOUT dan STDERR. Misalnya, image nginx membuat symbolic link dari file log akses dan kesalahan ke perangkat khusus yang terkait dengan STDOUT dan STDERR. Demikian juga, image httpd mengubah konfigurasi untuk menulis output normal dan kesalahan langsung ke file descriptor yang sesuai. Dalam praktiknya, Anda bisa menggunakan perintah docker logs
untuk memeriksa log dengan berbagai opsi, seperti --details
untuk detail lebih lanjut dan --timestamps
untuk mencatat waktu log.
Lab Challenge
Course "Docker Fundamental" diakhiri dengan dua tantangan praktis yang menguji pemahaman peserta terhadap konsep yang telah diajarkan dalam course ini.
Tantangan 1 melibatkan penggunaan HAProxy dengan Docker. Tugasnya adalah membuat dua container web (menggunakan image nginx dan httpd) yang dapat diakses melalui HAProxy. Peserta diminta untuk mengonfigurasi HAProxy agar dapat mengarahkan lalu lintas ke container web melalui domain yang berbeda, yaitu web1.username.id
dan web2.username.id
. Tantangan ini mengajarkan peserta cara mengatur konfigurasi HAProxy dengan menggunakan Docker volume untuk menyimpan konfigurasi dan mengonfigurasi domain yang sesuai tanpa perlu mengubah file /etc/hosts
secara manual.
Tantangan 2 lebih kompleks, yaitu Deploy Laravel dengan Docker. Peserta diminta untuk meng-clone repository Laravel dan membuat image Docker untuk aplikasi tersebut. Kemudian, peserta harus mengonfigurasi lingkungan aplikasi Laravel dengan PHP 7.2 dan melakukan beberapa langkah pengaturan seperti update composer, pengaturan file .env
, migrasi database, serta memastikan aplikasi berjalan otomatis saat container dijalankan tanpa intervensi manual. Tantangan ini memberikan pengalaman praktis dalam menggunakan Docker untuk mengelola aplikasi PHP berbasis Laravel dan memastikan semuanya dapat berjalan otomatis.
Kedua tantangan ini dirancang untuk memberikan pemahaman yang lebih mendalam tentang konfigurasi dan pengelolaan aplikasi serta layanan di dalam Docker container, yang sangat relevan dengan pengembangan aplikasi berbasis containerisasi
Comments
Post a Comment