Qual è la differenza tra Docker Compose e Kubernetes?


329

Mentre mi tuffo in Docker, Google Cloud e Kubernetes, e senza ancora capirli tutti e tre, mi sembra che questi prodotti si sovrappongano, ma non sono compatibili.

Ad esempio, un docker-compose.ymlfile deve essere riscritto per poter distribuire un'app su Kubernetes.

Qualcuno potrebbe fornire una descrizione approssimativa e di alto livello di dove si sovrappongono Docker, Docker Compose, Docker Cloud e Kubernetes e dove uno dipende dall'altro?

Risposte:


482

Docker :

  • Docker è la tecnologia container che consente di containerizzare le applicazioni.
  • Docker è il fulcro dell'utilizzo di altre tecnologie.

Docker Compose

  • Docker Compose consente di configurare e avviare più contenitori Docker.
  • Docker Compose viene utilizzato principalmente come supporto quando si desidera avviare più contenitori Docker e non si desidera avviare ciascuno separatamente utilizzando docker run ....
  • Docker Compose viene utilizzato per l'avvio di contenitori sullo stesso host.
  • Docker Compose viene utilizzato al posto di tutti i parametri opzionali durante la creazione e l'esecuzione di un singolo contenitore docker.

Docker Swarm

  • Docker Swarm è per l'esecuzione e il collegamento di container su più host.
  • Docker Swarm è uno strumento di gestione e orchestrazione del cluster di container.
  • Gestisce i contenitori in esecuzione su più host e fa cose come il ridimensionamento, l'avvio di un nuovo contenitore in caso di arresto anomalo, i contenitori di rete ...
  • Docker Swarm è Docker in produzione. È lo strumento di orchestrazione Docker nativo incorporato nel motore Docker.
  • Il file Docker Swarm denominato file stack è molto simile a un file Docker Compose.

kubernetes

  • Kubernetes è uno strumento di orchestrazione di container sviluppato da Google.
  • L'obiettivo di Kubernetes è molto simile a quello di Docker Swarm.

Docker Cloud

  • Un pagamento enterprise service finestra mobile che permette di costruire e contenitori esecuzione su server cloud o server locali.
  • Fornisce un'interfaccia utente Web e un pannello di controllo centrale per eseguire e gestire i contenitori fornendo al contempo tutte le funzionalità Docker in un'interfaccia Web intuitiva.

Aggiornare:

Docker cloud "parzialmente" interrotto

I servizi su Docker Cloud che forniscono gestione di applicazioni, nodi e cluster di sciami verranno chiusi il 21 maggio [2020] ... build automatizzate e servizi di archiviazione del registro, non saranno interessati e continueranno a essere disponibili


Tutto bene, sull'ultima cosa "Docker cloud, ti permette di eseguire container .." praticamente, cosa puoi fare con l'esecuzione di questi container sul cloud? possono fornire endpoint accessibili al pubblico? essenzialmente una docker cloud è qualcosa di simile ad AWS ma per i container docker? (o è solo una libreria contenitore per la scoperta)
George Katsanos,

2
Ok scusa. Penso di essere ancora confuso. Quindi questo significa che docker-compose è come Kubernetes in quanto viene utilizzato per orchestrare i contenitori localmente ed è più comodo per lo sviluppo locale o Kubernetes è molto più di questo?
Vipin Menon,

6
È corretto creare la seguente analogia 1. docker-compose <> minikube 2. docker-sciame <> cluster kubernetes 3. docker-cloud <> cluster kubernetes gestiti da GCP, AWS, ecc.
Anoop

1
"Docker swarm è per l'esecuzione e la CONNESSIONE di contenitori su più host." : Cosa significa "connessione" qui? Connessione di rete?
qualcuno_ smiley

1
@someone_smiley Sì. Crea una rete overlay
OneCricketeer il

136

Oltre alla risposta di @ yamenk , vorrei aggiungere qui alcuni dettagli che potrebbero aiutare le persone nel loro percorso di comprensione di Kubernetes.

Risposta breve:

  • docker-compose: è uno strumento che accetta un file YAML che descrive la tua applicazione multi-contenitore e ti aiuta a creare , avviare / arrestare , rimuovere tutti quei contenitori senza dover digitare più docker ...comandi per ogni contenitore.
  • Kubernetes: è una piattaforma per la gestione di carichi di lavoro e servizi containerizzati , che facilita sia la configurazione dichiarativa che l'automazione. Cosa? 🤔 Continua a leggere ...

