Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il container Docker per il database

Come creare un container per un database MySQL utilizzando Docker Compose in un ambiente basato su Laravel
Come creare un container per un database MySQL utilizzando Docker Compose in un ambiente basato su Laravel
Link copiato negli appunti

I container Docker sono un metodo di virtualizzazione a livello di sistema operativo che consente di eseguire applicazioni e i loro ambienti di esecuzione in modo isolato e portatile.

Un container è una unità software leggera che include il codice dell'applicazione, le librerie e le dipendenze necessarie per eseguirla. Questo ambiente isolato consente alle applicazioni di essere eseguite in modo coerente su qualsiasi piattaforma che supporti Docker, indipendentemente dall'ambiente host.

Essi offrono vantaggi come la rapidità di avvio, l'efficienza delle risorse e la portabilità dell'applicazione. Possono essere distribuiti facilmente, replicati e scalati in base alle esigenze, rendendoli ideali per lo sviluppo e la distribuzione di software.

Container Docker per il database

Apri il file docker-compose,yml e scrivi:

version: "3.9"
services:
# Database services
database:
image: mysql:latest
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_USER=${DB_USERNAME}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
volumes:
- db-data:/var/lib/mysql
volumes:
db-data: ~

  • version: "3.9": indica la versione del formato del file docker-compose.yml utilizzato.
  • services: definisce i servizi Docker che verranno avviati.
  • database: definisce il servizio per il database MySQL.
  • image: mysql:latest: specifica l'immagine di MySQL da utilizzare, in questo caso la versione più recente.
  • ports: specifica la mappatura delle porte tra il container e l'host. Qui stiamo mappando la porta 3306 del container alla porta 3306 dell'host, consentendo l'accesso al database MySQL dall'esterno.
  • environment: definisce le variabili d'ambiente per configurare il database, come il nome del database, l'utente, la password e la password di root.
  • volumes: monta un volume Docker per salvare i dati del database. In questo caso, il volume si chiama db-data e viene montato nella directory /var/lib/mysql del container.
  • volumes: db-data: ~: definisce il volume db-data come un volume anonimo, senza specificare alcun percorso host. Questo significa che i dati del database saranno persistenti anche se il container viene eliminato e ricreato.

Ok. Ora da terminale digita:

docker-compose up --build -d

dove:

up avvia tutti i servizi definiti nel file docker-compose.yml mentre --build indica a Docker Compose di ricreare le immagini dei servizi prima di avviare i container. È utile quando hai apportato modifiche al Dockerfile o a qualsiasi file di build associato e desideri che le modifiche si riflettano nelle immagini dei container.

-d avvia invece i container in modalità "detached" (demoniaca), cioè in background. In questo modo, il terminale rimane libero per l'utilizzo mentre i container sono in esecuzione.

In sintesi

docker-compose up --build -d

avvia tutti i servizi definiti nel file docker-compose.yml. Costruendo le immagini dei container se necessario e avviando i container in background. Questo è un comando comune per avviare l'ambiente Docker quando si lavora su un progetto.

Scorri poi il terminale verso su e noterai dei warning:

Essi indicano che le variabili del database che abbiamo settato non sono impostate poiché non ancora create. Apri quindi il file .env di Laravel e settale in questo modo:

...
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=project1.0
# DB_USERNAME=root
# DB_PASSWORD=secret
...

in pratica decommenta le voci e cambia sqlite in mysql:

...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project1.0
DB_USERNAME=root
DB_PASSWORD=secret
...

Riavvia poi il server :

docker-compose up -d

Questa volta non serve la build, come vedi non ci sarà più nessun warning.

Nota bene che nel caso in cui usassi lo user di default root non servirà settare la variabile d'ambiente in docker-compose.yml relativa allo user. Anzi, essa potrebbe determinare un errore all'avvio del contenitore.

Connessione al database

Ora apri un gestore di database e imposta la connessione. Io ad esempio utilizzo MysqlWorkbench:

Compila poi il form inserendo un nome per la connessione e inserendo user e password. L'host va bene cosi com'è.

Se hai inserito i dati correttamente ed il server è in funzione dovresti vedere il database nel container di Docker.

In questo modo il contenitore per il database sarà stato creato con successo!

Comandi utili di Docker

Prima di proseguire e creare il container per la connessione da PHP è doverosa una breve panoramarica dei comandi più utilizzati in Docker:

docker-compose up --build -d avvia ad esempio i servizi definiti in docker-compose.yml, ricostruendo se necessario le immagini dei servizi, e li avvia in background. Questo è un modo comune per avviare rapidamente e gestire ambienti Docker multi-container.

docker-compose down pulisce invece l'ambiente creato da docker-compose up, rendendo il sistema pronto per essere riavviato o riprodotto.

