Apa perbedaan antara Docker Compose dan Kubernetes?

329

Saat menyelam ke Docker, Google Cloud dan Kubernetes, dan tanpa memahami mereka bertiga dengan jelas, menurut saya produk-produk ini tumpang tindih, namun mereka tidak kompatibel.

Misalnya, docker-compose.ymlfile perlu ditulis ulang sehingga aplikasi dapat digunakan untuk Kubernetes.

Bisakah seseorang memberikan deskripsi kasar tingkat tinggi tentang di mana Docker, Docker Compose, Docker Cloud, dan Kubernetes tumpang tindih dan di mana yang satu bergantung pada yang lain?

George Katsanos
sumber

Jawaban:

482

Docker :

  • Docker adalah teknologi wadah yang memungkinkan Anda untuk menyimpan aplikasi Anda.
  • Docker adalah inti dari menggunakan teknologi lain.

Susun Docker

  • Docker Compose memungkinkan mengkonfigurasi dan memulai beberapa wadah Docker.
  • Docker Compose sebagian besar digunakan sebagai penolong ketika Anda ingin memulai beberapa wadah Docker dan tidak ingin memulai masing-masing menggunakan secara terpisah docker run ....
  • Docker Compose digunakan untuk memulai wadah pada host yang sama .
  • Docker Compose digunakan sebagai pengganti semua parameter opsional saat membuat dan menjalankan wadah buruh pelabuhan tunggal.

Docker Swarm

  • Docker Swarm digunakan untuk menjalankan dan menghubungkan kontainer pada banyak host.
  • Docker Swarm adalah manajemen klaster wadah dan alat orkestrasi.
  • Ia mengelola kontainer yang berjalan di beberapa host dan melakukan hal-hal seperti penskalaan, memulai wadah baru ketika satu crash, wadah jaringan ...
  • Docker Swarm adalah Docker yang diproduksi. Ini adalah alat orkestrasi Docker asli yang tertanam di Docker Engine.
  • File Docker Swarm bernama stack file sangat mirip dengan file Tulis Docker.

Kubernetes

  • Kubernetes adalah alat orkestrasi wadah yang dikembangkan oleh Google.
  • Tujuan Kubernetes sangat mirip dengan untuk Docker Swarm.

Docker Cloud

  • Layanan buruh pelabuhan perusahaan berbayar yang memungkinkan Anda membuat dan menjalankan kontainer di server cloud atau server lokal.
  • Ini menyediakan UI Web dan panel kontrol pusat untuk menjalankan dan mengelola kontainer sambil menyediakan semua fitur Docker dalam antarmuka web yang ramah pengguna.

Memperbarui:

Cloud Docker "sebagian" dihentikan

Layanan pada Docker Cloud yang menyediakan aplikasi, node, dan manajemen cluster swarm akan ditutup pada 21 Mei [2020] ... build otomatis dan layanan penyimpanan registri, tidak akan terpengaruh dan akan terus tersedia

yamenk
sumber
Semua bagus, tentang hal terakhir "Docker cloud, memungkinkan Anda untuk menjalankan kontainer .." secara praktis, apa yang dapat Anda lakukan dengan menjalankan kontainer ini di cloud? dapatkah mereka menyediakan titik akhir yang diakses secara publik? pada dasarnya apakah docker cloud seperti AWS tetapi untuk kontainer docker? (Atau apakah itu hanya sebuah perpustakaan kontainer untuk penemuan)
George Katsanos
2
Ok maaf Saya pikir saya masih bingung. Jadi apakah itu berarti komposisi buruh pelabuhan seperti Kubernet dalam hal ini digunakan untuk mengatur kontainer secara lokal dan lebih nyaman untuk pengembangan lokal atau apakah Kubernet lebih dari ini?
Vipin Menon
6
Apakah adil untuk membuat analogi berikut: 1. docker-compose <> minikube 2. docker-swarm <> kubernetes cluster 3. docker-cloud <> dikelola kubernet cluster oleh GCP, AWS, dll
Anoop
1
"Docker swarm digunakan untuk menjalankan dan MENGHUBUNGKAN kontainer di banyak host." : Apa artinya "menghubungkan" di sini? Koneksi jaringan?
smiley
1
@ seseorang_smiley Ya. Ini menciptakan jaringan overlay
OneCricketeer
136

Selain jawaban @ yamenk , saya ingin menambahkan beberapa detail di sini yang mungkin membantu orang-orang dengan perjalanan mereka memahami Kubernetes.

Jawaban singkat:

  • docker-compose: adalah alat yang mengambil file YAML yang menjelaskan aplikasi multi-kontainer Anda dan membantu Anda membuat , memulai / menghentikan , menghapus semua kontainer itu tanpa harus mengetik banyak docker ...perintah untuk setiap kontainer.
  • Kubernetes: adalah platform untuk mengelola beban kerja dan layanan kemas , yang memfasilitasi konfigurasi dan otomasi deklaratif. Apa? 🤔 Terus membaca ...

Susun Docker

