Bagikan melalui


Apa itu Docker?

Saran (if the context is advice)

Konten ini adalah kutipan dari eBook, Arsitektur Layanan Mikro .NET untuk Aplikasi .NET Kontainer, tersedia di .NET Docs atau sebagai PDF gratis yang dapat diunduh yang dapat dibaca secara offline.

Arsitektur Layanan Mikro .NET untuk Aplikasi .NET Dalam Kontainer: sampul eBook thumbnail.

Docker adalah proyek sumber terbuka untuk mengotomatiskan penyebaran aplikasi sebagai kontainer portabel dan mandiri yang dapat berjalan di cloud atau lokal. Docker juga merupakan perusahaan yang mempromosikan dan mengembangkan teknologi ini, bekerja sama dengan vendor cloud, Linux, dan Windows, termasuk Microsoft.

Diagram memperlihatkan tempat yang dapat dijalankan kontainer Docker.

Gambar 2-2. Docker menyebarkan kontainer di semua lapisan cloud hibrid.

Kontainer Docker dapat berjalan di mana saja, lokal di pusat data pelanggan, di penyedia layanan eksternal atau di cloud, di Azure. Kontainer gambar Docker dapat berjalan secara asli di Linux dan Windows. Namun, gambar Windows hanya dapat berjalan pada host Windows dan gambar Linux dapat berjalan pada host Linux dan host Windows (menggunakan VM Linux Hyper-V, sejauh ini), di mana host berarti server atau VM.

Pengembang dapat menggunakan lingkungan pengembangan di Windows, Linux, atau macOS. Pada komputer pengembangan, pengembang menjalankan host Docker tempat gambar Docker disebarkan, termasuk aplikasi dan dependensinya. Pengembang yang bekerja di Linux atau di macOS menggunakan host Docker yang berbasis Linux, dan mereka hanya dapat membuat gambar untuk kontainer Linux. (Pengembang yang bekerja di macOS dapat mengedit kode atau menjalankan Docker CLI dari macOS, tetapi pada saat penulisan ini, kontainer tidak berjalan langsung di macOS.) Pengembang yang bekerja di Windows dapat membuat gambar untuk Kontainer Linux atau Windows.

Untuk menghosting kontainer di lingkungan pengembangan dan menyediakan alat pengembang tambahan, Docker mengirimkan Docker Desktop untuk Windows atau untuk macOS. Produk-produk ini menginstal VM yang diperlukan (host Docker) untuk menghosting kontainer.

Untuk menjalankan Kontainer Windows, ada dua jenis runtime:

  • Kontainer Windows Server menyediakan isolasi aplikasi melalui teknologi isolasi proses dan namespace. Kontainer Windows Server berbagi kernel dengan host kontainer dan dengan semua kontainer yang berjalan di host.

  • Hyper-V Kontainer memperluas isolasi yang disediakan oleh Windows Server Containers dengan menjalankan setiap kontainer di mesin virtual yang sangat dioptimalkan. Dalam konfigurasi ini, kernel host kontainer tidak dibagikan dengan kontainer Hyper-V, memberikan isolasi yang lebih baik.

Gambar untuk kontainer ini dibuat dengan cara yang sama dan berfungsi sama. Perbedaannya adalah bagaimana kontainer dibuat dari citra; menjalankan Kontainer membutuhkan parameter tambahan Hyper-V. Untuk detailnya, lihat kontainer Hyper-V.

Membandingkan kontainer Docker dengan komputer virtual

Gambar 2-3 menunjukkan perbandingan antara VM dan kontainer Docker.

Komputer Virtual Kontainer Docker
Diagram memperlihatkan tumpukan perangkat keras/perangkat lunak VM tradisional. Diagram memperlihatkan tumpukan perangkat keras/perangkat lunak untuk kontainer Docker.
Komputer virtual mencakup aplikasi, pustaka atau biner yang diperlukan, dan sistem operasi tamu lengkap. Virtualisasi penuh memerlukan lebih banyak sumber daya daripada kontainerisasi. Kontainer mencakup aplikasi dan semua dependensinya. Namun, mereka berbagi kernel OS dengan kontainer lain, berjalan sebagai proses terisolasi di ruang pengguna pada sistem operasi host. (Kecuali dalam kontainer Hyper-V, di mana setiap kontainer berjalan di dalam komputer virtual khusus per kontainer.)

