Docker-compose MongoDB

Docker-compose MongoDB

Mantenere lo stato del contenitore Mongo attraverso gli aggiornamenti.

Tl; dr

Per coloro che hanno familiarità con il funzionamento dei volumi di MongoDB e Docker e anche per coloro che vogliono solo un rapido snippet di docker.YML per il loro progetto senza molti dettagli approfonditi, ecco un file di compose che farà il trucco. Crea una nuova directory denominata MongoDB e al suo interno crea un file denominato docker.YML e metti al suo interno i seguenti contenuti:

Versione: '3'
Servizi:
My-MongodB:
Immagine: Mongo: ultimo
Volumi:
- DB-Data:/Data/DB
- mongo-config:/data/configdb
Volumi:
DB-DATA:
Mongo-config:

Salva il file ed esegui dalla stessa directory:

$ Docker -Opse Up -D

Questo inizierà un servizio MongoDB con due volumi chiamati DB-Data e Mongo-Config la prossima volta che una nuova versione di Monogdb arriva in esecuzione:

$ Docker-compone

Rimuovi l'immagine attuale Docker RMI Mongo Scarica il nuovo Docker Pull Mongo: Ultime ed Run:

$ Docker -Opse Up -D

Nessuno dei tuoi dati andrà perso fintanto che non rimuovi intenzionalmente i volumi Docker per i dati DB e Mongo-Config. Potresti voler aggiungere servizi per il tuo server web front-end e altri servizi vari insieme al servizio My-MongoDB, ovviamente.

Cosa abbiamo fatto?

Bene, posso solo dirti dove MongoDB si aspetta che i volumi vengano montati e perché ho scritto il servizio in questo modo particolare. Tuttavia, ciò non ti aiuterebbe a scrivere il tuo file di composizione per la tua applicazione personalizzata. Forse non stai usando MongoDB, ma MariaDB o Postgres. Facciamo un passo indietro e andiamo a indagare un contenitore mongodb e comprendiamo il processo di pensiero dietro come è stato scritto il file di compose.

Cominciamo con un'installazione di Docker in ardesia pulita. Nessun contenitore in esecuzione, nessuna reti definite dall'utente, nessun volume. Eseguiamo un contenitore MongoDB usando la CLI:

$ Docker run -d --name mydb Mongo: ultimo

Ora se elenchiamo contenitori, volumi e reti come mostrato di seguito, vedremo alcuni nuovi membri:

$ Docker PS
Comando ID contenitore Comando immagine Nomi delle porte di stato creato
F22758A73BA0 MONGO: ultimo "Docker-Entrypoint.S ... "9 secondi fa su 7 secondi 27017/TCP MYDB
$ Docker Volume LS
Nome volume del driver
Locale C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369
DAA36A6A6A6F496075EF30BAF99B6AF9F6CFB9C60E96CC60E96CED8C102E27381C243233
$ Docker Network LS
Ambito da driver con nome ID di rete
C41B287F67AB Bridge Bridge Local
A49B31643FA9 host host locale
A69138357C76 Nessuno null locale

Non è stato aggiunto nulla di nuovo alla sezione Networks (vengono mostrate solo le impostazioni predefinite), ma sono stati creati due nuovi volumi con hash lunghi come loro nome.

Il nuovo contenitore si chiama MYDB e sta esponendo la porta 27017. È qui che un client mongo può connettersi e leggere o scrivere al database. Ispezioniamo ulteriormente questo contenitore:

