MongoDB è un popolare database di documenti open source che offre prestazioni elevate e grande flessibilità. Ma hai provato a containerizzare un database MongoDB per i tuoi progetti? In caso contrario, allora sei pronto per 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 dei container Docker MongoDB!
Prerequisiti
Questo tutorial comprende dimostrazioni pratiche. Per seguire, assicurati di avere quanto segue:
- Una macchina Ubuntu – Questo tutorial utilizza Ubuntu 20.04 LTS
- Un utente con
sudo
permesso - Docker:questo tutorial utilizza Docker 20.10.9
Download dell'immagine Docker MongoDB
Prima di poter distribuire e gestire un container Docker MongoDB, devi prima scaricare un'immagine MongoDB dal Docker Hub in modo da poter eseguire il container MongoDB localmente.
Esegui la docker
comando seguente per scaricare l'immagine MongoDB Community Edition(CE) (pull mongo
), che Docker Hub sta ospitando. L'ultima versione di questa immagine al momento della scrittura è 4.2.
sudo docker pull mongo
Come puoi vedere di seguito, il comando estrae automaticamente l'ultima versione dell'immagine e la tagga come ultima .
Ora esegui le docker images
comando qui sotto per elencare tutte le immagini disponibili sul tuo server.
sudo docker images
Di seguito, puoi vedere l'immagine MongoDB contrassegnata come ultima .
Distribuzione di un contenitore Docker MongoDB
Dall'immagine MongoDB che hai scaricato, ora puoi distribuire un contenitore MongoDB. Inizializzerai il tuo contenitore MongoDB con l'eseguibile mongo, creerai una directory di dati. Definirai quindi la mappatura tra l'area dati del contenitore Docker e la macchina host.
1. Esegui mkdir
comando seguente per creare una directory di dati denominata mongodata
per memorizzare il database e i log di MongoDB.
sudo mkdir -p /mongodata
2. Quindi, esegui docker run
comando seguente per creare un contenitore con il nome mymongo
. Inoltre, il contenitore viene avviato con uno pseudo-TTY interattivo (-it
), nel caso in cui l'output debba essere visualizzato all'avvio del contenitore.
Infine, la directory appena creata mongodata è legato (-v
) nella directory interna, /data/db . Il -d
l'opzione avvia il contenitore in modalità scollegata, quindi viene eseguito come processo in background e restituisce l'output della console al momento della creazione.
Il sistema crea automaticamente /data/db directory quando esegui il contenitore per archiviare i dati delle modifiche apportate nel contenitore. Questa directory viene eseguita in una modalità simile a quella di sola lettura e consente l'archiviazione permanente dei dati sul sistema host.
sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo
Una volta che il comando è stato completato correttamente, vedrai un output come quello qui sotto.
3. Infine, esegui il docker ps
comando seguente per identificare l'ID del contenitore e verificarne lo stato. La docker ps
il comando mostra tutte le informazioni sul container attualmente in esecuzione.
Il
docker ps
il comando è paragonabile al normaleps
comando in Linux.
sudo docker ps
Nell'output mostrato di seguito, puoi vedere un Porte sezione che elenca tutte le porte assegnate al container per l'ascolto delle connessioni in entrata.
In questo esempio, porta 27017 è mappato sull'host. L'output seguente indica che puoi accedere all'istanza MongoDB su questo contenitore tramite localhost:27017 dall'ospite.
Forse vuoi vedere il file di log di
mymongo
container per determinare cosa è successo sul tuo database/istanza mongo quando qualcosa è andato storto. In tal caso, esegui idocker logs
comando, come questo:sudo docker logs docker-container
. Sostituiscidocker-container
con il nome del tuo container Docker.
Collegamento del contenitore Docker MongoDB a Bash Shell
Hai appena distribuito un container Docker MongoDB, ma come lo gestisci? Fallo collegando il contenitore Docker alla shell Bash con docker exec
prima il comando.
Collegare il tuo contenitore alla shell Bash è fondamentale poiché il contenitore è attualmente in esecuzione in modalità scollegata (in esecuzione in background). E se il contenitore viene eseguito in background, il contenitore non riceverà alcun input né visualizzerà l'output.
Esegui docker exec
comando seguente per allegare il tuo contenitore (mymongo
) alla shell Bash.
sudo docker exec -it mymongo bash
Al termine del comando, il tuo prompt cambierà in qualcosa di simile a quello seguente. Il numero alfanumerico univoco (77782fa95314 ) è l'ID del contenitore.
Gli ID contenitore sono essenziali per evitare conflitti di denominazione e identificare efficacemente i contenitori tra host, quindi cerca di non cambiarli.
Ora esegui mongo
comando senza argomenti per accedere alla shell MongoDB nel contenitore (mymongo). La shell MongoDB è dove esegui le tue query/comandi mongo.
Una volta che sei nel contenitore, puoi eseguire qualsiasi comando senza
sudo
prefisso poiché ora sei un utente root all'interno del contenitore. Ogni modifica che apporti al contenitore non influirà sul tuo sistema host.
mongo
Osservando il prompt mostrato di seguito, puoi dire che ora sei nella shell di MongoDB.
Se preferisci vedere tutti i comandi disponibili nella shell di MongoDB, esegui la
help
comando, come mostrato di seguito.
Creazione di un utente MongoDB amministrativo
Dopo aver distribuito un server MongoDB all'interno di un container Docker, creerai un utente MongoDB amministrativo. Un utente amministrativo ti consente di connetterti al server MongoDB e gestire i database.
1. Accedi nuovamente alla shell di MongoDB ed esegui use
comando seguente per passare prima all'admin
Banca dati. In questo modo l'utente amministrativo dispone delle autorizzazioni corrette per gestire i database.
use admin
Copia e incolla il codice seguente nel prompt di MongoDB per creare un utente amministrativo.
Il codice seguente utilizza db.createUser()
metodo per creare un utente con ruoli amministrativi. Il nome utente (user
) e password (pwd
) di seguito sono hardcoded, che puoi modificare in base alle tue preferenze.
# Create an administrative user
db.createUser(
{
# Sets the username for the administrative user
user: "ata",
# Sets the password for the administrative user
pwd: "password123",
# Sets the roles for the administrative user
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
Se il codice funziona, riceverai un messaggio come quello qui sotto nel prompt di MongoDB.
3. Esegui quit()
query di seguito per uscire dalla shell MongoDB.
quit()
4. Infine, esegui il seguente mongo
comando per testare l'utente amministrativo che hai creato (ata
) collegandosi al server MongoDB. Immettere la password per l'utente amministrativo quando richiesto.
mongo -u ata -p --authenticationDatabase admin
Come puoi vedere di seguito, il server MongoDB stampa la versione del server MongoDB se ti connetti al server con successo.
Forse vuoi testare ulteriormente l'utente amministrativo. In tal caso, esegui i comandi seguenti per mostrare tutti gli utenti nel database.
use admin
show users
Di seguito, puoi vedere che l'utente amministrativo che hai creato è nell'elenco.
Creazione di un database MongoDB
La gestione di un container Docker MongoDB non sarebbe completa senza la creazione di un database. Creerai un nuovo database MongoDB in cui memorizzerai i dati tramite la shell MongoDB.
1. Da una sessione interattiva all'interno del contenitore Docker, esegui show dbs
comando seguente per elencare tutti i database nel tuo server.
show dbs
Di seguito puoi vedere un database di amministrazione, un database di configurazione e un database locale. La shell MongoDB crea questi database per impostazione predefinita in ogni server MongoDB.
2. Quindi, esegui use
comando seguente per creare un nuovo database. Sostituisci <database_name>
con il nome del database di tua scelta. Ma per questo esempio, il database si chiama linux
.
Il
use
query cambia il database corrente in quello specificato se esiste. In caso contrario,use
query crea un nuovo database e vi passa automaticamente.
use <database_name>
3. Riesegui show dbs
comando come hai fatto in precedenza (passaggio uno) per vedere se il database che hai creato esiste.
show dbs
Non vedi ancora il database appena creato (linux) nell'elenco? MongoDB costruisce il database solo quando memorizzi i dati al suo interno per la prima volta. I dati possono assumere la forma di una raccolta o anche di un documento.
4. Ora copia/incolla il codice seguente nella shell di MongoDB e premi Invio .
Il codice seguente crea una nuova raccolta denominata linux_version
, che puoi cambiare con il nome che preferisci. La raccolta contiene dati nel formato coppia chiave:valore.
# Using insertOne method to insert data
db.linux_version.insertOne(
# Key:value pairs to insert to the database
{ "debian" : "11",
"ubuntu" : "20.04",
"rocky linux" : "8.4",
"alma linux" : "8"
}
)
Nell'output di seguito, puoi vedere la linux_version
raccolta viene creata e viene fornita con un ObjectID .
5. Esegui show collections
comando per vedere un elenco di raccolte e vedere se la nuova raccolta linux_version
esiste.
show collections
Di seguito puoi vedere che hai creato con successo la versione_linux collezione.
6. Infine, esegui il comando seguente per visualizzare e confermare i dati che hai inserito in linux_version
la raccolta è corretta. Il metodo pretty() ti consente di visualizzare i dati in un formato leggibile dall'uomo.
db.linux_version.find().pretty()
Se dovessi modificare i dati nel database, usa
Update()
metodo.
Puoi vedere che l'output di seguito è in un formato molto leggibile.
Riavvio del contenitore Docker MongoDB
A questo punto, hai un contenitore Docker MongoDB in esecuzione correttamente. Ma cosa succede se il contenitore non serve più o se non funziona? Un paio di comandi Docker possono aiutare a fermare, riavviare e persino rimuovere un container Docker MongoDB.
1. Esegui docker ps
comando seguente per elencare tutti i contenitori in esecuzione.
sudo docker ps
Prendi nota del nome e dell'ID del contenitore che desideri interrompere, riavviare o rimuovere, come mostrato di seguito.
2. Quindi, esegui uno dei docker stop
comandi seguenti per arrestare un contenitore MongoDB in esecuzione.
sudo docker stop mymongo
sudo docker stop container-ID
3. Eseguire nuovamente il docker ps
comando come hai fatto in precedenza (passaggio uno) per verificare se il contenitore è stato chiuso.
sudo docker ps
Come puoi vedere di seguito, il contenitore non è nell'elenco dei contenitori in esecuzione, il che indica che hai arrestato correttamente il contenitore.
4. Ora esegui uno dei docker start
comandi seguenti se si decide di riavviare un container.
sudo docker start mymongo
sudo docker start container-ID
5. Infine, riesegui la docker ps
comando per vedere se il contenitore è in esecuzione.
sudo docker ps
Forse non hai più bisogno di un contenitore. In tal caso, devi prima arrestare il contenitore ed eseguire
rm
comando per rimuovere un contenitore, come questo:sudo docker container rm mongodb
. Simile agli esempi precedenti, sostituiscimongodb
con il nome del contenitore o l'ID contenitore.
Conclusione
In questo tutorial, hai imparato come distribuire e gestire un container Docker MongoDB creando un utente amministratore per creare un database e archiviarvi i dati. Ti sei reso conto che puoi interrompere, riavviare e rimuovere i contenitori 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 di containerizzazione e ridurre l'overhead. Perché non utilizzare questo primo passaggio per esplorare di più MongoDB e vedere come un container Docker MongoDB può aiutare con i tuoi progetti?