Apa itu Docker? Percikan untuk revolusi kontainer

Docker adalah platform perangkat lunak untuk membangun aplikasi berdasarkan kontainer - lingkungan eksekusi yang kecil dan ringan yang menggunakan kernel sistem operasi bersama tetapi berjalan secara terpisah satu sama lain. Sementara kontainer sebagai sebuah konsep telah ada selama beberapa waktu, Docker, sebuah proyek open source yang diluncurkan pada tahun 2013, membantu mempopulerkan teknologi, dan telah membantu mendorong tren menuju containerization dan layanan mikro  dalam pengembangan perangkat lunak yang kemudian dikenal sebagai cloud-native. pengembangan.

Apakah wadah itu?

Salah satu tujuan pengembangan perangkat lunak modern adalah untuk menjaga aplikasi pada host atau cluster yang sama diisolasi satu sama lain sehingga tidak terlalu mengganggu operasi atau pemeliharaan satu sama lain. Ini bisa jadi sulit, berkat paket, pustaka, dan komponen perangkat lunak lain yang diperlukan untuk menjalankannya. Satu solusi untuk masalah ini adalah mesin virtual, yang menjaga aplikasi pada perangkat keras yang sama sepenuhnya terpisah, dan mengurangi konflik antar komponen perangkat lunak dan persaingan untuk sumber daya perangkat keras seminimal mungkin. Namun mesin virtual berukuran besar — ​​masing-masing memerlukan OS-nya sendiri, begitu juga dengan ukuran gigabyte — dan sulit untuk dipelihara dan diupgrade.

Kontainer , sebaliknya, mengisolasi lingkungan eksekusi aplikasi satu sama lain, tetapi berbagi kernel OS yang mendasarinya. Mereka biasanya diukur dalam megabyte, menggunakan sumber daya yang jauh lebih sedikit daripada VM, dan segera mulai. Mereka dapat dikemas jauh lebih padat pada perangkat keras yang sama dan berputar ke atas dan ke bawah secara massal dengan tenaga dan overhead yang jauh lebih sedikit. Penampung menyediakan mekanisme yang sangat efisien dan sangat terperinci untuk menggabungkan komponen perangkat lunak ke dalam jenis tumpukan aplikasi dan layanan yang diperlukan dalam perusahaan modern, dan untuk menjaga agar komponen perangkat lunak tersebut diperbarui dan dipelihara.

Buruh pelabuhan

Apa itu Docker?

Docker adalah proyek open source yang memudahkan pembuatan container dan aplikasi berbasis container. Awalnya dibuat untuk Linux, Docker sekarang berjalan di Windows dan MacOS juga. Untuk memahami cara kerja Docker, mari kita lihat beberapa komponen yang akan Anda gunakan untuk membuat aplikasi dalam container Docker.

Dockerfile

Setiap kontainer Docker dimulai dengan Dockerfile . Dockerfile adalah file teks yang ditulis dalam sintaks yang mudah dipahami yang menyertakan instruksi untuk membangun image Docker (lebih lanjut tentang itu sebentar lagi). Dockerfile menentukan sistem operasi yang akan mendasari container, bersama dengan bahasa, variabel lingkungan, lokasi file, port jaringan, dan komponen lain yang dibutuhkannya — dan, tentu saja, apa yang sebenarnya akan dilakukan container setelah kita menjalankannya.

Paige Niedringhaus di ITNext memiliki rincian sintaks yang baik dari Dockerfile.

Gambar Docker

Setelah Anda menulis Dockerfile, Anda memanggil buildutilitas Docker untuk membuat image berdasarkan Dockerfile tersebut. Sedangkan Dockerfile adalah sekumpulan instruksi yang memberi tahu buildcara membuat image, image Docker adalah file portabel yang berisi spesifikasi komponen perangkat lunak yang akan dijalankan container dan bagaimana caranya. Karena Dockerfile mungkin akan menyertakan instruksi tentang mengambil beberapa paket perangkat lunak dari repositori online, Anda harus berhati-hati untuk menentukan versi yang tepat secara eksplisit, atau Dockerfile Anda mungkin menghasilkan gambar yang tidak konsisten tergantung kapan itu dipanggil. Tapi begitu gambar dibuat, itu statis. Codefresh menawarkan gambaran tentang cara membuat gambar secara lebih detail.

