Jawaban:
Dari FAQ Docker :
Docker bukan pengganti lxc. "lxc" mengacu pada kemampuan kernel linux (khususnya ruang nama dan grup kontrol) yang memungkinkan proses sandboxing satu sama lain, dan mengendalikan alokasi sumber daya mereka.
Di atas fondasi fitur kernel tingkat rendah ini, Docker menawarkan alat tingkat tinggi dengan beberapa fungsi yang kuat:
Penempatan portabel di seluruh mesin.Docker mendefinisikan format untuk bundling aplikasi dan semua dependensinya menjadi satu objek yang dapat ditransfer ke mesin yang didukung docker apa pun, dan dieksekusi di sana dengan jaminan bahwa lingkungan eksekusi yang terpapar pada aplikasi akan sama. Lxc mengimplementasikan proses sandboxing, yang merupakan prasyarat penting untuk penerapan portabel, tetapi itu saja tidak cukup untuk penerapan portabel. Jika Anda mengirimi saya salinan aplikasi Anda yang dipasang dalam konfigurasi lxc khusus, itu hampir pasti tidak akan berjalan di mesin saya seperti di komputer Anda, karena itu terikat dengan konfigurasi spesifik mesin Anda: jaringan, penyimpanan, pencatatan, distro, dll. Docker mendefinisikan abstraksi untuk pengaturan khusus mesin ini, sehingga wadah buruh pelabuhan yang sama dapat berjalan - tidak berubah - pada banyak mesin yang berbeda,
Aplikasi-sentris. Docker dioptimalkan untuk penyebaran aplikasi , tidak seperti mesin. Ini tercermin dalam API, antarmuka pengguna, filosofi desain, dan dokumentasi. Sebaliknya, skrip pembantu lxc fokus pada wadah sebagai mesin ringan - pada dasarnya server yang melakukan booting lebih cepat dan membutuhkan lebih sedikit ram. Kami pikir ada lebih dari sekadar wadah.
Membangun otomatis . Docker menyertakan alat bagi pengembang untuk secara otomatis merakit wadah dari kode sumber mereka, dengan kontrol penuh atas dependensi aplikasi, alat bangun, pengemasan, dll. Mereka bebas menggunakan make, maven, koki, boneka, garam, paket debian, rpms, sumber tarball, atau kombinasi apa pun di atas, terlepas dari konfigurasi mesin .
Versi. Docker mencakup kemampuan mirip git untuk melacak versi wadah yang berurutan, memeriksa perbedaan antara versi, melakukan versi baru, memutar kembali dll. Sejarah juga mencakup bagaimana wadah disusun dan oleh siapa, sehingga Anda mendapatkan keterlacakan penuh dari server produksi semua jalan kembali ke pengembang hulu. Docker juga mengimplementasikan unggahan dan unduhan tambahan, mirip dengan "git pull", sehingga versi baru suatu wadah dapat ditransfer dengan hanya mengirim diff.
Penggunaan kembali komponen. Wadah apa pun dapat digunakan sebagai "gambar dasar" untuk membuat komponen yang lebih khusus. Ini dapat dilakukan secara manual atau sebagai bagian dari bangunan otomatis. Misalnya Anda dapat menyiapkan lingkungan python yang ideal, dan menggunakannya sebagai basis untuk 10 aplikasi yang berbeda. Setup postgresql ideal Anda dapat digunakan kembali untuk semua proyek masa depan Anda. Dan seterusnya.
Berbagi. Docker memiliki akses ke registri publik ( https://registry.hub.docker.com/ ) di mana ribuan orang telah mengunggah kontainer yang berguna: apa pun dari redis, couchdb, postgres ke irc bouncer ke rails server aplikasi untuk mengambil gambar-gambar dasar untuk berbagai distro. Registri juga mencakup "perpustakaan standar" resmi dari wadah berguna yang dikelola oleh tim buruh pelabuhan. Registri itu sendiri adalah open-source, jadi siapa pun dapat menggunakan registri mereka sendiri untuk menyimpan dan mentransfer kontainer pribadi, untuk penyebaran server internal misalnya.
Alat ekosistem. Docker mendefinisikan API untuk mengotomatisasi dan menyesuaikan pembuatan dan penyebaran kontainer. Ada sejumlah besar alat terintegrasi dengan buruh pelabuhan untuk memperluas kemampuannya. Penempatan seperti PaaS (Dokku, Deis, Flynn), orkestrasi multi-simpul (maestro, garam, mesos, openstack nova), dashboard manajemen (docker-ui, cakrawala openstack, galangan kapal), manajemen konfigurasi (koki, boneka), integrasi berkelanjutan (jenkins, strider, travis), dll. Docker dengan cepat menetapkan dirinya sebagai standar untuk perkakas berbasis wadah.
Saya harap ini membantu!
Mari kita lihat daftar fitur teknis Docker , dan periksa mana yang disediakan oleh LXC dan mana yang tidak.
1) Isolasi sistem file: setiap wadah proses berjalan dalam sistem file root yang benar-benar terpisah.
Disediakan dengan LXC polos.
2) Sumber daya isolasi : sumber daya sistem seperti cpu dan memori dapat dialokasikan secara berbeda untuk setiap wadah proses, menggunakan cgroups.
Disediakan dengan LXC polos.
3) Isolasi jaringan : setiap wadah proses berjalan di namespace jaringan sendiri, dengan antarmuka virtual dan alamat IP-nya sendiri.
Disediakan dengan LXC polos.
4) Copy-on-write : sistem file root dibuat menggunakan copy-on-write, yang membuat penyebaran sangat cepat, murah memori dan murah disk.
Ini disediakan oleh AUFS, sistem file gabungan tempat Docker bergantung. Anda dapat mengatur AUFS sendiri secara manual dengan LXC, tetapi Docker menggunakannya sebagai standar.
5) Penebangan : aliran standar (stdout / stderr / stdin) dari setiap wadah proses dikumpulkan dan dicatat untuk pengambilan waktu-nyata atau batch.
Docker menyediakan ini.
6) Ubah manajemen : perubahan pada sistem file wadah dapat dilakukan menjadi gambar baru dan digunakan kembali untuk membuat lebih banyak wadah. Tidak diperlukan konfigurasi templating atau manual.
"Templating or configuration manual" adalah referensi ke LXC, di mana Anda perlu mempelajari kedua hal ini. Docker memungkinkan Anda memperlakukan wadah dengan cara yang biasa Anda gunakan untuk merawat mesin virtual, tanpa mempelajari tentang konfigurasi LXC.
7) Shell interaktif : buruh pelabuhan dapat mengalokasikan pseudo-tty dan menempel pada input standar dari wadah apa pun, misalnya untuk menjalankan shell interaktif yang dibuang.
LXC sudah menyediakan ini.
Saya baru saja mulai belajar tentang LXC dan Docker, jadi saya akan menerima segala koreksi atau jawaban yang lebih baik.
unshare
alat dasar (atau langsung clone()
syscall). Demikian juga, Docker membuat hal-hal itu lebih mudah digunakan (dan membawa lebih banyak fitur di atas meja, seperti kemampuan untuk mendorong / menarik gambar). 2c saya
update-index
dan read-tree
, tanpa alat akrab seperti add
, commit
, dan merge
. Docker menyediakan lapisan "porselen" di atas "plumbing" LXC, memungkinkan Anda untuk bekerja dengan konsep tingkat yang lebih tinggi dan lebih sedikit khawatir tentang detail tingkat rendah.
Posting & jawaban di atas dengan cepat menjadi tanggal karena pengembangan LXD terus meningkatkan LXC . Ya, saya tahu Docker belum juga diam.
LXD sekarang mengimplementasikan repositori untuk gambar kontainer LXC yang dapat didorong atau ditarik oleh pengguna untuk berkontribusi atau digunakan kembali.
REST api LXD ke LXC sekarang memungkinkan penciptaan / penyebaran / pengelolaan LXC lokal & jarak jauh menggunakan sintaks perintah yang sangat sederhana.
Fitur utama LXD adalah:
Ada plugin NCLXD sekarang untuk OpenStack memungkinkan OpenStack untuk memanfaatkan LXD untuk menyebarkan / mengelola wadah LXC sebagai VM di OpenStack daripada menggunakan KVM, vmware dll.
Namun, NCLXD juga memungkinkan cloud hybrid dari campuran HW VM tradisional dan VM LXC.
Plugin OpenStack nclxd daftar fitur yang didukung termasuk:
stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support
Pada saat Ubuntu 16.04 dirilis pada bulan April 2016 akan ada tambahan fitur keren seperti dukungan perangkat blok, dukungan migrasi langsung .
Dockers menggunakan gambar yang dibangun berlapis-lapis. Ini menambahkan banyak dalam hal portabilitas, berbagi, versi dan fitur lainnya. Gambar-gambar ini sangat mudah untuk port atau transfer dan karena mereka berada di lapisan, perubahan dalam versi selanjutnya ditambahkan dalam bentuk lapisan di atas lapisan sebelumnya. Jadi, saat porting berkali-kali Anda tidak perlu port layer dasar. Dockers memiliki wadah yang menjalankan gambar-gambar ini dengan lingkungan eksekusi terkandung, mereka menambahkan perubahan sebagai lapisan baru memberikan kontrol versi yang mudah.
Selain itu Docker Hub adalah registri yang baik dengan ribuan gambar publik, di mana Anda dapat menemukan gambar yang memiliki OS dan perangkat lunak lain yang diinstal. Jadi, Anda bisa mendapatkan awal yang cukup baik untuk aplikasi Anda.
Akan menjaga pithier ini, ini sudah ditanyakan dan dijawab di atas .
Namun saya mundur dan menjawabnya sedikit berbeda, mesin buruh pelabuhan itu sendiri menambahkan orkestrasi sebagai salah satu tambahannya dan ini adalah bagian yang mengganggu. Setelah Anda mulai menjalankan aplikasi sebagai kombinasi dari wadah yang menjalankan 'suatu tempat' di beberapa mesin wadah itu menjadi sangat menarik. Robustness, Horizontal Scaling, abstraksi lengkap dari perangkat keras yang mendasarinya, saya bisa terus dan terus ...
Bukan hanya Docker yang memberi Anda ini, sebenarnya standar Kontainer Orkestrasi de facto adalah Kubernetes yang hadir dalam banyak rasa, satu Docker, tetapi juga OpenShift, SuSe, Azure, AWS ...
Kemudian di bawah K8S ada mesin kontainer alternatif; yang menarik adalah Docker dan CRIO - baru-baru ini dibuat, tanpa daemon, dimaksudkan sebagai mesin kontainer khusus untuk Kubernet tetapi belum dewasa. Ini adalah persaingan antara ini yang saya pikir akan menjadi pilihan jangka panjang nyata untuk mesin kontainer.