Apa itu Docker? Percikan untuk revolusi kontena

Docker adalah platform perisian untuk membina aplikasi berdasarkan kontena - persekitaran pelaksanaan kecil dan ringan yang menggunakan kernel sistem operasi bersama tetapi sebaliknya dijalankan secara terpisah antara satu sama lain. Walaupun kontena sebagai konsep telah ada selama beberapa waktu, Docker, sebuah projek sumber terbuka yang dilancarkan pada tahun 2013, membantu mempopularkan teknologi, dan telah membantu mendorong tren ke arah penyediaan kontena dan perkhidmatan mikro  dalam pengembangan perisian yang telah dikenal sebagai cloud-native pembangunan.

Apakah bekas itu?

Salah satu tujuan pengembangan perisian moden adalah memastikan aplikasi pada host atau kluster yang sama terasing antara satu sama lain sehingga tidak mengganggu operasi atau penyelenggaraan satu sama lain. Ini sukar, terima kasih kepada pakej, perpustakaan, dan komponen perisian lain yang diperlukan untuk mereka jalankan. Salah satu penyelesaian untuk masalah ini adalah mesin maya, yang menjadikan aplikasi pada perkakasan yang sama terpisah sepenuhnya, dan mengurangkan konflik antara komponen perisian dan persaingan untuk sumber perkakasan minimum. Tetapi mesin maya sangat besar - masing-masing memerlukan OS sendiri, begitu juga ukuran gigabait - dan sukar untuk dijaga dan ditingkatkan.

Sebaliknya, kontena mengasingkan persekitaran pelaksanaan aplikasi antara satu sama lain, tetapi berkongsi kernel OS yang mendasari. Mereka biasanya diukur dalam megabait, menggunakan sumber yang jauh lebih sedikit daripada VM, dan memulakan dengan segera. Mereka boleh dikemas dengan lebih padat pada perkakasan yang sama dan berputar ke atas dan ke bawah secara beramai - ramai dengan usaha dan overhead yang lebih sedikit. Kontena menyediakan mekanisme yang sangat cekap dan sangat terperinci untuk menggabungkan komponen perisian ke dalam jenis aplikasi dan tumpukan perkhidmatan yang diperlukan dalam perusahaan moden, dan untuk memastikan komponen perisian tersebut diperbaharui dan dikekalkan.

Docker

Apa itu Docker?

Docker adalah projek sumber terbuka yang memudahkan pembuatan kontena dan aplikasi berasaskan kontena. Awalnya dibina untuk Linux, Docker kini berjalan pada Windows dan MacOS juga. Untuk memahami bagaimana Docker berfungsi, mari kita lihat beberapa komponen yang akan anda gunakan untuk membuat aplikasi Docker-containerized.

Dockerfile

Setiap bekas Docker dimulakan dengan Dockerfile . Dockerfile adalah fail teks yang ditulis dalam sintaks yang mudah difahami yang merangkumi arahan untuk membina gambar Docker (lebih banyak lagi dalam sekejap). Dockerfile menentukan sistem operasi yang akan mendasari wadah, bersama dengan bahasa, pemboleh ubah persekitaran, lokasi fail, port rangkaian, dan komponen lain yang diperlukannya - dan, tentu saja, apa yang sebenarnya akan dilakukan oleh wadah setelah kita menjalankannya.

Paige Niedringhaus di ITNext mempunyai perincian sintaks Dockerfile yang baik.

Gambar dok

Setelah anda menulis Dockerfile, anda memanggil buildutiliti Docker untuk membuat gambar berdasarkan Dockerfile itu. Walaupun Dockerfile adalah sekumpulan petunjuk yang memberitahu buildbagaimana membuat gambar, gambar Docker adalah fail mudah alih yang mengandungi spesifikasi komponen perisian yang akan dijalankan dan bagaimana. Oleh kerana Dockerfile mungkin akan menyertakan arahan mengenai pengambilan beberapa pakej perisian dari repositori dalam talian, anda harus berhati-hati untuk menentukan secara jelas versi yang betul, jika tidak, Dockerfile anda mungkin menghasilkan gambar yang tidak konsisten bergantung pada masa ia dipanggil. Tetapi setelah gambar dibuat, ia statik. Codefresh memberikan gambaran bagaimana membina gambar dengan lebih terperinci.

