Saya pernah mendengar tentang Docker beberapa hari yang lalu dan ingin menyeberanginya.
Tapi nyatanya, saya tidak tahu apa tujuan dari "wadah" ini?
Apa itu wadah?
Bisakah itu menggantikan mesin virtual yang didedikasikan untuk pengembangan?
Apa tujuan, dengan kata sederhana, menggunakan Docker di perusahaan? Keuntungan utama?
Jawaban:
VM: Menggunakan perangkat lunak VM, misalnya, Ubuntu dapat diinstal di dalam Windows. Dan mereka berdua akan lari pada saat bersamaan. Ini seperti membangun PC, dengan komponen intinya seperti CPU, RAM, Disk, Kartu Jaringan dll, di dalam sistem operasi dan merakitnya agar berfungsi seolah-olah itu adalah PC nyata. Dengan cara ini, PC virtual menjadi "tamu" di dalam PC sebenarnya yang dengan sistem operasinya, yang disebut host.
Penampung: Ini sama seperti di atas tetapi alih-alih menggunakan seluruh sistem operasi, ia memotong komponen "yang tidak perlu" dari OS virtual untuk membuat versi minimalnya. Ini mengarah pada pembuatan LXC (Linux Containers). Ini lebih cepat dari Mesin VM.
Docker: Kontainer buruh pelabuhan, tidak seperti mesin virtual dan kontainer, tidak memerlukan atau menyertakan sistem operasi terpisah. Sebaliknya, ini bergantung pada fungsionalitas kernel Linux dan menggunakan isolasi sumber daya.
Tujuan Docker: Fokus utamanya adalah untuk mengotomatiskan penerapan aplikasi di dalam wadah perangkat lunak dan otomatisasi virtualisasi tingkat sistem operasi di Linux. Ini lebih ringan dari Container standar dan boot dalam hitungan detik.
(Perhatikan bahwa tidak ada OS Tamu yang diperlukan dalam kasus Docker)
sumber
[Catatan, jawaban ini berfokus pada wadah Linux dan mungkin tidak sepenuhnya berlaku untuk sistem operasi lain. ]
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:
/
di penampung akan berbeda dengan/
di 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.
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.
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.
sumber
Pertanyaan yang sama muncul di kepala saya beberapa hari yang lalu dan apa yang saya temukan setelah membahasnya, mari kita pahami dengan kata-kata yang sangat sederhana.
Mari kita ambil contoh bahwa kita sedang mengembangkan aplikasi menggunakan layanan nodeJs, MongoDB, Redis, RabbitMQ dll [Anda dapat memikirkan layanan lainnya].
Sekarang kita menghadapi hal-hal berikut ini sebagai masalah dalam pengembangan aplikasi dan proses pengiriman jika kita melupakan keberadaan buruh pelabuhan atau alternatif lain dari aplikasi containerizing.
Kompatibilitas layanan (nodeJs, mongoDB, Redis, RabbitMQ dll.) Dengan OS (bahkan setelah menemukan versi yang kompatibel dengan OS, jika terjadi sesuatu yang tidak terduga terkait dengan versi, maka kita perlu melihat kembali kompatibilitas tersebut dan memperbaikinya).
Jika dua komponen sistem memerlukan pustaka / ketergantungan dengan versi berbeda dalam aplikasi di OS (Itu perlu relook setiap kali jika terjadi perilaku aplikasi yang tidak terduga karena masalah versi pustaka dan ketergantungan).
Yang terpenting, Jika orang baru bergabung dengan tim, kami merasa sangat sulit untuk mengatur lingkungan baru, orang harus mengikuti serangkaian besar instruksi dan menjalankan ratusan perintah untuk akhirnya mengatur lingkungan Dan itu membutuhkan waktu dan usaha.
Orang-orang harus memastikan bahwa mereka menggunakan versi OS yang benar dan memeriksa kompatibilitas layanan dengan OS. Dan setiap pengembang harus mengikuti ini setiap kali saat menyiapkan.
Kami juga memiliki lingkungan yang berbeda seperti dev, pengujian, dan produksi . Jika Satu pengembang merasa nyaman menggunakan satu OS dan lainnya merasa nyaman dengan OS lain Dan dalam hal ini, kami tidak dapat menjamin bahwa aplikasi kami akan berperilaku dengan cara yang sama dalam dua situasi berbeda ini .
Semua ini membuat hidup kita sulit dalam proses pengembangan , pengujian dan pengiriman aplikasi.
Jadi kami membutuhkan sesuatu yang menangani masalah kompatibilitas dan memungkinkan kami membuat perubahan dan modifikasi pada komponen sistem apa pun tanpa memengaruhi komponen lain.
Bagaimana buruh pelabuhan memecahkan masalah di atas-
Kita dapat menjalankan setiap komponen layanan (nodeJs, MongoDB, Redis, RabbitMQ) dalam wadah yang berbeda dengan dependensi dan pustaka sendiri di OS yang sama tetapi dengan lingkungan yang berbeda.
Kita hanya perlu menjalankan konfigurasi buruh pelabuhan sekali saja sehingga semua pengembang tim kita dapat memulai dengan perintah jalankan buruh pelabuhan sederhana, kita telah menghemat banyak waktu dan tenaga di sini :) .
Saya harap ini bisa membantu.
sumber
Izinkan saya mencoba memberikan jawaban sesederhana mungkin:
Apa itu wadah?
Sederhananya: paket yang berisi perangkat lunak . Lebih khusus lagi, aplikasi dan semua dependensinya digabungkan. Lingkungan aplikasi reguler dan non-docker terhubung langsung ke OS, sedangkan container Docker adalah lapisan abstraksi OS.
Dan penampung berbeda dari gambar karena penampung adalah contoh runtime dari sebuah gambar - mirip dengan bagaimana objek adalah contoh runtime kelas jika Anda terbiasa dengan OOP.
Container VM dan Docker adalah teknik virtualisasi, yang menyediakan abstraksi di atas infrastruktur sistem.
VM menjalankan sistem operasi "tamu" penuh dengan akses virtual ke sumber daya host melalui hypervisor. Ini berarti bahwa VM sering menyediakan lingkungan dengan lebih banyak sumber daya daripada yang sebenarnya dibutuhkan. Secara umum, VM menyediakan lingkungan dengan lebih banyak sumber daya daripada yang dibutuhkan sebagian besar aplikasi. Oleh karena itu, wadah adalah teknik yang lebih ringan. Keduanya memecahkan masalah yang berbeda.
Kontainerisasi berjalan seiring dengan layanan mikro. Layanan yang lebih kecil yang membentuk aplikasi yang lebih besar sering kali diuji dan dijalankan di kontainer Docker. Ini membuat pengujian berkelanjutan lebih mudah.
Selain itu, karena container Docker bersifat read-only, mereka menerapkan prinsip utama DevOps: layanan produksi harus tetap tidak berubah
Beberapa manfaat umum menggunakannya:
sumber