Jalankan Docker

runUtilitas Docker adalah perintah yang benar-benar meluncurkan kontainer. Setiap wadah adalah turunan dari sebuah gambar. Penampung dirancang untuk menjadi sementara dan sementara, tetapi dapat dihentikan dan dimulai ulang, yang meluncurkan penampung ke dalam status yang sama seperti saat dihentikan. Lebih lanjut, beberapa contoh penampung dari gambar yang sama dapat dijalankan secara bersamaan (selama setiap penampung memiliki nama yang unik). Review Kode memiliki rincian besar dari opsi yang berbeda untuk runperintah, untuk memberi Anda gambaran tentang cara kerjanya.

Docker Hub

Meskipun membuat container itu mudah, jangan mengira bahwa Anda harus membuat setiap gambar dari awal. Docker Hub adalah tempat penyimpanan SaaS untuk berbagi dan mengelola kontainer, di mana Anda akan menemukan gambar Docker resmi dari proyek sumber terbuka dan vendor perangkat lunak dan gambar tidak resmi dari masyarakat umum. Anda dapat mendownload gambar container yang berisi kode berguna, atau mengupload gambar Anda sendiri, membagikannya secara terbuka, atau menjadikannya pribadi. Anda juga dapat membuat registri Docker lokal jika mau. (Docker Hub memiliki masalah di masa lalu dengan gambar yang diunggah dengan pintu belakang terpasang di dalamnya.)

Mesin Docker

Docker Engine adalah inti dari Docker, teknologi server-klien yang mendasari yang membuat dan menjalankan kontainer. Secara umum, ketika seseorang mengatakan Docker secara umum dan tidak berbicara tentang perusahaan atau keseluruhan proyek, yang mereka maksud adalah Mesin Docker. Ada dua versi berbeda dari Docker Engine yang ditawarkan: Docker Engine Enterprise dan Docker Engine Community.

Edisi Komunitas Docker

Docker merilis Edisi Perusahaan pada tahun 2017, tetapi penawaran aslinya, berganti nama menjadi Edisi Komunitas Docker, tetap open source dan gratis, dan tidak kehilangan fitur apa pun dalam prosesnya. Sebaliknya, Edisi Perusahaan, dengan biaya $ 1.500 per node per tahun, menambahkan fitur manajemen lanjutan termasuk kontrol untuk cluster dan manajemen gambar, dan pemantauan kerentanan. Blog BoxBoat memiliki ikhtisar tentang perbedaan antara edisi.

Bagaimana Docker menaklukkan dunia kontainer

Ide bahwa proses tertentu dapat dijalankan dengan beberapa tingkat isolasi dari lingkungan operasinya yang lain telah dibangun ke dalam sistem operasi Unix seperti BSD dan Solaris selama beberapa dekade. Teknologi container Linux asli, LXC, adalah metode virtualisasi tingkat OS untuk menjalankan beberapa sistem Linux yang terisolasi pada satu host. LXC dimungkinkan oleh dua fitur Linux: namespaces, yang membungkus sekumpulan sumber daya sistem dan menampilkannya ke sebuah proses agar terlihat seperti mereka didedikasikan untuk proses itu; dan cgroups, yang mengatur isolasi dan penggunaan sumber daya sistem, seperti CPU dan memori, untuk sekelompok proses.

Penampung memisahkan aplikasi dari sistem operasi, yang berarti bahwa pengguna dapat memiliki sistem operasi Linux yang bersih dan minimal dan menjalankan semua yang lain dalam satu atau beberapa penampung yang terisolasi. Dan karena sistem operasi dipisahkan dari container, Anda dapat memindahkan container di semua server Linux yang mendukung lingkungan runtime container.