(dari dokumen): Compose adalah alat untuk mendefinisikan dan menjalankan aplikasi Docker multi-kontainer. Dengan Tulis, Anda menggunakan file YAML untuk mengonfigurasi layanan aplikasi Anda. Kemudian, dengan satu perintah, Anda membuat dan memulai semua layanan dari konfigurasi Anda.

Compose memiliki perintah untuk mengelola seluruh siklus aplikasi Anda:

  • Mulai, hentikan, dan bangun kembali layanan
  • Lihat status menjalankan layanan
  • Streaming keluaran log dari layanan yang berjalan
  • Jalankan perintah satu kali pada layanan

Kubernetes

(dari Pengantar Kubernetes ): Kubernetes adalah orkestra kontainer seperti Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Kontainer orkestra adalah alat yang di-host grup bersama untuk membentuk sebuah cluster, dan membantu kami memastikan aplikasi:

  • toleran terhadap kesalahan,
  • dapat mengukur, dan melakukan ini sesuai permintaan
  • menggunakan sumber daya secara optimal
  • dapat menemukan aplikasi lain secara otomatis, dan berkomunikasi satu sama lain
  • dapat diakses dari dunia eksternal
  • dapat memperbarui / kembalikan tanpa downtime.

Banyak orang berpendapat bahwa Kubernet sulit dipelajari. Itu karena itu memecahkan serangkaian masalah dan orang-orang mencoba untuk memahami tanpa mengetahui semua prasyarat. Ini membuatnya rumit. Mulailah menyusun potongan-potongan teka-teki dengan membaca tentang konsep / istilah seperti berikut ini. Proses ini akan membantu Anda memahami jenis masalah yang coba dipecahkan oleh Kubernetes:

  • Aplikasi 12 faktor,
  • Binpacking otomatis,
  • Mekanisme penyembuhan diri,
  • Penskalaan horisontal,
  • Penemuan layanan dan penyeimbangan beban,
  • Peluncuran dan pengembalian otomatis,
  • Penempatan Blue-Green / Penempatan Canary
  • Rahasia dan manajemen konfigurasi,
  • Orkestrasi penyimpanan

Dan karena ada banyak hal berbeda di sekitar wadah dan pengelolaannya, perhatikan lanskap Cloud Native:

Versi interaktif di sini: landscape.cncf.io/

masukkan deskripsi gambar di sini

Pembaruan

Mei 2020: Spesifikasi Pembuatan Docker sekarang menjadi standar terbuka

Bekerja dengan AWS, Microsoft, dan lainnya dalam komunitas open source, kami telah memperluas Spesifikasi Tulisan untuk mendukung platform asli cloud seperti Kubernetes, dan Amazon ECS sebagai tambahan dari platform Tulis yang ada. Lebih lanjut di sini: blog / compose-spec.io

tgogo
sumber
Jawaban ini sudah usang. docker.com/blog/…
OneCricketeer
1
Terima kasih @ cricket_007 Saya akan mengawasi ini, tapi saya pikir posting blog ini dari 2018 adalah jenis ... "pemasaran". Ini tahun 2020 dan jika Anda memeriksa dokumen di Docker Compose dan Compose versi file 3 referensi tidak ada tentang Kubernetes.
tgogos
Begitu? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
oh, luar biasa bahwa ada lapisan penulisan yang abstrak semua sintaks kubernet! Terima kasih @ cricket_007.
George Katsanos
28

Jika Anda menjaring kontainer dengan host yang sama, gunakan untuk menulis docker .

Jika Anda menjaring kontainer di beberapa host, gunakan kubernet .

Aniket Alhat
sumber
2
Itulah jenis jawaban yang saya harapkan! Meskipun bisa memiliki penjelasan lebih lanjut, "tl; dr" sebenarnya adalah intinya. Tidak ada jawaban lain yang benar-benar mengatakan itu!
The Godfather
8

Perbedaan pertama adalah antara mesin wadah dan wadah orkestra.

docker adalah mesin kontainer, itu membuat Anda membangun dan menjalankan biasanya tidak lebih dari satu kontainer paling banyak, secara lokal di PC Anda untuk tujuan pengembangan.

docker-compose adalah utilitas Docker untuk menjalankan banyak wadah dan membiarkannya berbagi volume dan jaringan melalui fitur mesin docker, berjalan secara lokal untuk meniru komposisi layanan dan secara jarak jauh pada kluster.

Kubernetes adalah platform orkestrasi wadah, menangani wadah yang berjalan dan meningkatkan fitur mesin sehingga wadah dapat disusun dan ditingkatkan untuk melayani aplikasi yang kompleks (semacam PaaS, dikelola oleh Anda atau penyedia cloud). Fitur Kubernet utama adalah untuk memisahkan infrastruktur dari aplikasi menggunakan kontainer, dan itu juga terbuka untuk mesin lain yang Docker, misalnya dapat menjalankan kontainer dengan rkt atau cri-o.

Docker cloud juga merupakan tawaran PaaS yang akan memungkinkan Anda menjalankan dan mengatur kontainer melalui dockerAPI engine.

Sekarang tergantung pada kebutuhan Anda, tingkat kontrol pada infrastruktur dan target audiens Anda dapat menggunakan Kubernet di baremetal, atau Azure ACS atau Google GKE, dll ...

