MongoDB è un popolare database di documenti open-source che offre elevate prestazioni e grande flessibilità. Ma hai provato a containerizzare un database MongoDB per i tuoi progetti? Se non l’hai ancora fatto, allora ti aspetta una sorpresa!
In questo tutorial, imparerai come distribuire, proteggere e gestire MongoDB in modo efficace con Docker. Quindi continua a leggere e diventa il tuo maestro nella distribuzione di container Docker MongoDB!
Prerequisiti
Questo tutorial comprende dimostrazioni pratiche. Per seguirlo, assicurati di avere quanto segue:
- Una macchina Ubuntu: questo tutorial utilizza Ubuntu 20.04 LTS
- A user with
sudo
permission - Docker: questo tutorial utilizza Docker 20.10.9
Scaricamento dell’immagine Docker MongoDB
Prima di poter distribuire e gestire un container Docker MongoDB, è necessario scaricare un’immagine MongoDB dal Docker Hub in modo da poter eseguire il container MongoDB in locale.
Esegui il comando docker
qui sotto per scaricare l’immagine di MongoDB Community Edition(CE) dal Docker Hub. La versione più recente di questa immagine al momento della scrittura è la 4.2.
Come puoi vedere qui sotto, il comando scarica automaticamente la versione più recente dell’immagine e la etichetta come latest.

Ora esegui il comando docker images
qui sotto per elencare tutte le immagini disponibili sul tuo server.
Qui sotto, puoi vedere l’immagine di MongoDB etichettata come latest.

Deploy di un container Docker MongoDB
Dall’immagine di MongoDB che hai scaricato, puoi ora deployare un container MongoDB. Inizializzerai il tuo container MongoDB con l’eseguibile di mongo, creerai una directory di dati. Successivamente, definirai il mapping tra l’area dati del container Docker e la macchina host.
1. Esegui il comando mkdir
qui sotto per creare una directory di dati chiamata mongodata
per memorizzare il database e i log di MongoDB.
2. Successivamente, esegui il comando docker run
qui sotto per creare un container con il nome mymongo
. Inoltre, il container viene avviato con un pseudo-TTY interattivo (-it
), nel caso in cui l’output debba essere mostrato durante l’avvio del container.
Infine, la directory appena creata mongodata è collegata (-v
) alla directory interna /data/db. L’opzione -d
avvia il container in modalità detached, in modo da eseguirlo come processo in background e restituire l’output della console durante la creazione.
Il sistema crea automaticamente la directory /data/db quando si avvia il container per memorizzare i dati delle modifiche effettuate al suo interno. Questa directory funziona in modalità di sola lettura e consente la memorizzazione persistente dei dati nel sistema host.
Una volta completato con successo il comando, verrà visualizzato un output simile a quello riportato di seguito.

3. Infine, eseguire il comando docker ps
di seguito per identificare l’ID del container e verificare il suo stato. Il comando docker ps
mostra tutte le informazioni sul container attualmente in esecuzione.
Il comando
docker ps
è simile al comandops
normale in Linux.
Nell’output mostrato di seguito, è possibile vedere una sezione Ports che elenca tutte le porte assegnate al container per l’ascolto delle connessioni in ingresso.
In questo esempio, la porta 27017 è mappata sull’host. L’output di seguito indica che è possibile accedere all’istanza di MongoDB su questo contenitore tramite localhost:27017 dall’host.

Forse desideri visualizzare il file di registro del contenitore
mymongo
per determinare cosa è successo al tuo database/istanza di MongoDB quando qualcosa è andato storto. Se è così, esegui il comandodocker logs
, come questo:sudo docker logs docker-container
. Sostituiscidocker-container
con il nome del tuo contenitore Docker.

Attaccare il contenitore Docker MongoDB alla shell Bash
Hai appena distribuito un contenitore Docker MongoDB, ma come lo gestisci? Fallo attaccando il contenitore Docker alla shell Bash con il comando docker exec
prima di tutto.
Attaccare il contenitore alla shell Bash è fondamentale poiché il contenitore è attualmente in esecuzione in modalità distaccata (in background). E se il contenitore viene eseguito in background, il contenitore non riceverà né input né visualizzerà output.
Esegui il comando docker exec
sottostante per attaccare il tuo contenitore (mymongo
) alla shell Bash.
Quando il comando viene completato, il prompt cambierà in qualcosa di simile a quello riportato di seguito. Il numero alfanumerico univoco (77782fa95314) è l’ID del contenitore.
Gli ID dei contenitori sono essenziali per evitare conflitti di denominazione e identificare efficacemente i contenitori tra gli host, quindi cerca di non modificarli.

Ora esegui il comando mongo
senza argomenti per accedere alla shell MongoDB nel contenitore (mymongo). La shell MongoDB è dove esegui le tue query/comandi mongo.
Una volta all’interno del contenitore, puoi eseguire qualsiasi comando senza il prefisso
sudo
poiché sei ora un utente root all’interno del contenitore. Ogni modifica che apporti nel contenitore non influirà sul tuo sistema host.
Osservando il prompt mostrato di seguito, puoi capire di essere nella shell MongoDB.

Se preferisci visualizzare tutti i comandi disponibili nella shell MongoDB, esegui il comando
help
come mostrato di seguito.

