6

EB жаловался на то, что моя сборка была отключена, поэтому я сделал ssh'd в экземпляр и решил запустить docker build сам, чтобы посмотреть, что происходит. Каждый шаг, даже что-то простое, как mkdir, требует времени для запуска. Даже WORKDIR киосков не менее минуты или двух перед исполнением.Почему команды сборки Docker работают так медленно в Elastic Beanstalk?

На моей локальной машине это мгновение. Что происходит?

ответ

0

Извините, что вы столкнулись с этой проблемой. Создание среды с использованием эластичного бобового стека включает создание множества ресурсов, таких как группа автомасштабирования, экземпляры EC2, группы безопасности, балансировка эластичной нагрузки и т. Д. После этого программное обеспечение устанавливается на ваши экземпляры beanstalk. Я предполагаю, что вы говорите только о медленности установки программного обеспечения (сборка докеров) на beanstalk.

Если вы просто запустите mkdir, это не должно быть очень медленным. Это должно быть достаточно быстро.

Однако, если вы считаете, что сборщик докеров работает очень медленно, это может быть из-за интенсивных операций ввода-вывода.

Одна вещь, которую вы можете попробовать, это использовать EBS provisioned IOPs with Elastic Beanstalk. Подробнее о SSD-экземплярах here.

Можете ли вы попробовать запустить новую среду с помощью SSD-экземпляров и посмотреть, не работает ли сборка докеров? Если вы можете показать пример файла docker, который занимает много времени, я могу попробовать его.

+0

В любом случае простой «RUN mkdir ~/asd» занимает очень много времени. Это не должно иметь ничего общего с вещами, связанными с загрузкой EBS. Я сомневаюсь, что FS действительно является блокирующим фактором, так как я могу запускать 'apt-get', и он может быстро получать вещи. –

+0

Также необходимо загрузить базовое изображение докеры, которое должен загрузить ваш файл dockerfile (который может легко быть несколько 100 МБ). Это необходимо загрузить в каждый экземпляр EC2 в первый раз. Считаете ли вы, что это вызывает начальную медлительность? Вы можете запустить 'docker images', чтобы посмотреть, какие изображения загружаются в настоящее время. –

+0

Это команды RUN. Это произойдет после того, как загрузится исходное изображение. –

8

Такая же проблема здесь с машиной Ubuntu, работающей на AWS. Оказывается, ключ к решению - переход от devicemapper к серверу хранения aufs.

Во-первых, выполните следующую команду, чтобы выяснить, какие хранения бэкенд ваши в настоящее время используют:

docker info | grep Storage

Если он говорит devicemapper, вы, вероятно, нашли причину медлительности.

Вот prodecure для переключения на внутреннем интерфейсе Aufs в Ubuntu, взятая из here:

  1. sudo apt-get install -y -q linux-image-extra-$(uname -r)
  2. sudo service docker restart

Заметим, что вам придется восстановить все существующие изображения/контейнеры, поскольку они будут вытерты при переключении на aufs.

+2

удивительный. теперь это в тысячу раз быстрее, вы спасли мой день. –

+0

Обратите внимание: AMI на базе Amazon Linux использует команду yum вместо apt-get. http://stackoverflow.com/questions/14045262/how-to-fix-apt-get-command-not-found-on-aws-ec2 –

+0

Что такое имя пакета для AWS linux? – noli