Semoga ini bisa membantu :) Salam

Francesco Gualazzi
sumber
1
Saya agak bingung mengapa Anda biasanya hanya menjalankan satu kontainer di buruh pelabuhan? Meskipun saya pikir Docker-compose adalah solusi yang lebih baik, tidak ada yang menghentikan Anda dari memulai banyak wadah tanpa itu!
Peter
oh ya, kadang-kadang saya memiliki mysql berjalan di latar belakang kemudian mulai httpd dan nginx sebagai wadah mandiri ... tapi kemudian ketika saya ingin semuanya otomatis saya pasti akan membangun buruh pelabuhan-compose.yml untuk menentukan dependensi, jaringan, dll. ..
Francesco Gualazzi
6

Docker Compose bukan alat yang siap produksi. Ini berfungsi baik untuk PoC atau lingkungan pengembangan, tetapi tidak memiliki banyak kemampuan yang kurang lebih merupakan taruhan meja untuk penggunaan produksi yang serius. Swarm lebih siap dalam produksi, tetapi saya tidak akan pernah berinvestasi ke Swarm dalam skenario greenfield. Kubernetes telah memenangkan pertarungan orkestrasi, sebagaimana dibuktikan dengan dimasukkannya ke dalam Docker Desktop dan ditawarkan oleh semua penyedia cloud utama. Kubernetes jauh lebih mampu dan memiliki lebih banyak dukungan komunitas dan perusahaan.

Saya akan merekomendasikan menyelam ke dalam beberapa tutorial Kubernet yang tersedia di Pluralsight, Linux Academy, dll. Dan memutar gugusan untuk bermain-main dengan di platform cloud pilihan Anda (EKS, AKS, GKE, dll.). Jika Anda mencoba untuk menggunakan bare metal, lihat OpenShift, tetapi ketahuilah bahwa Anda kehilangan sebagian keajaiban Kubernet di pengaturan ini.

Ashok Reddy
sumber
Setuju bahwa k8s telah "menang" (untuk saat ini). Tetapi Mesos dulu disebut sebagai standar emas untuk kluster produksi . DC / OS melakukan pekerjaan yang baik untuk mendorong keluar fitur-fitur perusahaan, tetapi sekarang Anda bahkan dapat menjalankan beberapa cluster K8 dalam lingkungan Mesos dan mengaksesnya dari platform agnostik vendor tunggal sehingga mana yang benar-benar lebih baik?
OneCricketeer
3

Susunan Docker:

Dalam sebuah docker-compose.ymlfile, setiap entri secara opsional docker-composedapat membangun gambar. setiap entri dapat mewakili satu wadah yang ingin kita buat dan setiap entri mendefinisikan persyaratan atau port jaringan.

Kubernetes:

Kubernetes mengharapkan semua gambar sudah dibangun dan ada satu file konfigurasi per objek yang ingin kita buat dan kita harus mengatur semua jaringan secara manual.

Jadi kami memastikan gambar kami di-host di Docker Hub, membuat satu file konfigurasi untuk membuat wadah dan satu file konfigurasi untuk mengatur jaringan.

Daniel
sumber
1

Docker-Compose adalah file penyebaran yang telah ditentukan sebelumnya satu atau lebih wadah dengan lingkungannya seperti volume, jaringan, perintah untuk menjalankan dan sebagainya.

Kubernetes, di sisi lain, adalah sistem yang mengatur wadah buruh pelabuhan dan layanan mikro lainnya oleh dan membuat mereka diskalakan dan dapat diandalkan di beberapa node

Yaniv Hakim
sumber
1

Menulis Docker: kontainer buruh pelabuhan dapat dijalankan langsung tanpa bantuan file yaml. Tetapi dengan bantuan Docker compose tool container properties dapat didefinisikan di dalam file yang disebut file docker-compose.yml. silakan temukan contoh file yml di bawah ini untuk lebih jelasnya.

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

nama gambar, jumlah replika, dll. dapat dikonfigurasi melalui file yml.

Kubernetes: Ini adalah platform manajemen kontainer yang dijalankan di atas Docker yang dibangun oleh google. Docker swam adalah platform manajemen wadah lain yang dibangun oleh docker sendiri. Kubernetes juga menyediakan fasilitas untuk menyimpan konfigurasi yang terkait dengan pod (sesuai dengan container in docker) dalam file yaml seperti penulisan docker. contoh file yaml

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

di sini juga gambar, port yang akan dibuka dan pod to host pemetaan port, dll. dapat diberikan. seperti penulisan docker, kubectl apply -f adalah perintah untuk menjalankan file ini.

Nalin Kularathna
sumber
Jadi, apa bedanya? =)
The Godfather
buruh pelabuhan menulis adalah konsol untuk menjalankan gambar buruh pelabuhan dan kubernetes tidak seperti itu adalah sistem orkestrasi wadah. jadi keduanya tidak dapat dibandingkan dan sama sekali berbeda. tapi kubernetes memiliki kubectl itu juga konsol dan mirip dengan komposisi buruh pelabuhan
Nalin Kularathna