Creazione di un utente amministratore MongoDB
Dopo aver distribuito un server MongoDB all’interno di un contenitore Docker, creerai un utente amministratore MongoDB. Un utente amministratore ti consente di connetterti al server MongoDB e gestire i database.
1. Accedi nuovamente alla shell MongoDB e esegui il comando use
di seguito per passare al database admin
. In questo modo l’utente amministratore otterrà le autorizzazioni necessarie per gestire i database.

Copia e incolla il seguente codice nel prompt di MongoDB per creare un utente amministratore.
Il codice qui sotto utilizza il metodo db.createUser()
per creare un utente con ruoli amministrativi. Il nome utente (user
) e la password (pwd
) qui sotto sono hardcoded, che puoi cambiare in base alle tue preferenze.
Se il codice funziona, riceverai un messaggio simile a quello di seguito nel prompt di MongoDB.

3. Esegui la query quit()
qui sotto per uscire dalla shell di MongoDB.
4. Infine, esegui il seguente comando mongo
per testare l’utente amministratore che hai creato (ata
) collegandoti al server MongoDB. Inserisci la password per l’utente amministratore quando richiesto.
Come puoi vedere qui sotto, il server MongoDB stampa la versione del server se ti colleghi con successo.

Forse vuoi testare ulteriormente l’utente amministratore. Se è così, esegui i comandi sottostanti per mostrare tutti gli utenti nel database.
Di seguito, puoi vedere che l’utente amministratore che hai creato è presente nell’elenco.

Creazione di un database MongoDB
Gestire un container Docker MongoDB non sarebbe completo senza la creazione di un database. Creerai un nuovo database MongoDB in cui archivierai i dati tramite la shell di MongoDB.
1. Da una sessione interattiva all’interno del container Docker, esegui il comando show dbs
di seguito per elencare tutti i database nel tuo server.
Di seguito, puoi vedere un database admin, un database config e un database locale. La shell di MongoDB crea questi database per impostazione predefinita in ogni server MongoDB.

2. Successivamente, esegui il comando use
di seguito per creare un nuovo database. Sostituisci <nome_database>
con il nome del database da te scelto. Ma per questo esempio, il database si chiama linux
.
La query
use
passa al database corrente quello specificato se esiste. In caso contrario, la queryuse
crea un nuovo database e passa automaticamente ad esso.

3. Esegui nuovamente il comando show dbs
come hai fatto in precedenza (passaggio uno) per verificare se il database creato esiste.
Ancora non vedo il database appena creato (linux) nell’elenco? MongoDB costruisce il database solo quando si memorizzano i dati per la prima volta. I dati possono essere sotto forma di una raccolta o anche di un documento.

4. Ora copia/incolla il codice qui sotto nella shell di MongoDB e premi Invio.
Il codice qui sotto crea una nuova collezione chiamata linux_version
, che puoi cambiare con il nome che preferisci. La collezione contiene dati nel formato chiave:valore.
Nell’output qui sotto, puoi vedere che la collezione linux_version
è stata creata e ha un ObjectID.

5. Esegui il comando show collections
per vedere un elenco di collezioni e verificare se la nuova collezione linux_version
esiste.
Puoi vedere qui sotto che hai creato con successo la collezione linux_version.

6. Infine, esegui il comando di seguito per visualizzare e confermare i dati inseriti nella raccolta linux_version
. Il metodo pretty() ti consente di visualizzare i dati in un formato leggibile dall’utente.
Se modifichi mai i dati nel database, utilizza il metodo
Update()
.
Puoi vedere che l’output qui sotto è in un formato molto più leggibile.

Riavviare il contenitore Docker MongoDB
Ora hai un contenitore Docker MongoDB in esecuzione correttamente. Ma cosa succede se non hai più bisogno del contenitore, o se non funziona? Alcuni comandi Docker possono aiutarti a fermare, riavviare e persino rimuovere un contenitore MongoDB Docker.
1. Esegui il comando docker ps
qui sotto per elencare tutti i contenitori in esecuzione.
Prendi nota del nome e dell’ID del contenitore che desideri fermare, riavviare o rimuovere, come mostrato di seguito.

2. Successivamente, esegui uno dei comandi docker stop
qui sotto per fermare un contenitore MongoDB in esecuzione.
3. Riesegui il comando docker ps
come hai fatto in precedenza (passaggio uno) per verificare se il contenitore è stato arrestato.
Come puoi vedere di seguito, il contenitore non è nella lista dei contenitori in esecuzione, il che indica che hai fermato correttamente il contenitore.

4. Ora esegui uno dei comandi docker start
di seguito se decidi di riavviare un container.
5. Infine, esegui nuovamente il comando docker ps
per verificare se il container è in esecuzione.
Forse non hai più bisogno di un container. In tal caso, devi prima fermare il container e poi eseguire il comando
rm
per rimuovere un container, come segue:sudo docker container rm mongodb
. Come nei precedenti esempi, sostituiscimongodb
con il nome o l’ID del container.
Conclusione
In questo tutorial, hai imparato come distribuire e gestire un container Docker MongoDB creando un utente amministratore per creare un database e archiviare dati al suo interno. Hai capito che puoi fermare, riavviare e rimuovere i container che non ti servono più per mantenere pulite le tue immagini Docker.
La distribuzione e la gestione di MongoDB con Docker è il primo passo per sfruttare la tecnologia della containerizzazione e ridurre gli overhead. Perché non utilizzare questo primo passo per esplorare MongoDB ulteriormente e vedere come un container Docker MongoDB può aiutarti nei tuoi progetti?