Apa Perbedaan antara Docker dan VM?

Docker dan mesin virtual (VM) adalah dua teknologi yang digunakan dalam deployment aplikasi. Dalam siklus hidup pengembangan perangkat lunak, deployment menyiapkan kode aplikasi untuk dijalankan bagi pengguna akhir Anda. Docker adalah platform sumber terbuka yang digunakan oleh developer untuk mengemas perangkat lunak ke dalam unit standar yang disebut kontainer. Kontainer memiliki kode aplikasi dan lingkungannya, termasuk perpustakaan, alat sistem, dan runtime. Menggunakan Docker, Anda dapat melakukan deployment dan menskalakan aplikasi di mesin apa pun serta memastikan kode Anda berjalan secara konsisten. Sebaliknya, mesin virtual adalah salinan digital dari mesin fisik. Anda dapat memiliki beberapa mesin virtual dengan sistem pengoperasian masing-masing yang berjalan pada sistem pengoperasian host yang sama. Developer mengonfigurasi mesin virtual untuk menciptakan lingkungan aplikasi. Kontainer Docker juga dapat dijalankan di mesin virtual.

Baca tentang Docker »

Virtualisasi: Docker versus mesin virtual

Virtualisasi memungkinkan pembuatan instans virtual sumber daya kehidupan nyata, seperti server dan jaringan. Dalam komputasi, virtualisasi memungkinkan beberapa instans terisolasi dari komponen tervirtualisasi untuk beroperasi di komponen kehidupan nyata.

Misalnya, beberapa server virtual dapat berjalan di satu server fisik. Dengan berbagi sumber daya kehidupan nyata di antara beberapa instans virtual, mereka bisa dimanfaatkan dengan lebih baik dan lebih hemat biaya untuk dijalankan. Virtualisasi adalah dasar dari sejumlah besar pengembangan dan deployment aplikasi.

Mesin virtual

Seperti namanya, mesin virtual (VM) menyediakan virtualisasi seluruh mesin (server). Mesin virtual mengemulasi komponen perangkat keras dari mesin fisik, seperti CPU, memori, kartu antarmuka jaringan, pengontrol USB, dan kartu suara. Anda dapat menjalankan sistem operasi tamu dan beberapa aplikasi di lingkungan virtual. 

Mesin virtual mewujudkan teknologi cloud, dan di Amazon Web Services (AWS), mesin virtual disebut sebagai instans. Instans cloud ini dimiliki serta dikelola oleh AWS dan dapat digunakan melalui API.

Baca tentang instans cloud »

Docker

VM memungkinkan Anda menjalankan mesin virtual di perangkat keras apa pun. Docker memungkinkan Anda menjalankan aplikasi di sistem operasi apa pun. Docker menggunakan instans ruang pengguna terisolasi yang dikenal sebagai kontainer.

Kontainer Docker memiliki sistem file, struktur dependensi, proses, dan kemampuan jaringannya sendiri. Aplikasi memiliki semua yang dibutuhkan di dalam kontainer dan dapat berjalan di mana saja. Teknologi kontainer Docker menggunakan sumber daya kernel sistem operasi host yang mendasarinya secara langsung. 

Apa saja kesamaan lain antara Docker dan mesin virtual?

Sebagai teknologi virtualisasi, Docker dan mesin virtual (VM) memiliki kesamaan tertentu.

Citra

Kontainer Docker dan mesin virtual diciptakan dari citra. Setiap citra berfungsi sebagai cetak biru lingkungan tervirtualisasi. Citra memungkinkan pengguna membuat dan berbagi lingkungan yang konsisten tanpa harus terus mengonfigurasinya.

Citra menentukan semua sumber daya sistem yang diperlukan untuk menjalankan aplikasi. Misalnya, citra VM membuat cadangan sistem operasi, sementara citra kontainer Docker membuat cadangan lingkungan aplikasi.

Versioning

Versioning dapat dilakukan di citra kontainer Docker dan citra mesin virtual untuk melacak perubahan konfigurasi lingkungan dari waktu ke waktu.

Versioning di Docker mengacu pada kemampuan untuk melacak dan mengelola perubahan pada citra Docker dari waktu ke waktu. Tindakan ini memungkinkan developer melacak berbagai versi aplikasi mereka, kembali ke versi sebelumnya jika perlu, dan melakukan deployment versi aplikasi yang berbeda secara bersamaan. 

Sama halnya, versioning di mesin virtual mengacu pada proses melacak dan mengelola perubahan pada citra mesin virtual dari waktu ke waktu. Versioning mesin virtual melacak perubahan—seperti pembaruan dan patch—pada perangkat keras virtual atau konfigurasi sistem operasi.

Portabilitas

Mesin virtual dan Docker dirancang untuk mengatasi kesulitan karena harus mengembangkan konfigurasi aplikasi yang berbeda untuk berbagai jenis arsitektur yang mendasarinya. Meski memiliki pendekatan yang berbeda untuk tantangan tersebut, citra Docker dan VM sangatlah portabel di seluruh arsitektur, baik on-premise maupun di cloud

