CodeGym /Corsi /Docker SELF /Variabili di ambiente in Docker Compose

Variabili di ambiente in Docker Compose

Docker SELF
Livello 16 , Lezione 0
Disponibile

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.

Yaml

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:

.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.

Yaml

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:

Terminale

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.

Terminale

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:

Yaml

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:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

Crea un file compose.yaml che utilizza queste variabili:

Yaml

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:

Terminale

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:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

File .env.prod:

.env

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:

Yaml

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:

Terminale

docker compose --env-file .env.dev up

Avvia Docker Compose per la produzione:

Terminale

docker compose --env-file .env.prod up
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION