Зачем нужны docker networks?

Обьясните пожалуйста, зачем нужны docker network? Я прочитал некоторую документацию, но на практическом примере не понимаю зачем нам нужно манипулировать сетью. Вот у меня есть docker-compose в котором все и так прекрасно работает и с network и без network. Просветите плз, какие бенефиты будут в практическом применении если раскоментить docker-compose в нужнных местах?

    version: '3.4'

services:
  main:
    container_name: main
    build:
      context: .
      target: development
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - ${PORT}:${PORT}
    command: npm run start:dev
    env_file:
      - .env
#     networks:
#       - webnet
    depends_on:
      - postgres
  postgres:
    container_name: postgres
    image: postgres:12
#     networks:
#       - webnet
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      PG_DATA: /var/lib/postgresql/data
    ports:
      - 5432:5432
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 1m30s
      timeout: 10s
      retries: 3
# networks:
#   webnet:
volumes:
  pgdata:

Ответы (1 шт):

Автор решения: Alex Khonko

допустим, у вас есть 2 контейнера

грубо говоря, у каждого контейнера своё окружение.

как результат - будучи даже запущенными через 1 docker-compose, они не будут иметь возможности общаться друг с другом

для того, чтобы контейнеры могли взаимодействовать между собой, нужно их подключить в общий network


вот вам такой пример:

чтобы у вас в системе php мог кешировать в редис данные, ему нужно как-то с редисом связаться

он пошлет запрос set key1 value1 на примерно такой урл: redis:6379

без нетворков вы можете просто упереться в проблему, что ваш скрипт скажет, что такого урла нету(хотя оба контейнера будут подняты, и отлично работать по отдельности)


есть разные виды нетворков, и мой описанный пример - 1 из юзкейсов, их гораздо больше

почитайте про типы, мне лично пока что хватает bridge-а, но судья по тому что пишут, это очень широкое поле для познаний и применений


upd.

Меня правильно поправил @RomanKonoval, поэтому перефразирую ответ: у меня на работе одновременно запущены 2+ независимых проекта, которые общаются друг с другом. По отдельности они могут офк видеть только свои контейнеры, но не могут видеть контейнеры друг друга. Соответственно, для легенького проекта всё gut, можно сеть не тянуть.

Но, как только у вас появится какой-то микросервис, или просто ещё 1 проект, который нужно будет сконнектить с первым, вот тут вам без нетворков уже никак

Поэтому, себе в работе я сформировал правило: лишний раз протянутый нетворк лишним не бывает

→ Ссылка