Docker Compose

(dai documenti): Compose è uno strumento per la definizione e l'esecuzione di applicazioni Docker multi-contenitore. Con Compose, si utilizza un file YAML per configurare i servizi dell'applicazione. Quindi, con un solo comando, crei e avvii tutti i servizi dalla tua configurazione.

Compose ha i comandi per gestire l'intero ciclo di vita della tua applicazione:

  • Avviare, arrestare e ricostruire i servizi
  • Visualizza lo stato dei servizi in esecuzione
  • Streaming dell'output del registro dei servizi in esecuzione
  • Esegui un comando unico su un servizio

kubernetes

(da Introduzione a Kubernetes ): Kubernetes è un orchestratore di container come Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Gli orchestrator dei contenitori sono gli strumenti che raggruppano gli host per formare un cluster e ci aiutano a verificare che le applicazioni:

  • sono tolleranti ai guasti,
  • può ridimensionare e farlo su richiesta
  • utilizzare le risorse in modo ottimale
  • può scoprire automaticamente altre applicazioni e comunicare tra loro
  • sono accessibili dal mondo esterno
  • può aggiornare / ripristinare senza tempi di inattività.

Molte persone sostengono che Kubernetes è difficile da imparare. È perché risolve una serie di problemi e le persone cercano di capire senza conoscere tutti i prerequisiti. Questo lo rende complicato. Inizia a mettere insieme i pezzi del puzzle leggendo concetti / termini come il seguente. Questo processo ti aiuterà a capire il tipo di problemi che Kubernetes cerca di risolvere:

  • App a 12 fattori,
  • Binpacking automatico,
  • Meccanismi di auto-guarigione,
  • Ridimensionamento orizzontale,
  • Rilevamento del servizio e bilanciamento del carico,
  • Distribuzioni e rollback automatici,
  • Distribuzioni blu-verdi / implementazioni canarie
  • Segreti e gestione della configurazione,
  • Orchestrazione di archiviazione

E poiché ci sono molte cose diverse nei container e nella loro gestione, tieni d'occhio il panorama Cloud Native:

Versione interattiva qui: landscape.cncf.io/

inserisci qui la descrizione dell'immagine

aggiornamenti

Maggio 2020: Docker Compose Specification ora è uno standard aperto

Lavorando con AWS, Microsoft e altri nella comunità open source, abbiamo esteso le specifiche Compose per supportare piattaforme native cloud come Kubernetes e Amazon ECS oltre alle piattaforme Compose esistenti. Altro qui: blog / compose-spec.io


Questa risposta è obsoleta. docker.com/blog/…
OneCricketeer

1
Grazie @ cricket_007 Lo terrò d'occhio, ma penso che questo post del blog del 2018 sia una specie di ... "marketing". È il 2020 e se si controllano i documenti nel riferimento alla versione 3 del file Docker Compose e Compose non c'è nulla su Kubernetes.
giovedì


1
oh, fantastico che ci sia uno strato di composizione che astragga tutta la sintassi delle kubernet! Grazie @ cricket_007.
George Katsanos,

28

Se si stanno collegando in rete contenitori con lo stesso host, selezionare Docker compose .

Se stai collegando in rete container tra più host, scegli kubernetes .


2
Questo è il tipo di risposta che mi aspettavo! Anche se potrebbe avere qualche spiegazione in più, la parte "tl; dr" è davvero il punto. Nessuna delle altre risposte lo dice davvero!
Il padrino,

8

la prima distinzione è tra il motore contenitore e l'orchestrator contenitore.

docker è un motore contenitore, ti consente di creare ed eseguire di solito non più di un contenitore al massimo, localmente sul tuo PC a scopo di sviluppo.

docker-compose è un'utilità Docker per eseguire più contenitori e consentire loro di condividere volumi e reti tramite le funzionalità del motore docker, viene eseguita localmente per emulare la composizione del servizio e in remoto sui cluster.

Kubernetes è una piattaforma di orchestrazione di container, che si occupa della gestione dei container e del miglioramento delle funzionalità del motore in modo che i container possano essere composti e ridimensionati per servire applicazioni complesse (specie di PaaS, gestite da te o dal fornitore di servizi cloud). La principale funzione di Kubernetes è quella di disaccoppiare l'infrastruttura dall'applicazione usando i container, ed è anche aperta per altri motori che Docker, ad esempio può far funzionare container con rkt o cri-o.

