JavaRush /Курси /Модуль 2: Fullstack /Монтування томів і мереж

Монтування томів і мереж

Модуль 2: Fullstack
Рівень 14 , Лекція 6
Відкрита

7.1 Монтування томів

Монтування томів і мереж у Docker Compose дозволяє створювати гнучкі та ефективні багатоконтейнерні застосунки. Томи (volumes) використовуються для зберігання даних, які мають зберегтися поза контейнерами, тоді як мережі (networks) забезпечують взаємодію між контейнерами. У цій лекції ми детально розглянемо, як використовувати томи та мережі у Docker Compose.

Томи в Docker дозволяють зберігати дані поза контейнерами, забезпечуючи їх доступність навіть після зупинки або видалення контейнерів. Це особливо корисно для зберігання даних баз даних, файлів журналів та інших даних, які мають бути довготривалими.

Типи томів:

  • Іменовані томи (Named Volumes): управляються Docker і зберігаються у спеціальній директорії на хості.
  • Прив'язані томи (Bind Mounts): монтуються у контейнер з вказаної директорії на хості.

Задання томів у Docker Compose

Приклад іменованих томів

У цьому прикладі створено іменований том postgres-data, який монтується у директорію /var/lib/postgresql/data всередині контейнера db.

Yaml

version: '3.8'

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

volumes:
  postgres-data:

Приклад прив'язаних томів

У цьому прикладі локальні директорії і файли nginx.conf та html монтуються у контейнер web як прив'язані томи.

Yaml

version: '3.8'

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

7.2 Монтування мереж

Мережі в Docker Compose дозволяють контейнерам взаємодіяти один з одним. Кожен контейнер може бути підключений до однієї або кількох мереж, що забезпечує ізоляцію та керування трафіком.

Типи мереж:

  • Мостові мережі (Bridge): за замовчуванням контейнери підключаються до мостової мережі, яка забезпечує їх взаимодействие на одному хості.
  • Оверлейні мережі (Overlay): використовуються для взаємодії контейнерів, запущених на різних хостах у кластері Docker Swarm.
  • Мережеві плагіни (Network Plugins): дозволяють використовувати сторонні мережеві драйвери для більш складних конфігурацій.

Приклад створення і використання користувацьких мереж

У цьому прикладі створюються дві користувацькі мережі front-end та back-end. Сервіс app підключений до обох мереж, сервіс web лише до front-end, а сервіс db лише до 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:

Практичні поради:

  1. Використання іменованих томів: іменовані томи керуються Docker і забезпечують простоту використання та управління даними. Іменовані томи можна підключати до декількох сервісів одночасно. Наприклад, сервіс бекенду записує логи, а моніторинг-сервіс аналізує їх і повідомляє при виявленні помилок рівня error.
  2. Розділення мереж: використання декількох мереж дозволяє ізолювати різні частини додатку і контролювати їх взаємодію.
  3. Зберігання конфігураційних файлів: використовуйте прив'язані томи для монтування конфігураційних файлів, що дозволяє легко змінювати конфігурацію без перескладання образів.
  4. Безпека мереж: обмежте доступ до мереж, щоб лише необхідні контейнери могли взаємодіяти, що підвищує безпеку додатку.

7.3 Приклади використання томів і мереж

Приклади використання томів і мереж у Docker Compose:

Приклад 1: Додаток з веб-сервером і базою даних

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:

У цьому прикладі:

  • Веб-сервер nginx і база даних PostgreSQL підключені до однієї мережі webnet, що дозволяє їм взаємодіяти. Якщо мережа одна, її можна не вказувати — буде створена дефолтна мережа.
  • Дані бази даних зберігаються в іменованому томі db-data, що забезпечує їх збереження при перезапуску контейнерів.

Приклад 2: Додаток з кількома рівнями

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:

У цьому прикладі:

  • Створено дві мережі: front-tier і back-tier.
  • Сервіс frontend підключений до обох мереж, що дозволяє йому взаємодіяти як з backend, так і з зовнішніми клієнтами.
  • Сервіси backend і database підключені тільки до мережі back-tier для забезпечення їх ізоляції і взаємодії.
  • Дані сервісів backend і database зберігаються в окремих іменованих томах backend-data і db-data.
Коментарі (2)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Микола Рибак Рівень 51
9 вересня 2025
На вказаній сторінці не повністю перекладені всі слова тексту, а саме у визначенні Мостові мережі (Bridge)
21 вересня 2025
станом на 21.09 проблема досі актуальна, виправте, будь ласка