2016-11-27 6 views
4

Моя проблема в следующем: у меня есть Docker на OSX с контейнерами, содержащими Redis, NginX, PHP 7 и Unison. При сопоставлении с php-контейнером у меня есть объем с Symfony 3.1.7.Как выяснить, что замедляет докер?

Все работает, но страница «Добро пожаловать» Symfony в среднем занимает 1,5 секунды. В то же время такая же настройка без докера дает мне время загрузки 0,2 секунды. Такое же различие я получил для консольных команд Symfony, поэтому, я думаю, это не проблема с NginX, и Unison должен был скрыть все проблемы, связанные с синхронизацией файлов Docker по проблеме OSX.

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

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

Все работает на моем MBP с 2,5 ГГц i5, 8 ГБ оперативной памяти и SSD.

Docker 1.12.3, OSX 10.12.1 (Sierra)

докер-compose.yml:

mydockerbox-redis: 
    image: phpdockerio/redis:latest 
    container_name: mydockerbox-redis 

mydockerbox-webserver: 
    image: phpdockerio/nginx:latest 
    container_name: mydockerbox-webserver 
    volumes: 
     - ..:/var/www/mydockerbox 
     - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf 
    ports: 
    - "80:80" 
    links: 
    - mydockerbox-php-fpm 

unison: 
    image: leighmcculloch/unison:latest 
    environment: 
    - UNISON_WORKING_DIR=/unison 
    volumes: 
    - ../mydockerbox:/var/www/mydockerbox 
    ports: 
    - "5000:5000" 

mydockerbox-php-fpm: 
    build: . 
    dockerfile: php-fpm/Dockerfile 
    container_name: mydockerbox-php-fpm 
    volumes_from: 
    - unison 
    volumes: 
    - ./php-fpm/php-ini-overrides.ini:/etc/php/7.0/fpm/conf.d/99-overrides.ini 
    links: 
    - mydockerbox-redis 

UPD А вот Dockerfile для PHP-FPM контейнера:

FROM phpdockerio/php7-fpm:latest 

# Install selected extensions and other stuff 
RUN apt-get update \ 
    && apt-get -y --no-install-recommends install php7.0-mongodb php7.0-redis php7.0-igbinary \ 
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* 


WORKDIR "/var/www/mydockerbox" 
+0

Какой драйвер вы используете для докерной машины? – Matteo

+0

@Matteo - Я довольно новичок в Docker, поэтому я могу ошибаться, но, насколько я понял, эта версия Docker утверждает, что является родной для OSX, поэтому я думаю - это просто Docker, не VirtualBox или Vagrant, а некоторые другие подобные вещи. –

+0

Если вы запустите 'docker-machine ls', вы увидите столбец DRIVER – Matteo

ответ

0

Я предлагаю вам использовать docker-machine-driver-xhyve:

докер-машина/libmachine плагин драйвера для xhyve/hyperkit (native macOS hypervisor.framework)

Вы можете просто установить с варкой (я надеюсь, что вы уже установили Docker & Co с варкой также, иначе разъединить и установить их с заваривать!) :

brew install docker-machine-driver-xhyve 
sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve 
sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve 

Тогда вы можете создать Docker машину как:

docker-machine create --driver xhyve --xhyve-experimental-nfs-share my-xhyve-docker-machine 

и использовать его для запуска контейнера

+0

Спасибо за ваше предложение, но прямо сейчас я все еще надеясь, что Docker будет работать самостоятельно, без VirtualBox или других дополнительных двигателей VM. –

+0

Привет @SergeyNester слой абстракции очень медленный доступ к файловой системе. Я нахожу хорошее улучшение с использованием этого драйвера. – Matteo

+0

@Sergey у вас уже есть виртуальная машина для Docker на OSX, –

0

Сначала проверьте производительность PHP внутри контейнера php-fpm (например, с помощью this) и сравните его с контейнером своего коллеги.

Если вы обнаружите, что производительность одинакова/сопоставима, используйте инструменты профилирования производительности PHP, чтобы узнать, что делает Symfony за каждый бит этих ~ 1,5 секунд при создании страницы «Добро пожаловать». Это, скорее всего, определит узкое место (может быть файловая система, сетевая связь с контейнером Redis, поиском DNS и т. Д.).

Если контрольный показатель показывает, что сам PHP в вашем контейнере работает медленнее (что, на мой взгляд, маловероятно), тогда запустите тест на главной машине. В случае большой разницы между хост-машинами и результатами php-fpm contaner - это будет означать, что механизм докеров работает по дросселированию ресурсов и нуждается в глубокой настройке или переустановке.

+0

Как ни странно, этот тест занимает меньше времени в контейнере)) Прямо сейчас я уже удалил контейнер с Redis, и не должно быть DNS-запросов. Судя по профилировщику Symfony, более двух секунд проводится для «инициализации Symfony». Думаю, это оставляет мне некоторые неизвестные проблемы с файловой системой, которые Unison не может обработать. –

+0

О Symfony ... @SergeyNester - вы нашли решение уменьшить время инициализации Symfony? – cadavre

+0

@ cadavre nope, я сдался –

Смежные вопросы