GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Docker vs containerd vs CRI-O:un confronto approfondito

Introduzione

La distribuzione dei container è un metodo pratico per garantire portabilità, scalabilità e agilità nel mondo DevOps. Dal test alla produzione, i container facilitano l'intero processo di sviluppo del software.

Le piattaforme per la gestione e l'orchestrazione dei container sono progettate per essere intuitive e dirette per l'utente finale. Tuttavia, le piattaforme stesse sono complesse e consistono in più progetti coordinati.

Questo articolo spiegherà le differenze tra tre parti importanti dell'ecosistema di gestione dei container:Docker, containerd e CRI-O.

L'ecosistema dei container

Docker e Kubernetes sono due piattaforme leader nell'ecosistema dei container. Per garantire l'interoperabilità, la comunità ha concordato diversi standard.

I due standard più importanti sono:

  • CRI - Interfaccia di runtime del contenitore. Consente a Kubernetes di essere compatibile con diversi runtime di container, incluso il container di Docker .
  • OCI - Iniziativa sui container aperti. Standardizza le immagini del contenitore e i tempi di esecuzione.

L'infografica di seguito mostra come CRI e OCI aiutano a connettere Kubernetes con Docker:

Porta mobile

Docker è un insieme di progetti di gestione dei container gestiti dalla società denominata Docker. Questi progetti collaborano per fornire una piattaforma completa per la distribuzione di container.

I progetti più importanti sono:

  • CLI della finestra mobile - Un programma di interfaccia a riga di comando. Gli utenti creano e gestiscono i container Docker emettendo comandi CLI Docker.
  • contenitore - Un demone che ascolta i comandi dell'utente. Estrae e archivia le immagini richieste e controlla il ciclo di vita del contenitore.
  • runC - Un runtime contenitore leggero e portatile. runC è un componente di basso livello che integra i componenti necessari a Docker per interagire con il sistema locale. I contenitori creati da questi strumenti sono compatibili con OCI.

Immagini Docker

Un'immagine Docker è un modello di sola lettura che contiene il codice dell'applicazione, insieme alle librerie, agli strumenti e ad altre dipendenze necessarie per il corretto funzionamento dell'applicazione. Quando un utente esegue il comando di esecuzione in Docker, il modello di immagine viene utilizzato per distribuire un contenitore di app.

Le immagini Docker vengono create utilizzando Dockerfile, un documento di testo che contiene le informazioni sull'immagine necessarie. La build il comando utilizza Dockerfile e un contesto per creare l'immagine.

Docker per Kubernetes

Container Runtime Interface è un plug-in che consente a Kubernetes di comunicare con altri runtime di container. Tuttavia, poiché Docker non implementa CRI, Kubernetes ha introdotto un livello di compatibilità chiamato dockershim . Questo livello collega le due API.

A partire dalla versione 1.23, Kubernetes richiede che i runtime siano compatibili con CRI. Significa che Dockershim è ora deprecato e Docker Engine non è più supportato come runtime. Tuttavia, Kubernetes può ancora comunicare con Docker tramite container, che può essere conforme a CRI con un plug-in.

Interfaccia runtime contenitore (CRI)

Sebbene Kubernetes sia una piattaforma di orchestrazione di container, al livello più basso deve anche creare e gestire container. Per raggiungere questo obiettivo, Kubernetes utilizza i runtime dei container.

All'inizio, Docker Engine era l'unico runtime disponibile sulla piattaforma. Ma la popolarità della containerizzazione ha portato a soluzioni concorrenti e alla necessità di Kubernetes di supportarle tutte. Con l'Interfaccia di runtime del contenitore plug-in, Kubernetes può comunicare con tutti i principali runtime.

contenitore

containerd è una soluzione di runtime realizzata da Docker. Questo demone è disponibile per i sistemi operativi Linux e Windows. Nell'ambito del progetto Docker, containerd gestisce il trasferimento e l'archiviazione delle immagini, nonché la creazione, l'esecuzione e la supervisione dei container.

Kubernetes non ha bisogno dell'intera piattaforma Docker per utilizzare containerd. Con il plug-in di compatibilità CRI, Kubernetes e containerd possono comunicare direttamente.

CRI-O

CRI-O è un'implementazione leggera compatibile con OCI del CRI. È stato creato come alternativa al Docker Engine.

Con CRI-O, puoi avviare i pod Kubernetes ed estrarre le immagini necessarie. Tuttavia, non è un runtime. Viene invece utilizzato per avviare altri runtime compatibili con OCI di basso livello, come runC o Kata.

Open Container Initiative (OCI)

Docker e altri importanti attori del settore dei container hanno istituito l'Open Container Initiative (OCI) nel 2015. L'OCI mira a creare standard per i formati e i tempi di esecuzione dei container. Attualmente, l'OCI ha due specifiche:

  • Specifiche dell'immagine - la specifica dell'immagine che illustra come creare un'immagine conforme a OCI.
  • specifiche di runtime - la specifica di runtime per decomprimere il bundle del filesystem.

runC

runC è un runtime contenitore universale creato da Docker. Sebbene faccia parte del set di strumenti Docker, non richiede l'esecuzione della piattaforma Docker.

Alcune caratteristiche importanti di runC sono:

  • Supporto completo degli spazi dei nomi Linux.
  • Supporto nativo per le funzionalità di sicurezza di Linux, come AppArmor, SELinux, ecc.
  • Supporto nativo per i contenitori di Windows 10.
  • I contenitori creati e gestiti da runC sono conformi a OCI.

Docker
  1. Alcuni comandi DOCKER

  2. Un'introduzione a Docker

  3. Che cos'è containerd e come si collega a Docker e Kubernetes?

  4. Come eseguire MySQL in un contenitore Docker

  5. Come SSH in un contenitore Docker

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come configurare un container Docker Apache

Come eseguire i contenitori Docker

Cosa fare se un container Docker esce immediatamente

Utilizzo di Docker Desktop per gestire un container