Come distribuire e gestire un contenitore Docker MongoDB

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.

sudo docker pull mongo

Come puoi vedere qui sotto, il comando scarica automaticamente la versione più recente dell’immagine e la etichetta come latest.

Pulling mongo image

Ora esegui il comando docker images qui sotto per elencare tutte le immagini disponibili sul tuo server.

sudo docker images

Qui sotto, puoi vedere l’immagine di MongoDB etichettata come latest.

Listing all Docker images

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.

sudo mkdir -p /mongodata

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.

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

Una volta completato con successo il comando, verrà visualizzato un output simile a quello riportato di seguito.

Deploying MongoDB Container

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 comando ps normale in Linux.

sudo docker ps

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.

Checking Docker MongoDB Container Status

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 comando docker logs, come questo: sudo docker logs docker-container. Sostituisci docker-container con il nome del tuo contenitore Docker.

Reading Docker Container Log File

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.

sudo docker exec -it mymongo 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.

Attaching Docker MongoDB Container to Bash Shell

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.

mongo

Osservando il prompt mostrato di seguito, puoi capire di essere nella shell MongoDB.

Logging in to the MongoDB shell

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

Listing Available Commands in MongoDB Shell

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.

use admin
Switching to the Admin 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.

# Crea un utente amministratore
db.createUser(
{
	# Imposta il nome utente per l'utente amministratore
	user: "ata",
	# Imposta la password per l'utente amministratore
	pwd: "password123",
	# Imposta i ruoli per l'utente amministratore
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Se il codice funziona, riceverai un messaggio simile a quello di seguito nel prompt di MongoDB.

Creating an Administrative New User

3. Esegui la query quit() qui sotto per uscire dalla shell di MongoDB.

quit()

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.

mongo -u ata -p --authenticationDatabase admin

Come puoi vedere qui sotto, il server MongoDB stampa la versione del server se ti colleghi con successo.

Connecting to the MongoDB Server

Forse vuoi testare ulteriormente l’utente amministratore. Se è così, esegui i comandi sottostanti per mostrare tutti gli utenti nel database.

use admin
show users

Di seguito, puoi vedere che l’utente amministratore che hai creato è presente nell’elenco.

Listing Users in Database

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.

show dbs

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.

Listing all MongoDB Databases

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 query use crea un nuovo database e passa automaticamente ad esso.

use <database_name>
Creating a new MongoDB Database

3. Esegui nuovamente il comando show dbs come hai fatto in precedenza (passaggio uno) per verificare se il database creato esiste.

show dbs

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.

Listing all MongoDB Databases

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.

# Utilizzo del metodo insertOne per inserire dati
db.linux_version.insertOne(
	# Coppie chiave:valore da inserire nel database
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

Nell’output qui sotto, puoi vedere che la collezione linux_version è stata creata e ha un ObjectID.

Showing collection with its ID

5. Esegui il comando show collections per vedere un elenco di collezioni e verificare se la nuova collezione linux_version esiste.

show collections

Puoi vedere qui sotto che hai creato con successo la collezione linux_version.

Showing List of Collections

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.

db.linux_version.find().pretty()

Se modifichi mai i dati nel database, utilizza il metodo Update() .

Puoi vedere che l’output qui sotto è in un formato molto più leggibile.

Viewing Data from MongoDB Database

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.

sudo docker ps

Prendi nota del nome e dell’ID del contenitore che desideri fermare, riavviare o rimuovere, come mostrato di seguito.

Showing all running docker containers

2. Successivamente, esegui uno dei comandi docker stop qui sotto per fermare un contenitore MongoDB in esecuzione.

sudo docker stop mymongo
sudo docker stop container-ID

3. Riesegui il comando docker ps come hai fatto in precedenza (passaggio uno) per verificare se il contenitore è stato arrestato.

sudo docker ps

Come puoi vedere di seguito, il contenitore non è nella lista dei contenitori in esecuzione, il che indica che hai fermato correttamente il contenitore.

Listing all Containers

4. Ora esegui uno dei comandi docker start di seguito se decidi di riavviare un container.

sudo docker start mymongo
sudo docker start container-ID

5. Infine, esegui nuovamente il comando docker ps per verificare se il container è in esecuzione.

sudo docker ps

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, sostituisci mongodb 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?

Source:
https://adamtheautomator.com/docker-mongodb/