Docker sangat populer sekarang, dan teknologi kontainer tampaknya mahakuasa, tetapi ini sebenarnya adalah kesalahpahaman. Jangan terpesona oleh gelembung hype. Artikel ini membuang hype dan secara rasional mencantumkan lima kesalahpahaman saat ini dari Docker dari perspektif pemrogram Java untuk membantu Anda lebih memahami keuntungan dan masalah Docker.
Mengesampingkan hype dari media dan produsen, bagaimana kita bisa menggunakan Docker lebih baik dan lebih rasional?
Docker telah menarik banyak perhatian baru -baru ini, dan alasannya jelas. Bagaimana berhasil mengirimkan kode selalu mengganggu semua orang. Teknologi wadah tradisional kacau di antara banyak kebutuhan dan templat. Docker dapat membuat wadah secara sederhana dan berulang kali. Menggunakan Docker memungkinkan pengiriman kode yang lebih cepat dan lebih alami daripada wadah lainnya. Duang, Docker populer! Ada juga beberapa kesalahpahaman dan kesalahpahaman. Jangan percaya orang lain untuk mengatakan Docker mudah digunakan atau tidak. Berpikir tentang Docker secara rasional dan komprehensif sendiri akan membantu Anda benar -benar memahami apakah Anda benar -benar membutuhkannya.
Artikel ini mencantumkan lima kesalahan pembacaan Docker utama dari perspektif Java. Tapi pertama -tama perkenalkan beberapa pengetahuan latar belakang. Untuk lebih memahami Docker, kami berkonsultasi dengan Avishai Ish-Shalom of Fewbytes, yang memiliki pengalaman Docker yang luas dan juga penyelenggara Konferensi DevOps Days. Kami telah mendaftarkan kesalahpahaman ini dengannya.
Kesalahpahaman utama
1. Docker adalah mesin virtual yang ringan
Ini adalah kesalahpahaman utama ketika Anda pemula Docker. Kesalahpahaman ini dapat dimengerti, Docker memang terlihat seperti mesin virtual. Beberapa orang bahkan membandingkan perbedaan antara Docker dan mesin virtual di situs web Docker. Namun, Docker sebenarnya bukan mesin virtual yang ringan, tetapi wadah Linux yang lebih baik (LXC). Docker dan mesin virtual sangat berbeda. Jika Anda menggunakan wadah Docker sebagai mesin virtual ringan, Anda akan menghadapi banyak masalah.
Sebelum menggunakan Docker, Anda harus memahami bahwa ada banyak perbedaan penting antara wadah Docker dan mesin virtual.
Isolasi Sumber Daya: Docker tidak dapat mencapai tingkat isolasi sumber daya yang dapat disediakan oleh mesin virtual. Sumber daya mesin virtual sangat terisolasi, dan Docker perlu berbagi beberapa sumber daya sejak awal. Sumber daya ini tidak dapat diisolasi dan dilindungi oleh Docker, seperti cache halaman dan kumpulan entropi kernel. (Catatan: Kolam entropi kernel menarik, mengumpulkan dan menyimpan bit acak yang dihasilkan oleh operasi sistem. Mesin akan menggunakan kumpulan ini ketika perlu diacak, seperti yang terkait dengan kata sandi.) Jika wadah Docker menempati sumber daya yang dibagikan ini, proses lain hanya dapat menunggu sebelum sumber daya ini dilepaskan.
Overhead: Kebanyakan orang tahu bahwa CPU dan RAM dari mesin virtual dapat memberikan kinerja seperti mesin fisik, tetapi ada banyak overhead IO tambahan. Karena OS tamu mesin virtual ditinggalkan, paket Docker lebih kecil dan membutuhkan lebih sedikit overhead penyimpanan daripada mesin virtual. Tetapi ini tidak berarti bahwa Docker tidak memiliki masalah overhead. Wadah Docker masih perlu memperhatikan overhead IO, tetapi mereka tidak seserius mesin virtual.
Penggunaan kernel: Wadah Docker dan mesin virtual sangat berbeda dalam penggunaan kernel. Setiap mesin virtual menggunakan satu kernel. Wadah Docker berbagi kernel di antara semua wadah. Kernel bersama membawa beberapa keuntungan efisiensi, tetapi dengan mengorbankan ketersediaan tinggi dan redundansi. Jika crash kernel terjadi di mesin virtual, hanya mesin virtual pada kernel ini yang akan terpengaruh. Jika kernel wadah Docker macet, semua wadah akan terpengaruh.
2. Docker membuat aplikasi dapat diukur
Karena Docker dapat menggunakan kode di beberapa server dalam waktu yang sangat singkat, tentu saja beberapa orang akan berpikir bahwa Docker dapat membuat aplikasi itu sendiri dapat diukur. Sayangnya, ini salah. Kode adalah landasan aplikasi, dan Docker tidak menulis ulang kode. Skalabilitas aplikasi masih tergantung pada programmer. Menggunakan Docker tidak secara otomatis membuat kode Anda mudah dikurangi, itu hanya membuatnya lebih mudah untuk digunakan di seluruh server.
3. Docker banyak digunakan di lingkungan produksi
Karena Docker sedang berjalan lancar, banyak orang percaya bahwa Docker dapat digunakan dalam skala besar di lingkungan produksi. Bahkan, ini tidak benar. Perhatikan bahwa Docker masih merupakan teknologi yang sangat baru, tidak dewasa dan terus bertambah, yang berarti masih ada banyak bug dan fitur yang menjengkelkan yang harus ditingkatkan. Memang benar bahwa Anda tertarik pada teknologi baru, tetapi yang terbaik adalah mengetahui skenario penggunaan yang benar dan apa yang perlu diperhatikan. Sekarang, Docker mudah diterapkan pada lingkungan pengembangan. Menggunakan Docker dapat dengan mudah menciptakan berbagai lingkungan (setidaknya, itu memberi orang perasaan bahwa mereka dapat menciptakan lingkungan yang berbeda), yang sangat berguna untuk pengembangan.
Di lingkungan produksi, ketidakdewasaan dan ketidaksempurnaan Docker juga membatasi skenario penggunaan. Misalnya, Docker tidak secara langsung mendukung pemantauan jaringan dan sumber daya untuk beberapa mesin, yang membuatnya hampir tidak mungkin digunakan di lingkungan produksi. Tentu saja, ada banyak bidang potensial, seperti secara langsung menggunakan paket yang sama dari lingkungan pengembangan ke lingkungan produksi. Ada juga beberapa fitur runtime Docker yang juga berguna untuk lingkungan produksi. Tetapi secara umum, di lingkungan produksi, saat ini tidak ada lebih banyak keuntungan daripada keuntungan. Ini tidak berarti bahwa itu tidak dapat berhasil diterapkan pada lingkungan produksi, tetapi sekarang tidak dapat diharapkan untuk matang dan sempurna sekaligus.
4. Docker adalah Cross-OS
Kesalahpahaman lain adalah bahwa Docker bekerja pada sistem operasi dan lingkungan apa pun. Ini mungkin berasal dari analogi kontainer untuk memuat dan membongkar barang, tetapi hubungan antara perangkat lunak dan sistem operasi tidak sesederhana dan langsung seperti posisi kapal.
Faktanya, Docker hanyalah sebuah teknologi di Linux. Selain itu, Docker mengandalkan fitur kernel tertentu dan harus memiliki versi terbaru dari kernel. Berdasarkan perbedaan antara OS yang berbeda, jika Anda tidak menggunakan fitur umum terendah di seluruh OS, Anda akan mengalami banyak masalah yang merepotkan. Masalah -masalah ini mungkin hanya memiliki insiden 1%, tetapi ketika Anda menggunakan beberapa server, 1% juga berakibat fatal.
Meskipun Docker hanya berjalan di Linux, itu juga dapat digunakan pada OS X atau Windows. Menggunakan Boot2Docker akan menjalankan mesin virtual Linux pada OS X atau mesin Windows, sehingga Docker dapat berjalan di mesin virtual ini.
5. Docker Meningkatkan Keamanan Aplikasi
Ini juga merupakan kesalahpahaman bahwa Docker dapat meningkatkan keamanan kode dan proses pengiriman. Ini juga perbedaan antara wadah nyata dan wadah pada perangkat lunak. Docker adalah teknologi kontainerisasi yang menambahkan metode orkestrasi. Namun, wadah Linux memiliki beberapa kerentanan keamanan yang mungkin diserang. Docker tidak menambahkan lapisan keamanan atau tambalan ke kerentanan ini. Ini bukan kemeja celana panjang yang dapat melindungi aplikasi.
Dari perspektif Java
Beberapa pengembang Java sudah mulai menggunakan Docker. Beberapa fitur Docker memudahkan kita untuk membangun konteks yang dapat diskalakan. Tidak seperti Uber-Jar, Docker dapat membantu Anda mengemas semua dependensi Anda (termasuk JVM) ke dalam gambar yang siap dilepaskan. Ini juga merupakan hal yang paling menarik tentang Docker untuk pengembang. Namun, ini juga akan membawa beberapa bahaya tersembunyi. Secara umum, programmer perlu memantau dengan cara dan kode yang berbeda secara interaktif, men -debug, menghubungkannya, menyetelnya ... jika Anda menggunakan Docker, ini akan membutuhkan pekerjaan tambahan.
Misalnya, kami ingin menggunakan JConsole, yang bergantung pada fungsi JMX, karena JMX membutuhkan jaringan untuk menggunakan RMI. Tidak terlalu langsung jika Anda menggunakan Docker, dan Anda memerlukan beberapa keterampilan untuk membuka port yang diperlukan. Kami awalnya menemukan bahwa masalahnya adalah ketika kami ingin membangun aplikasi Docker untuk Takipi, kami harus menjalankan program latar belakang di luar JVM dalam wadah. Solusi terperinci di GitHub.
Masalah serius lainnya adalah bahwa penyetelan kinerja wadah Docker cukup sulit. Saat menggunakan wadah, Anda tidak tahu berapa banyak memori yang akan dialokasikan oleh setiap wadah. Jika Anda memiliki 20 wadah, memori akan dialokasikan untuk mereka dengan cara Anda tidak pasti. Jika Anda berencana untuk menyesuaikan tumpukan dengan parameter -xmx, sulit karena pemrosesan JVM dalam wadah Docker tergantung pada kemampuan untuk secara otomatis mendapatkan memori yang dialokasikan ke wadah. Tuning kinerja hampir tidak mungkin jika Anda tidak tahu berapa banyak memori yang dialokasikan.
sebagai kesimpulan
Docker adalah teknologi yang sangat menarik dan memiliki beberapa skenario penggunaan yang nyata dan efektif. Sebagai teknologi yang muncul, juga membutuhkan banyak waktu untuk menyelesaikan fitur yang hilang dan bug yang dikenal. Namun, memang ada banyak hype di bidang ini sekarang. Tapi ingat, hype tidak berhasil ~
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!