Docker cloud è anche un'offerta PaaS che ti consentirà di eseguire e orchestrare container attraverso l' dockerAPI del motore.

Ora, in base alle tue esigenze, al livello di controllo sull'infrastruttura e al pubblico di destinazione, puoi usare Kubernetes su baremetal, Azure ACS o Google GKE, ecc ...

Spero che questo abbia aiutato :) Saluti


1
Sono un po 'confuso perché di solito esegui un solo contenitore sulla finestra mobile? Mentre penso che Docker-compose sia una soluzione migliore, non c'è nulla che ti impedisca di avviare più contenitori senza di essa!
Peter,

oh sì, a volte ho un mysql in esecuzione in background, quindi avvio httpd e nginx come contenitori autonomi ... ma poi, quando voglio che tutto sia automatizzato, creerò sicuramente un docker-compose.yml per specificare dipendenze, reti, ecc. ..
Francesco Gualazzi,

6

Docker Compose non è uno strumento pronto per la produzione. Funziona alla grande per PoC o ambienti di sviluppo, ma manca di molte capacità che sono più o meno puntate da tavolo per un uso produttivo serio. Swarm è più pronto per la produzione, ma non investirò mai in Swarm in uno scenario greenfield. Kubernetes ha vinto la battaglia dell'orchestrazione, come evidenziato dalla sua inclusione in Docker Desktop e offerto da tutti i principali fornitori di cloud. Kubernetes è molto più capace e ha molto più supporto comunitario e aziendale.

Consiglierei di immergerti in alcuni dei tutorial di Kubernetes disponibili su Pluralsight, Linux Academy, ecc. E di creare un cluster con cui giocare nella tua piattaforma cloud preferita (EKS, AKS, GKE, ecc.). Se stai cercando di girare su bare metal, dai un'occhiata a OpenShift, ma riconosci che perdi un po 'della magia di Kubernetes in questa configurazione.


Concordato che k8s ha "vinto" (per ora). Ma Mesos era indicato come il gold standard per i cluster di produzione . DC / OS ha fatto un ottimo lavoro nel potenziare le funzionalità aziendali, ma ora puoi persino eseguire più cluster k8 all'interno di un ambiente Mesos e accedervi da un'unica piattaforma indipendente dal fornitore, il che è davvero migliore?
OneCricketeer

3

Docker Compose:

In un docker-compose.ymlfile ogni voce può facoltativamente arrivare docker-composea costruire un'immagine. ogni voce può rappresentare un singolo contenitore che vogliamo costruire e ogni voce definisce i requisiti di rete o le porte.

kubernetes:

Kubernetes si aspetta che tutte le immagini siano già costruite e che esiste un file di configurazione per oggetto che vogliamo creare e che dobbiamo configurare manualmente tutta la rete.

Quindi assicuriamo che la nostra immagine sia ospitata su Docker Hub, creiamo un file di configurazione per creare il contenitore e un file di configurazione per configurare la rete.


1

Docker-Compose è un file di distribuzione che ha predefinito uno o più container con il suo ambiente come volumi, rete, un comando da eseguire e così via.

Kubernetes, d'altra parte, è un sistema che orchestra container docker e altri microservizi e li rende scalabili e affidabili su più nodi


1

Composizione docker: i contenitori docker possono essere eseguiti direttamente senza assistenza di qualsiasi file yaml. Ma con l'aiuto di Docker comporre le proprietà del contenitore degli strumenti possono essere definite all'interno di un file chiamato docker-compose.yml. per ulteriori dettagli, consultare il file yml di esempio riportato di seguito.

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

nome dell'immagine, numero di repliche, ecc. possono essere configurati tramite file yml.

Kubernetes: questa è la piattaforma di gestione dei container eseguita su Docker creata da Google. Docker Swam è un'altra piattaforma di gestione dei container costruita dalla stessa docker. Kubernetes offre anche la possibilità di salvare la configurazione relativa ai pod (corrisponde al contenitore nella finestra mobile) nel file yaml come la finestra mobile componi. esempio di 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

qui si possono dare anche immagini, porte da aprire e pod per ospitare mappature delle porte, ecc. come docker compose, kubectl apply -f è il comando per eseguire questo file.


Quindi, qual è la differenza? =)
Il Padrino il

docker compose è una console per eseguire immagini docker e kubernetes non è come se fosse un sistema di orchestrazione container. quindi questi due non possono essere confrontati e totalmente diversi. ma kubernetes ha kubectl è anche una console e simile alla composizione
docker
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.