Vai al contenuto principale

Eseguire MongoDB in Docker: guida completa con esempi

Questa guida ti accompagna nell'esecuzione di MongoDB in Docker, coprendo sia i deployment rapidi da riga di comando sia le configurazioni complete con Docker Compose. È perfetta per chi vuole fare self-hosting o sperimentare in locale senza passare subito al cloud hosting.
· 5 min leggi

Scopri con l'IA

Quindi vuoi effettuare il self-hosting di MongoDB o iniziare a sperimentarlo in locale? Hai diverse opzioni per iniziare se non vuoi saltare subito su MongoDB Atlas, una delle quali è usare i container con Docker. 

Usare Docker è un'ottima scelta per gestire la tua istanza MongoDB perché richiede meno di un minuto per configurarla ed è facile da mantenere o spostare tra computer host.

In questo articolo vedremo alcuni approcci per distribuire MongoDB con Docker ed esploreremo diversi suggerimenti e trucchi lungo il percorso. Puoi anche dare un'occhiata a questo video per una panoramica rapida dell'argomento.

Prerequisiti

Per seguire questo tutorial, devi avere installato Docker Engine sul tuo computer. Può essere su macOS, Windows o Linux. Non è strettamente necessario installare Docker Desktop, ma potrebbe semplificarti l'esperienza con Docker a seconda del sistema operativo che stai usando. 

Per esempio, io sto usando Docker Engine tramite Rancher Desktop su macOS e funziona bene.

Per ripassare le tue competenze su Docker, vale la pena dare un'occhiata a Docker for Beginners: A Practical Guide to Containers per recuperare le basi.

Scaricare un'immagine Docker di MongoDB

Prima di poter eseguire MongoDB in un container Docker, devi innanzitutto scaricare un'immagine adatta alle tue esigenze. Dalla riga di comando, esegui quanto segue:

docker pull mongodb/mongodb-community-server:latest

Il comando sopra scaricherà l'immagine ufficiale di MongoDB Community Edition (CE) con il tag "latest". 

È importante notare che mongodb/mongodb-community-server e mongodb/mongodb-enterprise-server sono immagini Docker ufficiali mantenute da MongoDB. Tutte le altre immagini sono mantenute dalla community esterna e potrebbero dare risultati diversi o inattesi.

Una volta scaricata un'immagine, possiamo valutare le opzioni di deployment.

Eseguire MongoDB come container isolato con il comando Docker Run

Il modo più rapido per distribuire MongoDB con Docker è usare semplicemente il comando docker run con alcuni parametri di configurazione. Per esempio, puoi eseguire il seguente comando dalla riga di comando:

docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=nraboy -e MONGO_INITDB_ROOT_PASSWORD=password1234 --name mongodb mongodb/mongodb-community-server:latest

Il comando precedente prenderà la nostra immagine e la distribuirà come un container chiamato "MongoDB". Il container sarà mappato sulle porte, il che significa che l'host potrà interagire con esso sulla porta "27017". In questo esempio sono anche impostate le informazioni di autenticazione per l'utente root, ma a seconda delle tue esigenze di deployment, puoi usare Docker Secrets o un altro metodo protetto per passare informazioni sensibili.

Nell'esempio precedente, tutti i dati sono archiviati all'interno del container. I dati di MongoDB, che includono database, collection e persino documenti, persisteranno solo finché esiste quel particolare container. Può andare bene per i test, ma spesso vorrai una persistenza affidabile dei dati di MongoDB in Docker. Per gestire questo aspetto, dovresti creare un volume Docker usando il seguente comando:

docker volume create mongodb

Per dire al tuo container di usare quel volume, puoi modificare il comando di deployment in qualcosa di simile al seguente:

docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=nraboy -e MONGO_INITDB_ROOT_PASSWORD=password1234 -v mongodb:/data/db --name mongodb mongodb/mongodb-community-server:latest

Nota che questa volta stiamo specificando il volume da usare. Quando utilizzi un volume, puoi essere sicuro che i tuoi dati esisteranno anche dopo l'interruzione o l'aggiornamento del container.

Con MongoDB in esecuzione all'interno di un container Docker, puoi connetterti usando mongodb://nraboy:password1234@localhost:27017 come stringa di connessione dallo strumento che preferisci.

Includere MongoDB nel tuo stack o progetto con Docker Compose

Se prevedi di usare MongoDB con un progetto specifico, anch'esso gestito con Docker, probabilmente ha senso gestire MongoDB con una configurazione Docker Compose. Queste configurazioni sono spesso usate per isolare i tuoi progetti, spesso chiamati stack.

Crea un file docker-compose.yml da qualche parte sul tuo computer con il seguente contenuto:

services:
    mongodb:
        image: mongodb/mongodb-community-server:latest
        container_name: mongodb
        restart: unless-stopped
        ports:
            - "27017:27017"
        volumes:
            - mongodb:/data/db
        environment:
            MONGO_INITDB_ROOT_USERNAME: nraboy
            MONGO_INITDB_ROOT_PASSWORD: password1234

