Почему docker значительно медленнее чем native?

Есть вэб проект, собираю через docker-compose
Для тестов создал 2 сервера
Оба на ubuntu 18
На один установил docker и docker-compose и запускаю через docker-compose up -d
На другой руками установил все необходимые компоненты тех же версий

Результат:
Там где докер, ответ на запрос занимает 550ms
Там где вручную все сделал, ответ на запрос занимает 150ms

Это докер такой медленный или я что-то не правильно делаю?

UPD: docker-compose файл
version: "3.3"

services:
  backend:
    image: backend
    container_name: backend
    build:
      context: .
      dockerfile: ./docker/backend/Dockerfile
    expose:
      - "9000"
    volumes:
      - .:/var/www/app
    networks:
      - test-network

  nginx:
    image: nginx:1.19.0
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - .:/var/www/app
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - test-network

  mysql:
    image: mysql:8.0.20
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: test
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - ./docker/mysql/initialization:/docker-entrypoint-initdb.d
      - mysql:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - test-network

networks:
  test-network:

volumes:
  mysql:
  • Вопрос задан
  • 1118 просмотров
Пригласить эксперта
Ответы на вопрос 4
@q2digger
никого не трогаю, починяю примус
база данных в докере - это плохо. я не буду расписывать, в интернете тыщщи статей об этом, даже на хабре есть.
на ютубе можно посмотреть Дмитрия Столярова, который рассказывал очень доходчиво почему не надо использовать базу в контейнерах.
Уберите из стэка базу - все изменится.
Ответ написан
@caballero
Программист
потому что докер это прослойка. Он удобен для разработки и тестирования но на продакшен его ставят только те кому лень администрить - развернул готовый образ и все
Ответ написан
@asd111
Попробуй добавить network_mode: "host" там где используешь docker NAT т.е. там где ты мапишь 80:80
version: "3.3"

services:
  backend:
    image: backend
    container_name: backend
    build:
      context: .
      dockerfile: ./docker/backend/Dockerfile
    expose:
      - "9000"
    volumes:
      - .:/var/www/app
    networks:
      - test-network

  nginx:
    image: nginx:1.19.0
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - .:/var/www/app
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - test-network
    network_mode: "host"

  mysql:
    image: mysql:8.0.20
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: test
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - ./docker/mysql/initialization:/docker-entrypoint-initdb.d
      - mysql:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - test-network
    network_mode: "host"

networks:
  test-network:

volumes:
  mysql:
Ответ написан
@vitaly_il1
DevOps Consulting
а можно все конфиги, чтобы поднять ваш пример с нуля?
я не фанат докера, но такая разница выглядит странной, хочу вроверить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы