Для чего нужны докерские сети?

#docker #docker-compose

Вопрос:

Пожалуйста, объясните, зачем docker network это нужно? Я прочитал некоторую документацию, но на практическом примере я не понимаю, зачем нам нужно манипулировать network . Здесь у меня есть docker-compose , в котором все работает нормально с и без network . Объясните мне, пожалуйста, какие преимущества будут полезны на практике, если вы раскомментируете docker-compose в нужных местах? Теперь мои контейнеры отлично взаимодействуют, есть миграции из ORM в базу данных, зачем мне это нужно networks ?

  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. В вашем примере особой разницы нет. Без определений сети docker-compose по-прежнему создает сеть для ваших контейнеров.

2. Переполнение стека предназначено только для узких, конкретных вопросов о проблемах, возникающих при написании кода. Общие вычислительные вопросы лучше подходят для суперпользователя .

Ответ №1:

Если сети не определены, docker-compose создаст сеть по умолчанию с сгенерированным именем. В противном случае вы можете вручную указать сеть и ее имя в файле создания.

Вы можете прочитать больше на сайте Networking в <url>

Ответ №2:

Ответ №3:

Без сети конфигурации для контейнеров все IP-адреса контейнеров находятся в одном диапазоне (например, 172.17.0.0/16). кроме того, они могут видеть друг друга по имени контейнера (внутренний DNS Docker).

Простое использование сети в docker:

Если вы хотите изолировать количество контейнеров в определенном сетевом диапазоне, вы должны использовать сеть docker.