Docker memperkenalkan beberapa perubahan signifikan pada LXC yang membuat kontainer lebih portabel dan fleksibel untuk digunakan. Menggunakan kontainer Docker, Anda dapat menerapkan, mereplikasi, memindahkan, dan mencadangkan beban kerja dengan lebih cepat dan mudah daripada yang dapat Anda lakukan menggunakan mesin virtual. Docker menghadirkan fleksibilitas seperti cloud ke infrastruktur apa pun yang mampu menjalankan kontainer. Alat gambar kontainer Docker juga merupakan kemajuan dari LXC, memungkinkan pengembang untuk membangun perpustakaan gambar, membuat aplikasi dari banyak gambar, dan meluncurkan kontainer dan aplikasi tersebut pada infrastruktur lokal atau jarak jauh.

Docker Compose, Docker Swarm, dan Kubernetes

Docker juga memudahkan untuk mengoordinasikan perilaku antar kontainer, dan dengan demikian membangun tumpukan aplikasi dengan memasang kontainer bersama-sama. Docker Compose dibuat oleh Docker untuk menyederhanakan proses pengembangan dan pengujian aplikasi multi-container. Ini adalah alat baris perintah, yang mengingatkan pada klien Docker, yang mengambil file deskriptor yang diformat khusus untuk merakit aplikasi dari beberapa kontainer dan menjalankannya secara bersamaan pada satu host. (Lihat tutorial Docker Compose untuk mempelajari lebih lanjut.)

Versi lebih lanjut dari perilaku ini — yang disebut orkestrasi container — ditawarkan oleh produk lain, seperti Docker Swarm dan Kubernetes. Tetapi Docker menyediakan dasar-dasarnya. Meskipun Swarm berkembang dari proyek Docker, Kubernetes telah menjadi platform orkestrasi Docker de facto pilihan.

Keunggulan Docker

Container Docker menyediakan cara untuk membangun aplikasi perusahaan dan lini bisnis yang lebih mudah untuk dirakit, dipelihara, dan dipindahkan daripada rekan konvensional mereka. 

Kontainer Docker memungkinkan isolasi dan pembatasan

Container Docker menjaga aplikasi tetap terisolasi tidak hanya dari satu sama lain, tetapi dari sistem yang mendasarinya. Hal ini tidak hanya membuat tumpukan perangkat lunak yang lebih bersih, tetapi juga memudahkan untuk menentukan bagaimana aplikasi dalam container menggunakan sumber daya sistem — CPU, GPU, memori, I / O, jaringan, dan sebagainya. Ini juga mempermudah untuk memastikan bahwa data dan kode disimpan terpisah. (Lihat “Kontainer Docker tidak memiliki kewarganegaraan dan tidak dapat diubah,” di bawah.)

Kontainer Docker memungkinkan portabilitas

Container Docker berjalan di mesin apa pun yang mendukung lingkungan runtime container. Aplikasi tidak harus terikat dengan sistem operasi host, sehingga lingkungan aplikasi dan lingkungan operasi yang mendasarinya dapat tetap bersih dan minimal.

Misalnya, container MySQL untuk Linux akan berjalan di hampir semua sistem Linux yang mendukung container. Semua dependensi untuk aplikasi biasanya dikirim dalam penampung yang sama.

Aplikasi berbasis kontainer dapat dipindahkan dengan mudah dari sistem lokal ke lingkungan cloud atau dari laptop pengembang ke server, selama sistem target mendukung Docker dan salah satu alat pihak ketiga yang mungkin digunakan dengannya, seperti Kubernetes (lihat “Container Docker memudahkan orkestrasi dan penskalaan,” di bawah).

Biasanya, image container Docker harus dibuat untuk platform tertentu. Wadah Windows, misalnya, tidak akan berjalan di Linux dan sebaliknya. Sebelumnya, salah satu cara mengatasi batasan ini adalah meluncurkan mesin virtual yang menjalankan instance dari sistem operasi yang diperlukan, dan menjalankan container di mesin virtual.

