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