Perbedaan utama: Docker versus mesin virtual

Mesin virtual (VM) dan Docker mengatasi tantangan menjalankan aplikasi di lingkungan yang berbeda. Namun, mereka melakukannya untuk alasan yang sedikit berbeda dan dengan pendekatan yang berbeda.

Tujuan

Mesin virtual pada awalnya dirancang untuk memungkinkan beberapa sistem operasi berjalan pada satu mesin fisik. Tujuannya adalah untuk memungkinkan pengguna menciptakan lingkungan virtual yang terisolasi dari perangkat keras yang mendasarinya. VM mengabstraksikan detail perangkat keras untuk memudahkan menjalankan aplikasi pada arsitektur perangkat keras yang berbeda dan menggunakan sumber daya perangkat keras secara lebih efisien.

Docker, di sisi lain, dirancang untuk menyediakan cara yang ringan serta portabel untuk mengemas dan menjalankan aplikasi dalam lingkungan yang terisolasi dan dapat diproduksi kembali. Docker mengabstraksikan detail sistem operasi untuk mengatasi tantangan penerapan aplikasi di berbagai lingkungan, seperti pengembangan, pengujian, dan produksi. Mengelola pembaruan lingkungan perangkat lunak dan menjaga konsistensi semua lingkungan bisa menjadi hal yang sangat menantang. Hal ini terutama berlaku untuk organisasi yang menjalankan ratusan aplikasi atau menguraikan aplikasi menjadi ratusan layanan mikro. Docker mengatasi masalah ini melalui kontainerisasi. 

Produk akhir

Docker adalah nama platform kontainer sumber terbuka yang dimiliki dan dioperasikan oleh perusahaan bernama Docker. Ada platform alternatif seperti Podman, meski kurang begitu populer; Docker identik dengan kontainerisasi. Kontainer adalah artefak, yaitu bagian yang dapat digunakan untuk pengguna akhir.

Mesin virtual itu sendiri adalah bagian yang dapat digunakan untuk pengguna akhir. Teknologi ini tidak terkait dengan merek tertentu. Anda dapat melakukan deployment VM di pusat data on-premise atau mengaksesnya melalui API sebagai layanan cloud terkelola.

Arsitektur

Sebuah mesin virtual menjalankan kernel dan sistem operasi host sendiri bersama dengan aplikasi dan dependensi mereka, seperti perpustakaan dan file biner lainnya. Hypervisor mengoordinasikan perangkat keras (mesin host atau server) dan mesin virtual. Hypervisor mengalokasikan sumber daya perangkat keras fisik yang diuraikan selama instansiasi ke mesin virtual untuk penggunaan eksklusifnya. Satu server yang kuat bisa memiliki beberapa mesin virtual, yang dikelola oleh satu hypervisor, dengan ratusan aplikasi yang berjalan di setiap mesin virtual.

Kontainer Docker hanya berisi dependensinya. Perangkat lunak Docker Engine mendukung virtualisasi di Docker. Perangkat lunak ini menyediakan koordinasi antara kontainer yang berjalan dan sistem operasi yang mendasarinya, baik mesin fisik maupun virtual.

Untuk manajemen virtualisasi yang lebih lanjut dengan Docker, gunakan Kubernetes. Untuk informasi selengkapnya, baca Apa Perbedaan antara Kubernetes dan Docker?

Berbagi sumber daya

Mesin virtual dan kontainer Docker menggunakan multiplexing sumber daya, atau berbagi sumber daya antara instans tervirtualisasi.

Mesin virtual meminta di muka sumber daya dalam jumlah tertentu dari perangkat keras dan terus menempati jumlah tersebut dengan stabil, selama mesin virtual berjalan. 

Kontainer Docker, di sisi lain, menggunakan sumber daya sesuai permintaan. Alih-alih meminta sumber daya perangkat keras fisik dalam jumlah tertentu seperti yang dilakukan mesin virtual, kontainer Docker hanya meminta jumlah yang mereka butuhkan dari satu kernel sistem operasi. Beberapa kontainer berbagi sistem operasi yang sama. Kontainer Docker mengarahkan berbagi sumber daya dengan lead kernel dan dapat menggunakan lebih sedikit sumber daya sistem dibandingkan dengan VM. 

Keamanan

Karena kontainer Docker berbagi kernel dengan sistem operasi host untuk konsumsi sumber daya yang ringan, kontainer Docker berisiko jika ada kerentanan di kernel. Namun, Docker juga menyediakan banyak kontrol keamanan tingkat lanjut.

Sebaliknya, karena VM menjalankan seluruh sistem operasi, ada tingkat isolasi tambahan saat menjalankan aplikasi. VM menawarkan keamanan yang lebih tinggi selama sistem operasi memiliki langkah-langkah keamanan yang ketat.

Kapan digunakan: Docker versus mesin virtual

