CodeGym /Kursy /Docker SELF /Zmienne środowiskowe w Docker Compose

Zmienne środowiskowe w Docker Compose

Docker SELF
Poziom 16 , Lekcja 0
Dostępny

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

Yaml

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:

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

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

Terminal

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.

Terminal

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:

Yaml

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:

.env

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

Stwórz plik compose.yaml, który wykorzystuje te zmienne:

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:

Uruchom Docker Compose:

Terminal

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:

.env

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

Plik .env.prod:

.env

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:

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:

Uruchom Docker Compose dla deweloperki:

Terminal

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

Uruchom Docker Compose dla produkcji:

Terminal

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