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