Apa itu Docker?

Tip

Konten ini adalah kutipan dari eBook, .NET Microservices Architecture for Containerized .NET Applications, tersedia di .NET Docs atau sebagai PDF yang dapat diunduh gratis dan dapat dibaca secara offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

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

Diagram showing the places Docker containers can run.

Gambar 2-2. Docker menyebarkan kontainer di semua lapisan data 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 native 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 mesin virtual Hyper-V Linux, sejauh ini), tempat host berarti server atau mesin virtual.

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

Untuk menghosting container di lingkungan pengembangan dan menyediakan alat pengembang tambahan, Docker mengirimkan Docker Desktop untuk Windows atau untuk macOS. Berikut ini produk-produk untuk memasang mesin virtual yang diperlukan (host Docker) guna menghosting kontainer.

Untuk menjalankan Kontainer Windows, ada dua jenis runtime bahasa umum:

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

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

Gambar untuk kontainer ini dibuat dengan cara dan fungsi yang sama. Perbedaannya adalah bagaimana kontainer dibuat dari gambar yang menjalankan Kontainer Hyper-V memerlukan parameter tambahan. Untuk detailnya, lihat Kontainer Hyper-V.

Membandingkan kontainer Docker dengan komputer virtual

Gambar 2-3 menunjukkan perbandingan antara mesin virtual dan kontainer Docker.

Komputer Virtual Kontainer Docker
Diagram showing the hardware/software stack of a traditional VM. Diagram showing the hardware/software stack for Docker containers.
Komputer virtual mencakup aplikasi, pustaka atau biner yang diperlukan, dan sistem operasi tamu yang lengkap. Virtualisasi penuh membutuhkan lebih banyak sumber daya dibandingkan kontainerisasi. Kontainer mencakup aplikasi dan semua dependensinya. Tetapi kontainer berbagi kernel OS dengan kontainer lain, berjalan sebagai proses terisolasi di ruang pengguna pada sistem operasi host. (Kecuali dalam kontainer Hyper-V, setiap kontainer dapat berjalan di dalam komputer virtual khusus per kontainer.)

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

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

Karena kontainer membutuhkan sumber daya yang jauh lebih sedikit (misalnya, mereka tidak memerlukan OS penuh), mereka mudah disebar dan mereka mulai dengan cepat. Hal ini memungkinkan Anda memiliki kepadatan yang lebih tinggi, yang berarti memungkinkan Anda menjalankan lebih banyak layanan pada unit perangkat keras yang sama, sehingga mengurangi biaya.

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

Tujuan utama gambar adalah membuat lingkungan (dependensi) yang sama di berbagai penyebaran. Ini berarti Anda dapat men-debugnya di komputer, lalu menyebarkannya ke komputer lain dengan lingkungan yang sama.

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

Saat menggunakan Docker, Anda tidak akan mendengar pengembang mengatakan, "Ini berfungsi pada mesin saya, mengapa tidak dalam produksi?" Pengembang 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 dalam memahami konsep inti Docker.

Mari kita kembali sejenak ke tahun 1950-an. Tidak ada pengolah kata, dan fotokopi (sejenisnya) digunakan di mana-mana.

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

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

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 dibutuhkan, lalu menumpuk dan meratakannya sehingga dapat dilihat dan dibaca dengan baik.

  3. Terakhir, Anda menempatkan set di fotokopi dan tekan mulai untuk menghasilkan huruf sebanyak yang diperlukan.

Jadi, menyederhanakan, itulah ide inti dari Docker.

Dalam Docker, setiap lapisan adalah tataan hasil yang terjadi pada sistem file setelah mengeksekusi perintah, seperti, menginstal program.

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

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

Demikian pula, Anda dapat menganggap kontainer sebagai "komputer" dengan hard disk citra terpasang. Kontainer, seperti komputer, dapat dihidupkan atau dimatikan.