Lari dok

runUtiliti Docker adalah perintah yang sebenarnya melancarkan kontena. Setiap bekas adalah contoh gambar. Kontena dirancang untuk sementara dan sementara, tetapi boleh dihentikan dan dimulakan semula, yang melancarkan kontena ke keadaan yang sama seperti ketika ia dihentikan. Selanjutnya, beberapa contoh kontena gambar yang sama dapat dijalankan serentak (selagi setiap bekas mempunyai nama yang unik). Ulasan Kod mempunyai perincian pilihan yang berbeza untuk runperintah, untuk memberi anda gambaran tentang cara kerjanya.

Hab Docker

Walaupun membina kontena itu mudah, jangan mendapat idea bahawa anda perlu membina setiap gambar anda dari awal. Docker Hub adalah repositori SaaS untuk berkongsi dan menguruskan kontena, di mana anda akan menemui gambar Docker rasmi dari projek sumber terbuka dan vendor perisian dan gambar tidak rasmi dari masyarakat umum. Anda boleh memuat turun gambar bekas yang mengandungi kod berguna, atau memuat naik sendiri, membagikannya secara terbuka, atau menjadikannya peribadi sebagai gantinya. Anda juga boleh membuat pendaftaran Docker tempatan jika anda mahu. (Docker Hub pada masa lalu mempunyai masalah dengan gambar yang diunggah dengan backdoor yang terpasang di dalamnya.)

Enjin Docker

Docker Engine adalah teras Docker, teknologi pelayan pelanggan yang mendasari yang membuat dan menjalankan kontena. Secara umum, apabila seseorang mengatakan Docker secara umum dan tidak bercakap mengenai syarikat atau keseluruhan projek, itu bermaksud Docker Engine. Terdapat dua versi Docker Engine yang berbeza: Docker Engine Enterprise dan Docker Engine Community.

Edisi Komuniti Docker

Docker melancarkan Edisi Perusahaan pada tahun 2017, tetapi tawaran asalnya, dinamakan semula sebagai Docker Community Edition, tetap menjadi sumber terbuka dan percuma, dan tidak kehilangan sebarang ciri dalam prosesnya. Sebagai gantinya, Edisi Perusahaan, yang berharga $ 1,500 setiap simpul setiap tahun, menambah ciri pengurusan lanjutan termasuk kawalan untuk pengelompokan dan pengurusan gambar, dan pemantauan kerentanan. Blog BoxBoat mempunyai ikhtisar perbezaan antara edisi.

Bagaimana Docker menakluki dunia kontena

Idea bahawa proses tertentu dapat dijalankan dengan tahap pengasingan dari persekitaran operasinya yang lain telah dimasukkan ke dalam sistem operasi Unix seperti BSD dan Solaris selama beberapa dekad. Teknologi bekas Linux yang asli, LXC, adalah kaedah virtualisasi peringkat OS untuk menjalankan beberapa sistem Linux terpencil pada satu hos. LXC dimungkinkan oleh dua ciri Linux: ruang nama, yang membungkus sekumpulan sumber sistem dan membawanya ke proses untuk membuatnya kelihatan seperti mereka berdedikasi untuk proses itu; dan kumpulan, yang mengatur pengasingan dan penggunaan sumber sistem, seperti CPU dan memori, untuk sekumpulan proses.

Kontena mencabut aplikasi dari sistem operasi, yang bermaksud bahawa pengguna dapat memiliki sistem operasi Linux yang bersih dan minimum dan menjalankan semua yang lain dalam satu atau lebih bekas yang terpencil. Dan kerana sistem operasi diabstrak dari kontena, anda dapat memindahkan kontena ke pelayan Linux mana pun yang menyokong persekitaran waktu operasi kontena.

