6.1 Podstawy zmiennych środowiskowych
Zmienne środowiskowe odgrywają ważną rolę w konfiguracji aplikacji, pozwalając dynamicznie zmieniać zachowanie i parametry serwisów bez modyfikacji kodu. Docker Compose wspiera użycie zmiennych środowiskowych do konfiguracji kontenerów, co zapewnia elastyczność i wygodę zarządzania konfiguracją.
Jednym z najwygodniejszych sposobów zarządzania zmiennymi środowiskowymi jest użycie plików .env. W tym wykładzie szczegółowo omówimy, jak używać zmiennych środowiskowych w Docker Compose, w tym tworzenie i użycie plików .env.
Podstawy zmiennych środowiskowych w Docker Compose
Zmienne środowiskowe można wykorzystać w pliku compose.yaml do parametryzacji konfiguracji. Te zmienne mogą być zdefiniowane w pliku .env, bezpośrednio w compose.yaml, lub przekazane przez linię poleceń.
Przykład użycia zmiennych środowiskowych w compose.yaml:
W tym przykładzie używane są zmienne NGINX_VERSION oraz HOST_PORT, których wartości można ustawić w pliku .env lub przekazać przez linię poleceń.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Użycie plików .env
1. Tworzenie pliku .env
Plik .env umieszczany jest w tym samym katalogu co compose.yaml i zawiera pary "klucz-wartość", które definiują wartości zmiennych środowiskowych. Każda zmienna jest deklarowana w nowej linii.
Przykład pliku .env:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Integracja pliku .env z Docker Compose
Docker Compose automatycznie ładuje zmienne z pliku .env, jeśli znajduje się on w tym samym katalogu co compose.yaml.
Przykład pliku compose.yaml z użyciem zmiennych środowiskowych:
W tym przykładzie zmienne NGINX_VERSION, HOST_PORT, DB_USER i DB_PASSWORD są pobierane z pliku .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 Przekazywanie zmiennych
Przekazywanie zmiennych przez linię poleceń
Możesz przekazywać zmienne środowiskowe bezpośrednio przez linię poleceń za pomocą komendy export w systemach podobnych do Unix albo z użyciem parametru --env-file w Docker Compose.
Przykład użycia export:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Przykład użycia --env-file:
Możesz wskazać alternatywny plik ze zmiennymi środowiskowymi za pomocą parametru --env-file.
docker compose --env-file .env.dev up
Używanie wbudowanych zmiennych środowiskowych w Docker Compose
Docker Compose obsługuje wbudowane zmienne środowiskowe, takie jak ${PWD}, które reprezentują bieżący katalog roboczy.
Przykład:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Praktyczne przykłady
Praktyczne przykłady wykorzystania zmiennych środowiskowych:
Przykład 1: Konfiguracja serwera WWW i bazy danych
Stwórz plik .env z parametrami dla serwera WWW i bazy danych:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Stwórz plik compose.yaml, który wykorzystuje te zmienne:
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:
Uruchom Docker Compose:
docker compose up
Przykład 2: Oddzielenie środowisk dla deweloperki i produkcji
Stwórz dwa pliki .env dla różnych środowisk: .env.dev i .env.prod.
Plik .env.dev:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
Plik .env.prod:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Stwórz plik compose.yaml, który wykorzystuje zmienne z tych plików:
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:
Uruchom Docker Compose dla deweloperki:
docker compose --env-file .env.dev up
Uruchom Docker Compose dla produkcji:
docker compose --env-file .env.prod up
GO TO FULL VERSION