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

Dovresti eseguire un database in Docker?

La containerizzazione dei carichi di lavoro dei server sta diventando sempre più popolare e sta diventando sempre più comune vedere distribuzioni di server Web in esecuzione nei container. Gli stessi vantaggi possono essere applicati alle banche dati?

Docker può gestire carichi di lavoro con stato

È meglio iniziare ponendo una domanda diversa:C un esegui anche un database in Docker? In generale, Docker non è progettato per servizi con stato. Uno dei principali punti di forza dei container è che possono essere fermati e avviati a piacimento, di solito collegandosi a un'origine dati autorevole, come un database, per memorizzare il loro stato. Tutti i dati nel contenitore sono temporanei e vengono distrutti quando il contenitore viene eliminato.

Ciò rende l'esecuzione di carichi di lavoro con stato particolarmente impegnativo, ma fortunatamente Docker ha alcuni strumenti per gestire lo stato:montaggio del volume e dell'associazione. Questi consentono di montare una posizione sulla macchina host in una posizione nel contenitore, che memorizzerà i dati anche quando il contenitore si spegne. In questo modo, puoi eseguire container a lungo termine senza preoccuparti che i dati vadano persi.

I montaggi di volume sono il modo preferito per gestire la maggior parte degli scenari. Ti permettono di creare un volume, che è gestito da Docker:

docker volume create my-volume

Quindi monta quel volume in una posizione di destinazione all'interno del contenitore:

docker run --mount source=my-volume,target=/app

Le montature di rilegatura sono più semplici. Sono ciò che i volumi utilizzano sotto il cofano, ma ti consentono di impostare manualmente la posizione sul disco host anziché gestirlo tramite Docker.

docker run ~/nginxlogs:/var/log/nginx

In pratica, l'utilizzo di questi supporti può essere un po' più complicato. Molti servizi Docker gestiti, come ECS di AWS o Kubernetes gestiti, non ti danno accesso diretto al server sottostante e, di conseguenza, non sarai in grado di effettuare direttamente connessioni di montaggio vincolato. Solitamente questo si risolve con un servizio come EFS, che permette il montaggio su container ECS, o con un datastore esterno, come un database.

RELAZIONATO: Come installare Docker e Docker Compose su Linux

Dovresti scegliere Docker per il tuo database?

Docker generalmente non è ottimo per la gestione dello stato. I carichi di lavoro basati su Docker in genere esternalizzano questo problema ai database. Poiché un database è la soluzione al problema, è pratico inserire il database in Docker?

In gran parte, la risposta è "non di solito". Docker ha fatto molta strada sin dal suo inizio e non è più un'idea terribile o "sbagliata" containerizzare i database. Certamente può essere fatto e ha alcuni vantaggi. Tuttavia, per la maggior parte dei carichi di lavoro generali, i vantaggi non superano le complicazioni.

Per capire perché, diamo un'occhiata ai vantaggi offerti da Docker:

  • Facile scalabilità:i server possono essere creati e distrutti rapidamente per soddisfare la domanda
  • Strumenti CI/CD più semplici:le build automatizzate sono banali
  • Codificazione della tua infrastruttura:tutte le librerie e le impostazioni sottostanti sono gestite nel Dockerfile

La maggior parte di questi non si trasferisce esattamente bene ai carichi di lavoro del database, che spesso sono sforzi a lungo termine che favoriscono l'integrità dei dati sopra ogni altra cosa. In genere non si desidera ridimensionare automaticamente la maggior parte dei database; di solito non ricevono essi stessi aggiornamenti regolari del codice e, in quanto tali, non traggono molto vantaggio dall'esecuzione nei container. E, se stai semplicemente montando un'unità di archiviazione locale, perché non eseguirla al di fuori di Docker?

Se stai cercando di liberarti dalle complessità della gestione dei database, Docker non è lo strumento per il lavoro. È semplicemente una complicazione non necessaria per un carico di lavoro che può essere facilmente eseguito su un VPS standard. Probabilmente starai molto meglio utilizzando un database-as-a-service completamente gestito, come l'RDS di AWS. Questo porta gran parte dell'automazione per cui Docker è utile, senza il mal di testa di farlo da solo.

Il luogo principale in cui Docker può essere utile per i carichi di lavoro del database è negli ambienti di sviluppo. Docker semplifica la creazione di nuovi database con configurazioni diverse, il che rende rapidi i test. In produzione, tuttavia, le regole sono generalmente più rigide.


Docker
  1. Come eseguire Nginx in un contenitore Docker:una guida passo passo

  2. Come eseguire un programma all'interno di un contenitore Docker?

  3. Dovresti eseguire un database in Docker?

  4. Come eseguire MySQL in un contenitore Docker

  5. 10 comandi mortali che non dovresti mai eseguire su Linux

Che cos'è Docker Compose e come lo usi?

Come eseguire un'app .NET in Docker

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come eseguire i contenitori Docker

Esegui Docker Container in background (modalità separata)