Namun, tim Docker sejak itu telah menemukan solusi yang lebih elegan, yang disebut  manifes , yang memungkinkan gambar untuk beberapa sistem operasi dikemas berdampingan dalam gambar yang sama. Manifes masih dianggap eksperimental, tetapi mereka mengisyaratkan bagaimana penampung dapat menjadi solusi aplikasi lintas platform dan juga solusi lintas lingkungan. 

Container Docker memungkinkan komposabilitas

Sebagian besar aplikasi bisnis terdiri dari beberapa komponen terpisah yang diatur ke dalam tumpukan — server web, database, cache dalam memori. Wadah memungkinkan untuk menyusun bagian-bagian ini menjadi unit fungsional dengan bagian-bagian yang mudah diubah. Setiap bagian disediakan oleh wadah yang berbeda dan dapat dipelihara, diperbarui, ditukar, dan dimodifikasi secara independen dari yang lain.

Ini pada dasarnya adalah model layanan mikro dari desain aplikasi. Dengan membagi fungsionalitas aplikasi ke dalam layanan mandiri yang terpisah, model layanan mikro menawarkan penangkal untuk memperlambat proses pengembangan tradisional dan aplikasi monolitik yang tidak fleksibel. Wadah yang ringan dan portabel memudahkan pembuatan dan pemeliharaan aplikasi berbasis layanan mikro.

Container Docker memudahkan orkestrasi dan penskalaan

Karena container ringan dan sedikit membebankan biaya overhead, dimungkinkan untuk meluncurkan lebih banyak lagi container pada sistem tertentu. Namun container juga dapat digunakan untuk menskalakan aplikasi di seluruh cluster sistem, dan untuk menaikkan atau menurunkan layanan guna memenuhi lonjakan permintaan atau untuk menghemat sumber daya.

Versi paling tingkat perusahaan dari alat untuk penerapan, pengelolaan, dan penskalaan kontainer disediakan melalui proyek pihak ketiga. Yang paling utama di antaranya adalah Google Kubernetes, sebuah sistem untuk mengotomatiskan bagaimana kontainer diterapkan dan diskalakan, tetapi juga bagaimana mereka terhubung bersama, menyeimbangkan muatan, dan dikelola. Kubernetes juga menyediakan cara untuk membuat dan menggunakan kembali definisi aplikasi multi-container atau "Diagram Helm", sehingga tumpukan aplikasi yang kompleks dapat dibuat dan dikelola sesuai permintaan.

Docker juga menyertakan sistem orkestrasi bawaannya sendiri, mode Swarm, yang masih digunakan untuk kasus-kasus yang tidak terlalu menuntut. Meskipun demikian, Kubernetes telah menjadi salah satu pilihan default; Faktanya, Kubernetes dibundel dengan Docker Enterprise Edition.

Peringatan Docker

Wadah memecahkan banyak masalah besar, tetapi bukan solusi untuk semua. Beberapa kekurangan mereka adalah dari desainnya, sementara yang lain adalah produk sampingan dari desain mereka.

Kontainer Docker bukanlah mesin virtual

Kesalahan konseptual paling umum yang dilakukan orang dengan container adalah menyamakannya dengan mesin virtual. Namun, karena container dan mesin virtual menggunakan mekanisme isolasi yang berbeda, keduanya memiliki kelebihan dan kekurangan yang berbeda.

Mesin virtual menyediakan isolasi tingkat tinggi untuk proses, karena mereka berjalan dalam sistem operasi mereka sendiri. Sistem operasi itu juga tidak harus sama dengan yang dijalankan di host. Mesin virtual Windows dapat berjalan di hypervisor Linux dan sebaliknya.

Kontainer, sebaliknya, menggunakan bagian terkontrol dari sumber daya sistem operasi host; banyak aplikasi berbagi kernel OS yang sama, dengan cara yang sangat terkelola. Akibatnya, aplikasi dalam container tidak sepenuhnya terisolasi seperti mesin virtual, tetapi menyediakan isolasi yang cukup untuk sebagian besar beban kerja.

Kontainer Docker tidak menyediakan kecepatan logam telanjang