Kapan kontainer Docker digunakan
Seperti yang telah kita pelajari, Docker memiliki beberapa fitur untuk digunakan. Di sini, kita akan melihat manfaat yang diberikan Docker kepada tim pengembangan dan operasi. Kita juga akan melihat beberapa skenario di mana Docker mungkin bukan pilihan terbaik.
Aspek-aspek ini akan membantu Anda memutuskan apakah Docker cocok untuk strategi kontainerisasi Anda atau tidak.
Ingat dari sebelumnya bahwa ada sejumlah tantangan yang dihadapi tim kami saat mereka mengembangkan dan menerbitkan portal pelacakan pesanan kami. Mereka mencari solusi untuk:
- Kelola lingkungan hosting kami dengan mudah.
- Menjamin kelangsungan dalam cara kami mengirimkan perangkat lunak kami.
- Pastikan kami memanfaatkan perangkat keras server secara efisien.
- Memungkinkan portabilitas aplikasi kami.
Docker adalah solusi untuk tantangan ini. Mari kita lihat semua manfaat yang telah kita bahas sejauh ini.
Manfaat Docker
Saat kami menggunakan Docker, kami langsung mendapatkan akses untuk manfaat yang ditawarkan kontainerisasi.
Penggunaan perangkat keras yang efisien
Kontainer berjalan tanpa menggunakan komputer virtual (VM). Seperti yang kita pelajari, kontainer bergantung pada kernel host untuk fungsi seperti sistem file, manajemen jaringan, penjadwalan proses, dan manajemen memori.
Dibandingkan dengan VM, kita dapat melihat bahwa VM memerlukan OS yang diinstal untuk menyediakan fungsi kernel ke aplikasi yang sedang berjalan di dalam VM. Perlu diingat bahwa VM OS juga membutuhkan ruang disk, memori, dan waktu CPU. Dengan menghapus VM dan persyaratan OS tambahan, kita dapat membebaskan sumber daya di host dan menggunakannya untuk menjalankan kontainer lain.
Isolasi kontainer
Kontainer Docker menyediakan fitur keamanan untuk menjalankan beberapa kontainer secara bersamaan di host yang sama tanpa mempengaruhi satu sama lain. Seperti yang kita pelajari, kita dapat mengonfigurasi penyimpanan data dan konfigurasi jaringan untuk mengisolasi kontainer kita atau berbagi data dan konektivitas antara kontainer tertentu.
Mari bandingkan fitur ini dengan menggunakan VM.
Asumsikan kita memiliki host fisik yang menjalankan dua VM. Kami memiliki tiga aplikasi yang ingin kami jalankan secara terpisah satu sama lain. Kami memutuskan untuk menyebarkan aplikasi pertama ke VM1 dan yang kedua ke VM2 untuk memisahkan dua aplikasi satu sama lain. Jika sekarang kita memilih untuk menginstal aplikasi ketiga, kita perlu menginstal VM lain untuk melanjutkan pola ini.
Portabilitas aplikasi
Kontainer berjalan hampir di mana-mana: desktop, server fisik, VM, dan di cloud. Kompatibilitas runtime ini memudahkan untuk memindahkan aplikasi kontainer di antara lingkungan yang berbeda.
Karena kontainer ringan, kontainer tidak menderita waktu mulai atau matikan yang lambat seperti VM. Aspek ini membuat penyebaran ulang dan skenario penyebaran lainnya—seperti meningkatkan atau menurunkan skala—lancar dan cepat.
Pengiriman aplikasi
Dengan Docker, container menjadi unit yang kita gunakan untuk mendistribusikan aplikasi. Konsep ini memastikan bahwa kami memiliki format kontainer standar yang digunakan tim pengembang dan operasi kami. Pengembang kami dapat fokus pada pengembangan perangkat lunak, dan tim operasi dapat fokus pada penyebaran dan pengelolaan perangkat lunak.
Kami dapat menggunakan kontainer di setiap langkah sistem penerapan kami setelah tim pengembangan meluncurkan build aplikasi kami. Kontainer adalah kandidat ideal untuk integrasi berkelanjutan, dan mempercepat waktu dari build ke produksi.
Mengelola lingkungan hosting
Kami mengonfigurasi lingkungan aplikasi kami secara internal ke kontainer. Penahanan ini memberikan fleksibilitas bagi tim operasi kami untuk mengelola lingkungan aplikasi lebih dekat. Tim kami dapat memantau pembaruan OS, menerapkan patch keamanan sekali, dan meluncurkan kontainer yang diperbarui sesuai kebutuhan.
Tim kami juga dapat mengelola aplikasi mana yang akan dipasang, diperbarui, dan dihapus tanpa memengaruhi penampung lain. Setiap kontainer diisolasi dan memiliki batas sumber daya yang ditetapkan secara terpisah dari kontainer lain.
Penerapan cloud
Kontainer Docker adalah arsitektur kontainer default yang digunakan layanan kontainerisasi Azure, dan banyak platform cloud lainnya juga mendukungnya.
Misalnya, Anda dapat menyebarkan kontainer Docker ke Azure Container Instances, Azure App Service, dan Azure Kubernetes Services. Masing-masing opsi ini memberi Anda fitur dan kemampuan yang berbeda.
Misalnya, instance kontainer Azure memungkinkan Anda untuk fokus mendesain dan membangun aplikasi Anda tanpa overhead pengelolaan infrastruktur. Ketika Anda memiliki banyak kontainer untuk diatur, layanan Azure Kubernetes memudahkan untuk menyebarkan dan mengelola penyebaran kontainer skala besar.
Kapan tidak menggunakan kontainer Docker
Kontainer Docker memberikan banyak manfaat, tetapi perlu diingat bahwa kontainer mungkin tidak sesuai dengan semua kebutuhan Anda. Ada beberapa aspek yang perlu diperhatikan.
Keamanan dan virtualisasi
Kontainer memberikan tingkat isolasi. Namun, kontainer berbagi kernel OS host tunggal, yang bisa menjadi satu titik serangan.
Host Windows menyediakan model isolasi tambahan di mana VM yang dibuat khusus dapat digunakan untuk mengisolasi kontainer di tingkat hypervisor. Mode ini disebut mode isolasi Hyper-V, dan menambahkan lapisan keamanan lain antara kontainer dan host kontainer.
Kita juga perlu memperhitungkan aspek-aspek seperti penyimpanan dan jaringan untuk memastikan bahwa kita mempertimbangkan semua aspek keamanan. Misalnya, semua kontainer menggunakan jaringan jembatan secara default dan dapat mengakses satu sama lain melalui alamat IP.
Tidak semua aplikasi mendapat manfaat dari kontainerisasi. Dalam kasus seperti itu, mungkin lebih masuk akal untuk menggunakan VM.
Pemantauan layanan
Mengelola aplikasi dan kontainer lebih rumit daripada penyebaran VM tradisional. Ada fitur pengelogan yang memberi tahu kami tentang status kontainer yang sedang berjalan, tetapi informasi yang lebih rinci tentang layanan di dalam kontainer lebih sulit dipantau.
Misalnya, Docker memberi kita perintah docker stats. Perintah ini mengembalikan informasi untuk kontainer seperti persentase penggunaan CPU, persentase penggunaan memori, I/O yang ditulis ke disk, data jaringan yang dikirim dan diterima, dan ID proses yang ditetapkan. Informasi ini berguna sebagai aliran data langsung; namun, tidak ada agregasi yang dilakukan, karena data tidak disimpan. Kita harus menginstal perangkat lunak pihak ketiga untuk pengambilan data yang bermakna selama jangka waktu tertentu.