$ Docker Ispezionare MyDB
..
"Monte": [

"Tipo": "Volume",
"Nome": "DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233",
"Fonte": "/var/lib/docker/volumes/daa36a6f496075ef30baf99b6af9f6b6cfb9c60e96ced88c102e273
81c243233/_data ",
"Destinazione": "/data/configdb",
"Driver": "Local",
"Modalità": "",
"RW": vero,
"Propagazione": ""
,

"Tipo": "Volume",
"Nome": "C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0Cafe0325D369",
"Fonte": "/var/lib/docker/volumes/c5f99e7d82894c1a1def4c48edfdf43220ebf6b92fcd49a15c0cafe
0325
d369/_data ",
"Destinazione": "/data/db",
"Driver": "Local",
"Modalità": "",
"RW": vero,
"Propagazione": ""

",
..

All'interno di quel lungo output JSON che si tradurrebbe dopo l'esecuzione del comando Ispect, noterai che ci sono due supporti. Questi sono i volumi Docker che abbiamo elencato in precedenza in merito all'interno del contenitore. I punti di montaggio sono /data /configdb e /data /db.
Dopo aver rimosso il contenitore:

$ Docker rm -f mydb

I volumi sono ancora intatti e puoi ancora vederli elencati (Docker Volumes LS). Quindi qualsiasi informazione memorizzata dal contenitore MongoDB è al sicuro con noi. Tuttavia, se proviamo a eseguire ancora una volta il contenitore MongoDB.

$ Docker run -d --name mydb2 mongo: ultimo

E quindi elenca i volumi (volume Docker LS) noterai che vengono creati e montati due nuovi volumi. Le informazioni che potremmo aver trattenuto nei volumi più vecchi non vengono utilizzate. Dobbiamo aggirare questo problema nominando noi stessi i volumi e quindi montandoli all'interno del contenitore nei loro rispettivi punti di montaggio. In questo modo, quando un nuovo contenitore MongoDB sostitutivo viene fatto girare e chiede volumi con nomi particolari Docker monterà con grazia i volumi più vecchi invece di crearne di nuovi.

Per raggiungere questo obiettivo ci riferiamo al docker.File YML menzionato nella sezione TL; DR e ora ha un po 'più senso.

Connessione a MongoDB

Potresti non avere ancora un'applicazione front-end. Se lo si desidera, puoi ancora connetterti al server MongoDB, creare un nuovo database al suo interno e aggiungere alcune coppie di valore chiave. Non è un tipico database SQL, ma piuttosto un negozio di valore chiave. Per vedere questo in azione, installa la bussola mongodb che è un programma client che è possibile eseguire sul desktop o sul laptop per connettersi al server di database.

Non è necessario farlo per scopi di produzione, i contenitori sulla stessa rete possono parlarsi tra loro, ma per motivi di sperimentazione, esponiamo la porta 27017, che è la porta predefinita su cui il server MongoDB ascolta. Per fare ciò, modifica il tuo documento.File YML come mostrato:

Versione: '3'
Servizi:
My-MongodB:
Immagine: Mongo: ultimo
Porte:
- 27017: 27017
Volumi:
- DB-Data:/Data/DB
- mongo-config:/data/configdb
Volumi:
DB-DATA:
Mongo-config:

Sollevare la distribuzione in esecuzione, questo ricrea la distribuzione se ne hai già uno in esecuzione:

$ Docker -Opse Up -D

La prossima cosa che vuoi fare è aprire la bussola mongodb sulla macchina locale e connettersi all'host Docker. Questo forse l'indirizzo localhost: 27017 se stai eseguendo un contenitore mongo sulla macchina locale. Se è in esecuzione altrove, utilizzare l'indirizzo IP o il nome di dominio di quella macchina con lo stesso numero di porta.

Fai clic su Connetti dall'angolo in basso e sarai connesso al database.

Creiamo un nuovo database e chiamalo myDatabase e al suo interno micollezione.

Dentro Mydatabase> micollection clicca su Inserisci documento. Qui possiamo aggiungere alcuni dati fittizi:

Ora puoi provare a abbattere la distribuzione e sbarazzarti dei contenitori effimeri. Riportalo di nuovo con nuovi contenitori e noterai che i dati che abbiamo creato sono ancora lì.

Conclusione

Qui abbiamo visto come eseguire e utilizzare il contenitore MongoDB per la tua applicazione. C'è ancora molto che è stato lasciato non detto, ad esempio, proteggere il database con una password, interrogare i dati e ridimensionare il database.

Puoi saperne di più qui o esaminare i documenti di tuo piacimento qui.