6.1 Fondamenti delle variabili d'ambiente
Le variabili d'ambiente giocano un ruolo importante nella configurazione delle applicazioni, permettendo di modificare dinamicamente il comportamento e i parametri dei servizi senza modificare il codice. Docker Compose supporta l'utilizzo delle variabili d'ambiente per configurare i container, garantendo flessibilità e facilità nella gestione delle configurazioni.
Uno dei modi più comodi per gestire le variabili d'ambiente è attraverso i file .env
. In questa lezione esamineremo in dettaglio come utilizzare le variabili d'ambiente in Docker Compose, incluso come creare e utilizzare i file .env
.
Fondamenti delle variabili d'ambiente in Docker Compose
Le variabili d'ambiente possono essere usate nel file compose.yaml
per parametrizzare le configurazioni. Queste variabili possono essere definite nel file .env
, direttamente nel file compose.yaml
, o passate direttamente tramite la riga di comando.
Esempio di utilizzo delle variabili d'ambiente in compose.yaml
:
In questo esempio vengono utilizzate le variabili NGINX_VERSION
e HOST_PORT
, i cui valori possono essere specificati nel file .env
o tramite la riga di comando.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Uso dei file .env
1. Creazione del file .env
Il file .env
viene posizionato nella stessa directory del file compose.yaml
e contiene coppie "chiave-valore" che definiscono i valori delle variabili d'ambiente. Ogni variabile va su una nuova riga.
Esempio di file .env
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Integrazione del file .env
con Docker Compose
Docker Compose carica automaticamente le variabili dal file .env
, se questo si trova nella stessa directory del file compose.yaml
.
Esempio di file compose.yaml
che utilizza variabili d'ambiente:
In questo esempio, le variabili NGINX_VERSION
, HOST_PORT
, DB_USER
e DB_PASSWORD
vengono prelevate dal file .env
.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 Passaggio di variabili
Passaggio di variabili tramite linea di comando
Puoi passare le variabili d'ambiente direttamente tramite la linea di comando usando il comando export
nei sistemi Unix-like o con il parametro --env-file
in Docker Compose.
Esempio di utilizzo di export
:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Esempio di utilizzo di --env-file
:
Puoi specificare un file alternativo con variabili d'ambiente usando il parametro --env-file
.
docker compose --env-file .env.dev up
Uso delle variabili d'ambiente integrate in Docker Compose
Docker Compose supporta variabili d'ambiente integrate, come ${PWD}
, che rappresentano la directory di lavoro corrente.
Esempio:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Esempi pratici
Esempi pratici di utilizzo delle variabili d'ambiente:
Esempio 1: Configurazione di un web server e un database
Crea un file .env
con i parametri per un web server e un database:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Crea un file compose.yaml
che utilizza queste variabili:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Avvia Docker Compose:
docker compose up
Esempio 2: Separazione degli ambienti di sviluppo e produzione
Crea due file .env
per diversi ambienti: .env.dev
e .env.prod
.
File .env.dev
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
File .env.prod
:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Crea un file compose.yaml
che utilizza le variabili da questi file:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Avvia Docker Compose per lo sviluppo:
docker compose --env-file .env.dev up
Avvia Docker Compose per la produzione:
docker compose --env-file .env.prod up
GO TO FULL VERSION