Configurazione del serverDocker
Avvia i server di database con un singolo comando
Docker Server Setup
Nota storica: questo è un riferimento di sviluppo locale del 2015. È utile per comprendere il vecchio flusso di lavoro, ma non trattare questi snippet come consigli attuali per la produzione. Oggi i file Docker Compose moderni, le reti personalizzate, le versioni di immagine fissate, l’autenticazione, i segreti e l’automazione degli aggiornamenti revisionata sono impostazioni di default più sicure.
A chi è destinata questa guida?
- Hai mai voluto testare un’app con un database “usa e getta”?
- Hai ereditato un codebase sospetto? Preferisci non condividere l’accesso al tuo database esistente?
- Lavori con clienti sensibili alla sicurezza? Non rischiare contaminazioni incrociate! Usa i container e controlla la persistenza dei dati!
- Non riesci ad aggiornare l’ambiente di sviluppo all’ultima versione del database perché le tue applicazioni legacy dipendono da una versione di MySQL vecchia di 12 anni?
Non lasciare che questi motivi ti ostacolino di nuovo!
Collegamenti rapidi ai 1‑liner
Questo articolo presenta comandi a una riga per avviare alcuni dei database più popolari, tra cui:
Nota: questi comandi sono stati scritti come scorciatoie per lo sviluppo locale. Se li adatti a un ambiente di produzione, aggiungi prima autenticazione, gestione dei segreti, backup, policy di rete, immagini fissate e un piano di aggiornamento.
Utenti Docker avanzati: se sei pratico di
docker-compose, potresti voler convertire i comandi shell qui sotto per usarli nei tuoi filedocker-compose.yml.
Server Postgres
Avvia un container, chiamandolo
pg-localhost
# Store db files on a local path, outside the containermkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'Regola le opzioni della riga di comando secondo necessità. (Gli argomenti del demone postgres iniziano subito dopo il nome dell’immagine Docker
postgres:16-alpine. Vedipostgres -c 'listen_addresses=*'...)
Accedi al prompt
psqlcome utente postgres
docker exec --user postgres -it pg-localhost psqlAccedi alla shell del container come root
docker exec -it pg-localhost bashNota: Il comando sopra utilizza le immagini di base ufficiali Alpine Linux. Non è il tipico ambiente Debian.
Per usare l’immagine di base debian/ubuntu, sostituisci
postgres:12-alpineconpostgres:12.
Server MongoDB
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'Ora che il server è avviato, verifica che i dati siano in $HOME/.mongodb con:
ls -lach $HOME/.mongodbColleghiamoci al server usando lo strumento da riga di comando mongosh. (Se non lo hai installato, vedi sotto.)
#> Usa gli argomenti predefiniti:mongoshE dovresti vedere qualcosa di simile:

Configurazione degli strumenti CLI di Mongo
Uso di brew su macOS
brew tap mongodb/brewbrew install mongodb-community-shellServer MySQL
AVVERTENZA: MODIFICA LA PASSWORD NELLA VARIABILE
MYSQL_ROOT_PASSWORDQUI SOTTO.
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8Server ElasticSearch
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'Note di sicurezza
NOTA: l’opzione di porta
-p 127.0.0.1:27017:27017impedisce l’accesso alla tua istanza se non dal network localhost del server Docker.
Per “pubblicare” le porte esposte, rimuovi il prefisso IP locale per consentire l’accesso esterno:-p 27017:27017. Assicurati di aver adottato le precauzioni di sicurezza necessarie.
Consigliato: Usa sempre uno strumento di scansione delle porte (come nmap o masscan) per verificare la configurazione di rete (da un sistema separato su un’altra rete).
Ora che hai i comandi per avviare i tuoi server di database, il passo successivo è impacchettare la tua applicazione come immagine Docker. Parte 2 continua qui sotto:
Impacchettare un’app Web NodeJS
- Aggiungi un file vuoto chiamato
Dockerfilenella radice del progetto. - (Opzionale, consigliato) Aggiungi un
.dockerignoreusando le regole di.gitignoreper escludere percorsi non essenziali e di grandi dimensioni. Per impostazione predefinita vengono inclusi tutti i file del progetto.
Crea un Dockerfile nella radice delle tue app
# Example for NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Overridable CommandCMD ["npm", "start"]È più semplice mostrare come avviare il Dockerfile e dimostrare i risultati tramite console (vedi i comandi sotto).
Nel terminale, cd nella cartella del progetto ed esegui il comando build ogni volta che distribuisci modifiche — o desideri cambiare/aggiornare il SO o la configurazione dell’ambiente.
docker build -t app-name-here .Riferimento ai Comandi Chiave di Docker
Costruire l’Immagine Docker
docker build -t app-name-here .Creare/Eseguire l’Applicazione Web con Collegamenti ai Server DB
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-hereEseguire in Modalità Interattiva (non daemon, nel terminale)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashEliminare Istanza del Container o Immagine
Importante: tutti i dati non salvati su un percorso di volume montato verranno persi!!
# Eliminare Immaginedocker rmi -f app-name-heredocker rm -f webapp01# ora riesegui il tuo `docker run...` dal punto ^^^# Per esempio, per terminare le istanze DB sopra, esegui: (inizia con qualcosa tipo `docker stop {mongo,elastic}`)docker rm -f mongo elastic