Docker memperkenalkan beberapa perubahan ketara pada LXC yang menjadikan kontena lebih mudah alih dan fleksibel untuk digunakan. Dengan menggunakan kontena Docker, anda dapat menyebarkan, meniru, memindahkan, dan menyandarkan beban kerja dengan lebih cepat dan mudah daripada yang anda dapat menggunakan mesin maya. Docker memberikan fleksibiliti seperti awan untuk infrastruktur yang mampu menjalankan kontena. Alat gambar kontena Docker juga merupakan kemajuan dari LXC, yang memungkinkan pembangun untuk membina perpustakaan gambar, menyusun aplikasi dari beberapa gambar, dan melancarkan kontena dan aplikasi tersebut di infrastruktur tempatan atau jauh.

Docker Compose, Docker Swarm, dan Kubernetes

Docker juga menjadikannya lebih mudah untuk mengkoordinasikan tingkah laku antara bekas, dan dengan itu membina timbunan aplikasi dengan memasang bekas bersama. Docker Compose dibuat oleh Docker untuk mempermudah proses pengembangan dan pengujian aplikasi berbilang kontena. Ini adalah alat baris perintah, yang mengingatkan klien Docker, yang mengambil fail penerangan yang diformat khas untuk mengumpulkan aplikasi dari beberapa bekas dan menjalankannya secara konsert pada satu hos. (Lihat tutorial Mengarang Docker untuk mengetahui lebih lanjut.)

Versi tingkah laku yang lebih maju - apa yang disebut orkestrasi kontena - ditawarkan oleh produk lain, seperti Docker Swarm dan Kubernetes. Tetapi Docker memberikan asasnya. Walaupun Swarm berkembang dari projek Docker, Kubernetes telah menjadi platform pilihan orkestrasi de facto Docker.

Kelebihan Docker

Docker container menyediakan cara untuk membina aplikasi perusahaan dan lini perniagaan yang lebih mudah dipasang, diselenggara, dan bergerak daripada rakan-rakan konvensional mereka. 

Bekas dok membolehkan pengasingan dan pendikit

Bekas dok menyimpan aplikasi yang diasingkan bukan sahaja antara satu sama lain, tetapi dari sistem yang mendasari. Ini bukan hanya membuat tumpukan perisian yang lebih bersih, tetapi lebih memudahkan untuk menentukan bagaimana aplikasi yang dikemas dengan menggunakan sumber daya sistem — CPU, GPU, memori, I / O, rangkaian, dan sebagainya. Ini juga memudahkan untuk memastikan bahawa data dan kod disimpan terpisah. (Lihat "Wadah Docker tidak bernegara dan tidak berubah," di bawah.)

Bekas dok membolehkan mudah alih

Bekas Docker berjalan di mana-mana mesin yang menyokong persekitaran waktu operasi kontena. Aplikasi tidak harus terikat dengan sistem operasi host, jadi persekitaran aplikasi dan persekitaran operasi yang mendasari dapat tetap bersih dan minimum.

Sebagai contoh, wadah MySQL untuk Linux akan berjalan pada kebanyakan sistem Linux yang menyokong kontena. Semua kebergantungan untuk aplikasi biasanya dihantar dalam bekas yang sama.

Aplikasi berasaskan kontainer dapat dipindahkan dengan mudah dari sistem on-prem ke persekitaran cloud atau dari komputer riba pemaju ke pelayan, selagi sistem sasaran menyokong Docker dan mana-mana alat pihak ketiga yang mungkin digunakan dengannya, seperti Kubernetes (lihat "Wadah Docker memudahkan orkestrasi dan penskalaan," di bawah).

Biasanya, gambar kontena Docker mesti dibina untuk platform tertentu. Bekas Windows, misalnya, tidak akan berjalan di Linux dan sebaliknya. Sebelumnya, salah satu cara mengatasi batasan ini adalah dengan melancarkan mesin maya yang menjalankan sistem operasi yang diperlukan, dan menjalankan wadah di mesin maya.

