CodeGym /Kursy /Docker SELF /Montowanie wolumenów i sieci

Montowanie wolumenów i sieci

Docker SELF
Poziom 16 , Lekcja 1
Dostępny

7.1 Montowanie wolumenów

Montowanie wolumenów i sieci w Docker Compose pozwala tworzyć elastyczne i efektywne aplikacje wielokontenerowe. Wolumeny (volumes) są używane do przechowywania danych, które powinny być zachowane poza kontenerami, podczas gdy sieci (networks) zapewniają interakcję między kontenerami. W tym wykładzie szczegółowo omówimy, jak używać wolumenów i sieci w Docker Compose.

Wolumeny w Dockerze pozwalają przechowywać dane poza kontenerami, dzięki czemu są one dostępne nawet po zatrzymaniu lub usunięciu kontenerów. Jest to szczególnie przydatne do przechowywania danych baz danych, plików logów i innych danych, które muszą być trwałe.

Rodzaje wolumenów:

  • Wolumeny nazwane (Named Volumes): zarządzane przez Dockera i przechowywane w specjalnym katalogu na hoście.
  • Wolumeny powiązane (Bind Mounts): montowane w kontenerze z określonego katalogu na hoście.

Definiowanie wolumenów w Docker Compose

Przykład wolumenów nazwanych

W tym przykładzie został utworzony nazwany wolumen postgres-data, który jest montowany w katalogu /var/lib/postgresql/data wewnątrz kontenera db.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Przykład wolumenów powiązanych

W tym przykładzie lokalne katalogi i pliki nginx.conf oraz html są montowane w kontenerze web jako wolumeny powiązane.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 Montowanie sieci

Sieci w Docker Compose umożliwiają kontenerom interakcję między sobą. Każdy kontener może być podłączony do jednej lub kilku sieci, co zapewnia izolację i zarządzanie ruchem.

Typy sieci:

  • Sieci mostkowe (Bridge): domyślnie kontenery podłączają się do sieci mostkowej, która umożliwia ich interakcję na jednym hoście.
  • Sieci nakładkowe (Overlay): używane do komunikacji kontenerów uruchomionych na różnych hostach w klastrze Docker Swarm.
  • Sieciowe wtyczki (Network Plugins): pozwalają używać zewnętrznych sterowników sieciowych dla bardziej złożonych konfiguracji.

Przykład tworzenia i użycia niestandardowych sieci

W tym przykładzie tworzone są dwie niestandardowe sieci front-end i back-end. Serwis app jest podłączony do obu sieci, serwis web tylko do front-end, a serwis db tylko do back-end.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

Praktyczne porady:

  1. Używanie nazwanych wolumenów: nazwane wolumeny są zarządzane przez Docker i zapewniają łatwość użycia i zarządzania danymi. Nazwane wolumeny można podłączyć do kilku serwisów jednocześnie. Na przykład, serwis backend zapisuje logi, a serwis monitorujący analizuje je i powiadamia w przypadku wykrycia błędów na poziomie error.
  2. Podział sieci: używanie kilku sieci umożliwia izolowanie różnych części aplikacji i kontrolowanie ich interakcji.
  3. Przechowywanie plików konfiguracyjnych: użyj powiązanych wolumenów do montowania plików konfiguracyjnych, co pozwala łatwo zmieniać konfigurację bez ponownej budowy obrazów.
  4. Bezpieczeństwo sieci: ogranicz dostęp do sieci, aby tylko niezbędne kontenery mogły się komunikować, co zwiększa bezpieczeństwo aplikacji.

7.3 Przykłady użycia wolumenów i sieci

Przykłady użycia wolumenów i sieci w Docker Compose:

Przykład 1: Aplikacja z serwerem www i bazą danych

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

W tym przykładzie:

  • Serwer www nginx i baza danych PostgreSQL są połączone z jedną siecią webnet, co pozwala im współdziałać. Jeśli jest jedna sieć, nie trzeba jej wskazywać - zostanie stworzona domyślna sieć.
  • Dane bazy danych przechowywane są w nazwanym wolumenie db-data, co zapewnia ich trwałość po ponownym uruchomieniu kontenerów.

Przykład 2: Aplikacja z kilkoma poziomami

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

W tym przykładzie:

  • Stworzono dwie sieci: front-tier i back-tier.
  • Serwis frontend jest połączony z obiema sieciami, co pozwala mu współdziałać zarówno z backend, jak i z zewnętrznymi klientami.
  • Serwisy backend i database są połączone tylko z siecią back-tier, co zapewnia ich izolację i współpracę.
  • Dane serwisów backend i database są przechowywane w oddzielnych nazwanych wolumenach backend-data i db-data.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION