[Catatan, jawaban ini berfokus pada wadah Linux dan mungkin tidak sepenuhnya berlaku untuk sistem operasi lain. ]
Apa itu wadah?
Ini adalah Aplikasi : Penampung adalah cara untuk menjalankan aplikasi yang diisolasi satu sama lain. Daripada memvirtualisasikan perangkat keras untuk menjalankan beberapa sistem operasi, container mengandalkan virtualisasi sistem operasi untuk menjalankan banyak aplikasi. Artinya, Anda dapat menjalankan lebih banyak container pada perangkat keras yang sama daripada VM karena Anda hanya memiliki satu salinan OS yang berjalan, dan Anda tidak perlu mengalokasikan memori dan inti CPU untuk setiap instance aplikasi Anda. Sama seperti aplikasi lain, ketika sebuah container membutuhkan CPU atau Memori, ia mengalokasikannya, dan kemudian membebaskannya setelah selesai, memungkinkan aplikasi lain untuk menggunakan sumber daya terbatas yang sama nanti.
Mereka memanfaatkan ruang nama kernel : Setiap penampung secara default akan menerima lingkungan dengan ruang nama berikut ini:
- Mount: filesystems,
/
di penampung akan berbeda dengan /
di host.
- PID: id proses, pid 1 dalam wadah adalah aplikasi yang Anda luncurkan, pid ini akan berbeda jika dilihat dari host.
- Jaringan: kontainer berjalan dengan antarmuka loopbacknya sendiri (127.0.0.1) dan IP pribadi secara default. Docker menggunakan teknologi seperti jaringan jembatan Linux untuk menghubungkan banyak kontainer bersama dalam lan pribadinya sendiri.
- IPC: komunikasi antarproses
- UTS: ini termasuk nama host
- Pengguna: Anda dapat secara opsional menggeser semua id pengguna yang akan diimbangi dari host
Masing-masing ruang nama ini juga mencegah penampung melihat hal-hal seperti sistem file atau proses pada host, atau di penampung lain, kecuali Anda secara eksplisit menghapus isolasi tersebut.
Dan alat keamanan linux lainnya : Container juga memanfaatkan fitur keamanan lain seperti SELinux, AppArmor, Capabilities, dan Seccomp untuk membatasi pengguna di dalam container, termasuk pengguna root, agar tidak dapat keluar dari container atau berdampak negatif pada host.
Kemas aplikasi Anda dengan dependensinya untuk portabilitas : Mengemas aplikasi ke dalam container melibatkan perakitan tidak hanya aplikasi itu sendiri, tetapi semua dependensi yang diperlukan untuk menjalankan aplikasi itu, menjadi gambar portabel. Gambar ini adalah sistem file dasar yang digunakan untuk membuat wadah. Karena kami hanya mengisolasi aplikasi, sistem file ini tidak menyertakan kernel dan utilitas OS lain yang diperlukan untuk memvirtualisasikan seluruh sistem operasi. Oleh karena itu, gambar untuk penampung harus jauh lebih kecil daripada gambar untuk mesin virtual yang setara, membuatnya lebih cepat untuk diterapkan ke node di seluruh jaringan. Hasilnya, container telah menjadi pilihan populer untuk menerapkan aplikasi ke cloud dan pusat data jarak jauh.
Bisakah itu menggantikan mesin virtual yang didedikasikan untuk pengembangan?
Itu tergantung : Jika lingkungan pengembangan Anda menjalankan Linux, dan Anda juga tidak memerlukan akses ke perangkat keras, atau memiliki akses langsung ke perangkat keras fisik dapat diterima, maka Anda akan menemukan migrasi ke wadah Linux cukup mudah. Target ideal untuk kontainer buruh pelabuhan adalah aplikasi seperti API berbasis web (misalnya aplikasi REST), yang Anda akses melalui jaringan.
Apa tujuan, dengan kata sederhana, menggunakan Docker di perusahaan? Keuntungan utama ?
Dev atau Ops : Docker biasanya dibawa ke lingkungan di salah satu dari dua jalur. Pengembang mencari cara untuk mengembangkan dan menguji aplikasi mereka secara lebih cepat, dan operasi yang ingin menjalankan lebih banyak beban kerja pada perangkat keras yang lebih sedikit daripada yang dapat dilakukan dengan mesin virtual.
Atau Devops : Salah satu target ideal adalah memanfaatkan Docker dengan segera dari alat penerapan CI / CD, mengompilasi aplikasi dan segera membuat image yang digunakan untuk pengembangan, CI, prod, dll. Container sering kali mengurangi waktu untuk memindahkan aplikasi dari kode check-in hingga tersedia untuk pengujian, membuat pengembang lebih efisien. Dan jika dirancang dengan benar, gambar yang sama yang telah diuji dan disetujui oleh pengembang dan alat CI dapat digunakan dalam produksi. Karena gambar tersebut mencakup semua dependensi aplikasi, risiko kerusakan dalam produksi yang bekerja dalam pengembangan berkurang secara signifikan.
Skalabilitas : Satu manfaat utama terakhir dari container yang akan saya sebutkan adalah bahwa container dirancang untuk skalabilitas horizontal. Saat Anda memiliki aplikasi stateless dengan beban berat, penampung jauh lebih mudah dan lebih cepat untuk diskalakan karena ukuran gambarnya yang lebih kecil dan overhead yang berkurang. Karena alasan ini, Anda melihat kontainer digunakan oleh banyak perusahaan berbasis web yang lebih besar, seperti Google dan Netflix.