volumes:
    mongodb:
        external: true

La configurazione sopra usa informazioni che abbiamo già visto nel singolo comando da riga di comando. Come con l'altro metodo, qui si dà per scontato che tu abbia già creato un volume mongodb da far gestire a Docker. Ancora una volta, se devi farlo, esegui il seguente comando:

docker volume create mongodb

Ovviamente puoi gestire i tuoi volumi Docker come ritieni più opportuno. Creare un volume è solo una delle diverse possibilità.

Con la riga di comando impostata sulla stessa directory di lavoro del tuo file docker-compose.yml, esegui il seguente comando:

docker compose up -d

Il comando sopra avvia lo stack in modalità detached. 

Puoi verificare che tutto funzioni provando a connetterti alla tua istanza con uno strumento come MongoDB Compass, uno dei driver di linguaggio come Node.js o tramite la MongoDB Shell. 

Se hai seguito l'esempio alla lettera, la tua stringa di connessione sarà mongodb://nraboy:password1234@localhost:27017, ma a seconda di come hai proceduto potrebbe essere diversa.

Per arrestare la tua istanza MongoDB, esegui il seguente comando dalla riga di comando con la configurazione YAML nella stessa directory di lavoro:

docker compose down

Poiché stiamo usando un volume esterno, la prossima volta che avvierai il container, tutto sarà ancora persistito.

Conclusione

Docker rende semplice lavorare con MongoDB in un ambiente self-hosted o locale. Non devi preoccuparti delle configurazioni del sistema operativo in generale o delle differenze di esperienza tra un computer e un altro. Otterrai un'esperienza coerente ogni volta. 

Per fare un passo in più, vale la pena imparare come creare un database in MongoDB.

FAQs

Posso eseguire più container MongoDB contemporaneamente con Docker?

Sì, puoi eseguire più container MongoDB purché ciascuno esegua il mapping a una porta diversa o giri su una rete Docker separata per evitare conflitti.

Come eseguo il backup dei dati di un container MongoDB in Docker?

Per eseguire il backup dei dati, puoi usare docker cp per estrarre i file dal volume oppure usare mongodump all'interno del container. I volumi persistenti aiutano anche a mantenere i dati tra una sessione e l'altra.

È sicuro salvare le password di MongoDB nel file Docker Compose?

Non è l'ideale. Meglio usare Docker Secrets o file di variabili d'ambiente (.env) esclusi dal controllo di versione per gestire in modo sicuro le credenziali sensibili.

MongoDB funziona bene in Docker su Windows?

Sì, MongoDB funziona senza problemi in Docker su Windows, macOS e Linux, specialmente usando WSL 2 o Docker Desktop per Windows per garantire la compatibilità.

Posso usare MongoDB con Docker in produzione?

Sì, ma è consigliabile configurare correttamente rete, volumi di storage, autenticazione e backup prima di usare MongoDB containerizzato in produzione.

Come mi connetto a MongoDB in Docker da un altro container?

Usa Docker Compose e fai riferimento al container MongoDB con il nome del servizio come hostname. Questo abilita la comunicazione service-to-service sulla stessa rete.

Devo installare MongoDB in locale se uso Docker?

No. Docker esegue MongoDB in un ambiente containerizzato, quindi non devi installare MongoDB direttamente sulla macchina host.

Posso usare MongoDB Compass con un'istanza MongoDB in Docker?

Assolutamente. Ti basta usare la stringa di connessione corretta (ad es., mongodb://user:pass@localhost:27017) per collegarti da MongoDB Compass al tuo container locale.

Come monitoro le prestazioni di MongoDB in Docker?

Puoi integrare strumenti come mongostat, mongotop o soluzioni di monitoraggio esterne come Prometheus e Grafana per tracciare le prestazioni all'interno di Docker.

I miei dati MongoDB persisteranno in un container Docker?

Finché hai scelto di mappare la directory del container a un volume sulla macchina host, i dati dovrebbero persistere senza problemi tra aggiornamenti e riavvii.

Dovrei usare Docker o MongoDB Atlas?

Nella maggior parte degli scenari è meglio usare MongoDB Atlas per le funzionalità disponibili, i costi e la facilità d'uso, ma MongoDB tramite Docker è comunque un'opzione valida.

Devo usare Docker Desktop con MongoDB?

Docker Desktop semplifica il lavoro con Docker nella maggior parte dei casi, ma non è un requisito. La maggior parte delle distribuzioni Linux include Docker Engine e funzionano anche altre interfacce come Rancher Desktop.

Nic Raboy

Autore

Nic Raboy

Nic Raboy è un Responsabile Developer Relations presso MongoDB, dove guida un team di sviluppatori Python, Java, C# e PHP che creano contenuti straordinari per aiutare gli sviluppatori a integrare con successo MongoDB nei loro progetti. Ha esperienza con Golang e JavaScript e spesso scrive delle sue molte avventure nello sviluppo.

Argomenti

Correlato