docker-compose ps fornisce lo stato attuale dei servizi Docker gestiti tramite Docker Compose. Se a questo si aggiunge il flag -a si ottiene una panoramica completa di tutti i servizi e dei loro stati. Incluso lo storico dei container fermati.

docker-compose logs viene utilizzato per visualizzare i log dei servizi definiti in docker-compose.yml. Ecco cosa fa:

  • stampa i log di tutti i servizi in esecuzione.
  • I log vengono stampati in ordine temporale, mostrando le ultime righe per prime.
  • Se un servizio non è in esecuzione, non verranno visualizzati i suoi log.

Se vuoi visualizzare i log di un servizio specifico, puoi passare il nome del servizio come argomento, ad esempio docker-compose logs nome_servizio.

Puoi anche utilizzare opzioni come -f per "follow" (seguire) i log in tempo reale, oppure -t per includere il timestamp nei log. Ad esempio:

docker-compose logs -f -t

seguirà i log in tempo reale e includerà il timestamp.

Abbiamo poi docker container list che elenca i container Docker in esecuzione, o più brevemente docker ps. Nello stesso modo anche docker image list restituisce la lista delle immagini in esecuzione.

docker container stop è utilizzato per fermare uno o più container Docker in esecuzione. In questo modo:

docker container stop NOME_CONTENITORE o ID_CONTENITORE

Puoi specificare uno o più nomi di container o ID di container come argomenti. Ad esempio, per fermare un container con nome my_container, puoi eseguire:

docker container stop my_container

Se vuoi fermare più container contemporaneamente, puoi elencarli separatamente:

docker container stop container1 container2 container3

Questo comando fermerà i container specificati. Se desideri fermare tutti i container in esecuzione, puoi eseguire:

docker container stop $(docker ps -q)

docker ps -q restituisce solo gli ID dei container in esecuzione e $(docker ps -q) passa questi ID come argomenti al comando docker container stop, fermando tutti i container in esecuzione.

docker container kill è utilizzato per interrompere immediatamente uno o più container Docker in esecuzione, inviando loro un segnale di terminazione forzata (SIGKILL):

docker container kill my_container

Puoi specificare uno o più nomi di container o ID di container come argomenti. Ad esempio, per interrompere un container con nome my_container, puoi eseguire:

docker container kill my_container

Se desideri interrompere più container contemporaneamente, puoi elencarli così:

docker container kill container1 container2 container3

I container specificati verranno killati immediatamentet. Se vuoi interrompere tutti i container in esecuzione, puoi eseguire:

docker container kill $(docker ps -q)

Anche questa volta docker ps -q restituisce solo gli ID dei container in esecuzione e $(docker ps -q) li passa come argomenti al comando docker container kill, interrompendo tutti i container in esecuzione.

docker container prune: è utilizzato per rimuovere tutti i container Docker non in esecuzione. Esso rimuove tutti i container Docker stoppati. Docker ti chiederà di confermare l'azione con "y" e premendo Invio se si è sicuri di voler rimuovere tutti i container non in esecuzione.

Puoi anche utilizzare l'opzione -f o --force per confermare automaticamente l'azione senza doverlo fare manualmente:

docker container prune -f

docker rmi [code image] viene utilizzato per rimuovere una o più immagini Docker dal sistema. Ecco come funziona:

docker rmi ID_immagine1 ID_immagine2 ..

Puoi specificare uno o più ID di immagini come argomenti. Ad esempio, per rimuovere un'immagine con ID "abcd1234", puoi eseguire:

docker rmi abcd1234

Se desideri rimuovere più immagini contemporaneamente, puoi elencarle in questo modo:

docker rmi abcd1234 efgh5678

Il comando rimuoverà le immagini specificate dal sistema. Se vuoi rimuovere tutte le immagini non utilizzate, puoi eseguire:

docker image prune

che rimuoverà tutte le immagini non utilizzate, liberando spazio sul disco.

Conclusione

In questa parte abbiamo creato un container per il database MySQL utilizzando Docker Compose. Attraverso il file docker-compose.yml abbiamo definito il servizio del database specificando l'immagine, le porte, le variabili d'ambiente e i volumi necessari per la configurazione.

Successivamente, abbiamo settato le variabili d'ambiente nel file .env di Laravel per configurare la connessione al database. Eseguiamo quindi docker-compose up -d per avviare il server Docker, assicurandoci che il container del database venga creato correttamente.

Infine, abbiamo fornito una panoramica dei comandi Docker più utili per la gestione dei container e dei servizi Docker. Con l'utilizzo di Docker e Docker Compose, è possibile gestire facilmente l'ambiente di sviluppo e produzione dei progetti, assicurando coerenza e facilità di distribuzione delle applicazioni.

Ti consigliamo anche