Walau bagaimanapun, pasukan Docker sejak itu telah membuat penyelesaian yang lebih elegan, yang disebut  manifes , yang membolehkan gambar untuk beberapa sistem operasi dikemas secara bersebelahan dalam gambar yang sama. Manifestasi masih dianggap eksperimental, tetapi mereka mengisyaratkan bagaimana kontena dapat menjadi penyelesaian aplikasi lintas platform dan juga persekitaran silang. 

Bekas dok membolehkan komposisi

Sebilangan besar aplikasi perniagaan terdiri daripada beberapa komponen terpisah yang disusun dalam timbunan - pelayan web, pangkalan data, cache dalam memori. Bekas memungkinkan untuk menyusun kepingan ini menjadi unit berfungsi dengan bahagian yang mudah diubah. Setiap bahagian disediakan oleh bekas yang berbeza dan dapat diselenggara, dikemas kini, ditukar, dan diubah secara bebas daripada yang lain.

Ini pada dasarnya adalah model reka bentuk aplikasi perkhidmatan mikro. Dengan membahagikan fungsi aplikasi menjadi perkhidmatan mandiri yang terpisah, model perkhidmatan mikro menawarkan penawar untuk memperlahankan proses pembangunan tradisional dan aplikasi monolitik yang tidak fleksibel. Bekas ringan dan mudah alih menjadikannya lebih mudah untuk membina dan mengekalkan aplikasi berdasarkan perkhidmatan mikro.

Bekas dok memudahkan penyusunan dan penskalaan

Oleh kerana kontainer ringan dan membebankan sedikit overhead, mungkin melancarkan banyak lagi pada sistem tertentu. Tetapi kontainer juga dapat digunakan untuk meningkatkan aplikasi di sekumpulan sistem, dan untuk meningkatkan layanan ke atas atau ke bawah untuk memenuhi lonjakan permintaan atau untuk menghemat sumber daya.

Versi alat kelas paling banyak untuk penyebaran, pengurusan, dan penskalaan kontainer disediakan melalui projek pihak ketiga. Yang utama adalah Kubernetes Google, sistem untuk mengotomatisasi bagaimana kontainer dikerahkan dan diperkecilkan, tetapi juga bagaimana ia dihubungkan bersama, seimbang, dan dikendalikan. Kubernetes juga menyediakan cara untuk membuat dan menggunakan semula definisi aplikasi multi-container atau "Helm chart", sehingga tumpukan aplikasi yang kompleks dapat dibuat dan dikelola berdasarkan permintaan.

Docker juga merangkumi sistem orkestrasi bawaannya sendiri, mod Swarm, yang masih digunakan untuk kes-kes yang kurang menuntut. Yang mengatakan, Kubernetes telah menjadi pilihan lalai; sebenarnya, Kubernetes digabungkan dengan Docker Enterprise Edition.

Peringatan Docker

Bekas menyelesaikan banyak masalah, tetapi ia tidak dapat disembuhkan. Sebilangan kekurangannya adalah dari reka bentuk, sementara yang lain adalah hasil sampingan dari reka bentuk mereka.

Bekas dok bukan mesin maya

Kesalahan konseptual yang paling biasa dilakukan orang dengan bekas adalah menyamakannya dengan mesin maya. Walau bagaimanapun, kerana kontena dan mesin maya menggunakan mekanisme pengasingan yang berbeza, mereka mempunyai kelebihan dan kekurangan yang berbeza.

Mesin maya memberikan tahap pengasingan yang tinggi untuk proses, kerana mereka menjalankan sistem operasi mereka sendiri. Sistem operasi itu tidak semestinya sama dengan yang dijalankan di host. Mesin maya Windows boleh dijalankan pada hypervisor Linux dan sebaliknya.

Sebaliknya, kontena menggunakan bahagian terkawal dari sumber sistem operasi hos; banyak aplikasi berkongsi kernel OS yang sama, dengan cara yang sangat terurus. Akibatnya, aplikasi kontena tidak diasingkan secara menyeluruh seperti mesin maya, tetapi aplikasi ini memberikan pengasingan yang cukup untuk sebahagian besar beban kerja.

Bekas dok tidak memberikan kelajuan logam kosong