Kontainer Docker berjalan pada arsitektur Linux dan memerlukan fitur khusus kernel Linux seperti namespace dan grup kontrol (cgroups). Developer sering menjalankan platform Docker pada mesin virtual berbasis Linux. Docker mengemas kode aplikasi ke dalam kontainer yang berjalan di mana saja. Pembaruan lingkungan dilakukan hanya sekali dalam kontainer. Anda tidak perlu memperbarui lingkungan aplikasi Anda. 

Misalnya, Anda dapat memutar instans di AWS dan langsung memuatnya dengan Amazon Machine Image (AMI) yang telah dikonfigurasi sebelumnya dengan Docker. 

 

Namun, jika Anda memutuskan secara khusus apakah akan menggunakan mesin virtual (VM) atau Docker untuk melakukan deployment aplikasi, hal ini bergantung pada persyaratan aplikasi yang sedang berjalan.

Kapan menggunakan mesin virtual

Cara terbaik adalah menggunakan mesin virtual jika Anda menjalankan aplikasi dengan persyaratan ini: 

  • Dependensi khusus sistem operasi
  • Persyaratan sumber daya perangkat keras yang substansif
  • Kebutuhan untuk mengatur berbagai kontrol dalam sistem operasi
  • Aplikasi lama yang tidak lagi berjalan pada sistem operasi modern
  • Persyaratan sistem operasi yang berbeda dengan infrastruktur fisik tunggal yang mendasari tersedia

Kapan menggunakan Docker

Cara terbaik adalah menggunakan Docker saat Anda menjalankan aplikasi dengan persyaratan ini: 

  • Persyaratan sumber daya ringan atau arsitektur layanan mikro
  • Lingkungan infrastruktur fisik terdistribusi, termasuk server berbasis cloud
  • Siklus deployment cepat (karena Dockerfile lebih mudah dikelola dibandingkan konfigurasi VM)
  • Persyaratan skalabilitas yang cepat

Ringkasan perbedaan: Docker vs. VM

 

Kontainer Docker

VM

Apa itu?

Docker adalah platform perangkat lunak untuk membuat dan menjalankan kontainer Docker. Kontainer Docker adalah emulasi dari instans ruang pengguna, bagian dari sistem operasi tempat proses pengguna berjalan.

Emulasi mesin fisik—termasuk perangkat keras tervirtualisasi—menjalankan sistem operasi.

Virtualisasi

Kontainer mengabstraksi detail sistem operasi dari kode aplikasi.

VM mengabstraksi detail perangkat keras dari kode aplikasi.

Tujuan

Mengabstraksi detail perangkat keras dan meningkatkan pemanfaatan perangkat keras.

Meningkatkan manajemen lingkungan aplikasi dan membawa konsistensi di berbagai lingkungan.

Dikelola oleh

Docker Engine berkoordinasi antara sistem operasi dan kontainer Docker.

Hypervisor mengoordinasikan antara perangkat keras fisik mesin dan mesin virtual.

Arsitektur

Berbagi sumber daya dengan kernel host yang mendasarinya.

Menjalankan kernel dan sistem operasinya sendiri.

Berbagi sumber daya

Sesuai permintaan.

Jumlah tetap, diatur dalam persyaratan konfigurasi gambar mesin virtual.

Bagaimana AWS dapat mendukung persyaratan deployment aplikasi Anda?

Amazon Web Services (AWS) memiliki berbagai layanan yang dirancang khusus untuk mesin virtual (VM) dan manajemen Docker:

  • Amazon Elastic Cloud Compute (Amazon EC2) menawarkan lebih dari 600 tipe instans yang aman, andal, dan dapat diskalakan. Dengan memuat template Amazon Machine Image (AMI), Anda dapat memiliki server pengembangan, pengujian, atau lingkungan produksi yang ditentukan sepenuhnya siap digunakan dalam hitungan menit.
  • Amazon Elastic Container Service (Amazon ECS) adalah layanan orkestrasi kontainer terkelola penuh yang memudahkan Anda untuk melakukan deployment dan menskalakan aplikasi kontainer. Pelanggan dapat mengonfigurasi instans kontainer mereka untuk mengakses registri citra Docker pribadi di dalam cloud privat virtual (VPC) atau registri yang dapat diakses di luar VPC.
  • Amazon Elastic Container Registry (Amazon ECR) memungkinkan Anda untuk dengan mudah menyimpan, berbagi, dan melakukan deployment kontainer Anda di mana saja. Amazon ECR terintegrasi dengan antarmuka baris perintah Docker (CLI) untuk menyederhanakan alur kerja pengembangan dan produksi Anda. Misalnya, Anda dapat mendorong gambar kontainer Anda ke Amazon ECR menggunakan CLI Docker dari mesin pengembangan Anda. Kemudian, orkestrator kontainer Amazon dapat menariknya langsung untuk deployment produksi.
  • AWS Fargate adalah layanan nirserver yang memungkinkan Anda melakukan deployment dan mengelola kontainer tanpa perlu mengelola server fisik atau mesin virtual.

Mulailah pengembangan aplikasi Anda di AWS dengan membuat akun sekarang juga.