Penafian: Saya menulis Vagrant! Tetapi karena saya menulis Vagrant, saya menghabiskan sebagian besar waktu saya hidup di dunia DevOps yang mencakup perangkat lunak seperti Docker. Saya bekerja dengan banyak perusahaan menggunakan Vagrant dan banyak menggunakan Docker, dan saya melihat bagaimana keduanya saling mempengaruhi.
Sebelum saya berbicara terlalu banyak, jawaban langsung: dalam skenario spesifik Anda (Anda bekerja sendiri, bekerja di Linux, menggunakan Docker dalam produksi), Anda dapat tetap menggunakan Docker sendirian dan menyederhanakan banyak hal. Dalam banyak skenario lain (saya bahas lebih lanjut), itu tidak mudah.
Tidak benar membandingkan secara langsung Vagrant dengan Docker. Dalam beberapa skenario, mereka tumpang tindih, dan sebagian besar tidak. Sebenarnya, perbandingan yang lebih tepat adalah Vagrant versus sesuatu seperti Boot2Docker (OS minimal yang dapat menjalankan Docker). Vagrant adalah tingkat di atas Docker dalam hal abstraksi, jadi itu bukan perbandingan yang adil dalam kebanyakan kasus.
Vagrant meluncurkan berbagai hal untuk menjalankan aplikasi / layanan untuk tujuan pengembangan. Ini bisa di VirtualBox, VMware. Bisa jauh seperti AWS, OpenStack. Di dalamnya, jika Anda menggunakan wadah, Vagrant tidak peduli, dan merangkul hal itu: ia dapat secara otomatis memasang, menarik, membuat, dan menjalankan wadah Docker, misalnya. Dengan Vagrant 1.6, Vagrant memiliki lingkungan pengembangan berbasis buruh pelabuhan , dan mendukung penggunaan Docker dengan alur kerja yang sama dengan Vagrant di Linux, Mac, dan Windows. Vagrant tidak mencoba untuk menggantikan Docker di sini, itu mencakup praktik Docker.
Docker secara khusus menjalankan wadah Docker. Jika Anda membandingkan langsung dengan Vagrant: itu adalah solusi yang lebih spesifik (hanya dapat menjalankan Docker), kurang fleksibel (memerlukan Linux atau host Linux di suatu tempat). Tentu saja jika Anda berbicara tentang produksi atau CI, tidak ada perbandingan dengan Vagrant! Vagrant tidak hidup di lingkungan ini, dan karenanya Docker harus digunakan.
Jika organisasi Anda hanya menjalankan wadah Docker untuk semua proyek mereka dan hanya memiliki pengembang yang berjalan di Linux, maka oke, Docker pasti bisa bekerja untuk Anda!
Kalau tidak, saya tidak melihat manfaat dari mencoba menggunakan Docker saja, karena Anda kehilangan banyak apa yang ditawarkan Vagrant, yang memiliki manfaat bisnis / produktivitas nyata:
Vagrant dapat meluncurkan mesin VirtualBox, VMware, AWS, OpenStack, dll. Tidak masalah apa yang Anda butuhkan, Vagrant dapat meluncurkannya. Jika Anda menggunakan Docker, Vagrant dapat menginstal Docker di semua ini sehingga Anda dapat menggunakannya untuk tujuan itu.
Vagrant adalah alur kerja tunggal untuk semua proyek Anda. Atau dengan kata lain, itu hanya satu hal yang orang harus pelajari untuk menjalankan proyek apakah itu dalam wadah Docker atau tidak. Jika, misalnya, di masa depan, pesaing muncul untuk bersaing secara langsung dengan Docker, Vagrant akan dapat menjalankannya juga.
Vagrant bekerja pada Windows (kembali ke XP), Mac (kembali ke 10.5), dan Linux (kembali ke kernel 2.6). Dalam ketiga kasus, alur kerjanya sama. Jika Anda menggunakan Docker, Vagrant dapat meluncurkan mesin (VM atau jarak jauh) yang dapat menjalankan Docker di ketiga sistem ini.
Vagrant tahu cara mengkonfigurasi beberapa hal lanjut atau non-sepele seperti jaringan dan folder sinkronisasi. Sebagai contoh: Vagrant tahu cara melampirkan IP statis ke mesin atau meneruskan port, dan konfigurasinya sama tidak peduli sistem apa yang Anda gunakan (VirtualBox, VMware, dll.) Untuk folder yang disinkronkan, Vagrant menyediakan banyak mekanisme untuk mendapatkan lokal Anda file ke mesin jarak jauh (folder bersama VirtualBox, NFS, rsync, Samba [plugin], dll.). Jika Anda menggunakan Docker, bahkan Docker dengan VM tanpa Vagrant, Anda harus melakukan ini secara manual atau mereka harus menemukan kembali Vagrant dalam kasus ini.
Vagrant 1.6 memiliki dukungan kelas satu untuk lingkungan pengembangan berbasis buruh pelabuhan . Ini tidak akan meluncurkan mesin virtual di Linux, dan secara otomatis akan meluncurkan mesin virtual di Mac dan Windows. Hasil akhirnya adalah bahwa bekerja dengan Docker seragam di semua platform, sementara Vagrant masih menangani detail hal-hal yang membosankan seperti jaringan, folder yang disinkronkan, dll.
Untuk membahas argumen tanggapan khusus yang saya dengar dalam mendukung penggunaan Docker, bukan Vagrant:
"Itu bagian yang kurang bergerak" - Ya, bisa jadi, jika Anda menggunakan Docker secara eksklusif untuk setiap proyek. Bahkan kemudian, itu mengorbankan fleksibilitas untuk mengunci Docker. Jika Anda pernah memutuskan untuk tidak menggunakan Docker untuk proyek, masa lalu, sekarang, atau masa depan, maka Anda akan memiliki lebih banyak komponen bergerak. Jika Anda pernah menggunakan Vagrant, Anda memiliki satu bagian bergerak yang mendukung sisanya.
"Lebih cepat!" - Setelah Anda memiliki host yang dapat menjalankan kontainer Linux, Docker jelas lebih cepat dalam menjalankan kontainer daripada mesin virtual mana pun yang akan diluncurkan. Tetapi meluncurkan mesin virtual (atau mesin jarak jauh) adalah biaya satu kali. Sepanjang hari, sebagian besar pengguna Vagrant tidak pernah benar-benar menghancurkan VM mereka. Ini adalah optimasi aneh untuk lingkungan pengembangan. Dalam produksi, di mana Docker benar-benar bersinar, saya mengerti perlunya dengan cepat memutar / menurunkan kontainer.
Saya harap sekarang jelas untuk melihat bahwa sangat sulit, dan saya percaya tidak benar, untuk membandingkan Docker dengan Vagrant. Untuk lingkungan dev, Vagrant lebih abstrak, lebih umum. Docker (dan berbagai cara Anda dapat membuatnya berperilaku seperti Vagrant) adalah kasus penggunaan khusus Vagrant, mengabaikan segala hal lain yang ditawarkan Vagrant.
Kesimpulannya: dalam kasus penggunaan yang sangat spesifik, Docker tentu saja merupakan pengganti yang mungkin untuk Vagrant. Dalam kebanyakan kasus penggunaan, tidak. Vagrant tidak menghalangi penggunaan Docker Anda; itu benar-benar melakukan apa yang bisa untuk membuat pengalaman itu lebih lancar. Jika Anda menemukan ini tidak benar, saya senang mengambil saran untuk memperbaiki keadaan, karena tujuan Vagrant adalah bekerja sama baiknya dengan sistem apa pun.
Semoga ini jelas!