Gambar 2-3. Perbandingan komputer virtual tradisional dengan kontainer Docker

Untuk VM, ada tiga lapisan dasar di server host, dari bawah ke atas: infrastruktur, Sistem Operasi Host dan Hypervisor dan di atas semua itu setiap VM memiliki OS sendiri dan semua pustaka yang diperlukan. Untuk Docker, server host hanya memiliki infrastruktur dan OS dan di atasnya, mesin kontainer, yang membuat kontainer terisolasi tetapi berbagi layanan OS dasar.

Karena kontainer memerlukan sumber daya yang jauh lebih sedikit (misalnya, kontainer tidak memerlukan OS penuh), kontainer mudah disebarkan dan dimulai dengan cepat. Ini memungkinkan Anda untuk memiliki kepadatan yang lebih tinggi, yang berarti memungkinkan Anda untuk menjalankan lebih banyak layanan pada unit perangkat keras yang sama, sehingga mengurangi biaya.

Sebagai dampak samping dari berjalan pada kernel yang sama, Anda mendapatkan isolasi yang lebih sedikit daripada mesin virtual.

Tujuan utama dari sebuah citra adalah untuk membuat lingkungan (dependensi) tetap sama di berbagai implementasi. Ini berarti Anda dapat men-debugnya di komputer Anda dan kemudian menyebarkannya ke komputer lain dengan lingkungan yang sama yang dijamin.

Gambar kontainer adalah cara untuk mengemas aplikasi atau layanan dan menyebarkannya dengan cara yang andal dan dapat direproduksi. Anda dapat mengatakan bahwa Docker bukan hanya teknologi tetapi juga filosofi dan proses.

Saat menggunakan Docker, Anda tidak akan mendengar pengembang mengatakan, "Ini berfungsi di komputer saya, mengapa tidak dalam produksi?" Mereka hanya dapat mengatakan, "Ini berjalan di Docker", karena aplikasi Docker yang dikemas dapat dieksekusi pada lingkungan Docker yang didukung, dan berjalan seperti yang dimaksudkan pada semua target penyebaran (seperti Dev, QA, penahapan, dan produksi).

Analogi sederhana

Mungkin analogi sederhana dapat membantu mendapatkan pemahaman konsep inti Docker.

Mari kita kembali ke masa lalu ke tahun 1950-an sejenak. Tidak ada pengolah kata, dan mesin fotokopi digunakan di mana-mana (semacam itu).

Bayangkan Anda bertanggung jawab untuk dengan cepat mengeluarkan batch surat sesuai kebutuhan, untuk mengirimkannya kepada pelanggan, menggunakan kertas dan amplop nyata, untuk dikirimkan secara fisik ke alamat setiap pelanggan (tidak ada email saat itu).

Pada titik tertentu, Anda menyadari huruf hanyalah komposisi dari sekumpulan besar paragraf, yang dipilih dan diatur sesuai kebutuhan, sesuai dengan tujuan surat, sehingga Anda merancang sistem untuk mengeluarkan surat dengan cepat, mengharapkan untuk mendapatkan kenaikan gaji yang tinggi.

Sistem ini sederhana:

  1. Anda mulai dengan dek lembar transparan yang masing-masing berisi satu paragraf.

  2. Untuk mengeluarkan sekumpulan huruf, Anda memilih lembar dengan paragraf yang Anda butuhkan, lalu Anda menumpuk dan meratakannya sehingga terlihat dan dibaca dengan baik.

  3. Terakhir, Anda menempatkan dokumen di mesin fotokopi dan tekan tombol mulai untuk menghasilkan salinan sebanyak yang diperlukan.

Jadi, menyederhanakan, itulah ide inti Docker.

Di Docker, setiap lapisan adalah serangkaian perubahan yang dihasilkan yang terjadi pada sistem file setelah menjalankan perintah, seperti menginstal program.

Jadi, ketika Anda "melihat" sistem file setelah lapisan disalin, Anda melihat semua file, termasuk dalam lapisan ketika program diinstal.

Anda dapat menganggap gambar sebagai hard disk baca-saja tambahan yang siap dipasang di "komputer" tempat sistem operasi sudah diinstal.

Demikian pula, Anda dapat menganggap kontainer sebagai "komputer" dengan hard disk gambar yang diinstal. Kontainer, sama seperti komputer, dapat dinyalakan atau dimatikan.

Sebelumnya Berikutnya