Соединение с сервером в Docker-контейнере на локальном хосте очень медленное - PullRequest
0 голосов
/ 24 мая 2019

Я хотел попробовать Docker как инструмент для локальной разработки - я использовал docker-compose для ускорения 3-х контейнеров: один для базы данных (postgres), front-end (запуск webpack и sass узла в режиме наблюдения) и backend (Elixir / Phoenix).

Все отлично работает, за исключением того, что когда я нажимаю localhost:4000, загрузка страницы очень медленная - 10-15 секунд, чтобы получить страницу входа, которая статична.

Я проверил журналы с docker-compose и время отклика сервера, как обычно, быстрое, что для меня означает, что что-то замедляет соединение с контейнером.

Когда я запускал сервер непосредственно в Терминалеопять же, все довольно быстро, например, для загрузки одной и той же страницы требуется 1 с.

Я новичок в Docker, поэтому я подозреваю, что, возможно, что-то упущено из-за конфигурации.Любые идеи приветствуются.Спасибо!

Конфигурация

docker-compose.yml

version: "3.6"

services:
  postgres:
    container_name: postgres
    image: postgres:11.0-alpine
    ports:
      - 5432:5432
    volumes:
      - postgres:/var/lib/postgresql/data

  front-end:
    container_name: front-end
    env_file:
      - "docker/dev/.env"
    build:
      context: "."
      dockerfile: "docker/dev/Dockerfile.front-end"
    volumes:
      - .:/app
      - node_modules:/app/node_modules
      - static:/app/priv/static
    command: npm run dev

  backend:
    container_name: backend
    build:
      context: "."
      dockerfile: "docker/dev/Dockerfile.backend"
    env_file:
      - "docker/dev/.env"
    depends_on:
      - postgres
      - front-end
    ports:
      - 4000:4000
    stdin_open: true
    tty: true
    volumes:
      - .:/app
      - elixir-deps:/app/deps
      - static:/app/priv/static
    command: iex -S mix phx.server

volumes:
  postgres:
  elixir-deps:
  node_modules:
  static:
    driver_opts:
      type: "tmpfs"
      device: "tmpfs"

Dockerfile.front-end

FROM node:8.10-alpine

WORKDIR /app

COPY package.json ./
COPY package-lock.json ./

RUN npm install

COPY . .

Dockerfile.backend

FROM elixir:1.8-alpine

RUN apk update && apk add build-base inotify-tools postgresql-dev

WORKDIR /app

COPY mix.exs ./
COPY mix.lock ./

RUN mix local.hex --force && mix local.rebar --force \
    && mix deps.get && mix deps.compile

COPY . .

EXPOSE 4000

Версии и другая информация:

MacOS Mojave 10.14.3
Docker Desktop 2.0.0.3 (Engine 18.09.2, Compose: 1.23.2)

MacBook Pro 13" (Early 2015, 16GB RAM/3.1GHz Core i7)

1 Ответ

0 голосов
/ 28 мая 2019

Как отметил один комментатор ( @ DavidMaze ), в настоящее время известно о проблемах производительности с Docker для Mac.Насколько они связаны с моим вариантом использования, я не могу сказать, но после прочтения Руководства по настройке производительности *1006* в официальных документах мне удалось добиться некоторого прогресса в производительности:

docker-compose.yml

version: "3.6"

services:
  postgres:
    container_name: postgres
    image: postgres:11.0-alpine
    ports:
      - 5432:5432
    volumes:
      - postgres:/var/lib/postgresql/data

  front-end:
    container_name: front-end
    env_file:
      - "docker/dev/.env"
    build:
      context: "."
      dockerfile: "docker/dev/Dockerfile.front-end"
    volumes:
      - .:/app:delegated
      - node_modules:/app/node_modules
      - static:/app/priv/static
    command: npm run dev

  backend:
    container_name: backend
    build:
      context: "."
      dockerfile: "docker/dev/Dockerfile.backend"
    env_file:
      - "docker/dev/.env"
    depends_on:
      - postgres
      - front-end
    ports:
      - 4000:4000
    stdin_open: true
    tty: true
    volumes:
      - .:/app:delegated
      - elixir-deps:/app/deps
      - elixir-build:/app/_build
      - static:/app/priv/static:ro
    command: iex -S mix phx.server

volumes:
  postgres:
  elixir-deps:
  elixir-build:
  node_modules:
  static:
    driver_opts:
      type: "tmpfs"
      device: "tmpfs"

Обратите внимание на использование :delegated при объявлении томов .:/app:delegated.

Хотя это улучшение, оно все еще намного медленнее для дня- Сегодняшняя разработка, а не запускать вещи изначально, поэтому я приветствую другие ответы на мой вопрос.На данный момент я думаю, что это, вероятно, лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...