сборка docker очень медленная даже с простыми командами
Я создаю изображение докера на моем Raspberry Pi, что, конечно, занимает некоторое время. Проблема здесь в том, что даже очень простые команды в Dockerfile, такие как установка переменной среды, используя chmod +x
на один файл или подвергая порт 80 занимает несколько минут, чтобы завершить.
вот выдержка из моего файла Docker:
FROM resin/rpi-raspbian
MAINTAINER felixbr <mymail@redacted.com>
RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y python python-dev python-pip python-numpy python-scipy python-mysqldb mysql-server redis-server nginx dos2unix poppler-utils
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app
WORKDIR /app
RUN cp /app/nginx-django.cfg /etc/nginx/sites-enabled/default
RUN chmod +x /app/start.sh
ENV DOCKERIZED="true"
CMD ./start.sh
EXPOSE 80
имейте в виду, что это с помощью ARMv6
базовое изображение, поэтому оно может работать на Raspberry Pi, и я использую docker 1.5.0, построенный для гиприота Raspberry Pi OS.
это копирование построенных слоев для каждой команды или почему каждая из последних нескольких команд занимает несколько минут?
2 ответов
каждая инструкция Dockerfile
будет работать в контейнере. Это означает, что для каждой инструкции он будет выполнять следующее :
- создайте экземпляр контейнера из изображения, созданного предыдущим шагом, который создаст новый слой (R/W)
- сделайте вещь (pip install и т. д..)
- Commit, который будет копировать верхний слой в качестве слоя изображения (я уверен, что он копирует слой)
- и извлекать контейнер (если
--rm
опция указана) (таким образом, удаление слоя чтения/записи контейнера)
есть несколько операций ввода-вывода. На SSD это очень быстро, а также на хорошем жестком диске. Когда вы строите его на Raspberry PI, если вы строите его на SD-карте (или MicroSD), производительность SD-карты, вероятно, не так хороша. Это будет зависеть от класса MicroSD, и даже тогда я не думаю, что это действительно хорошо для карты. Я сделал попытку с простым проектом узла, и это определенно заняло несколько минут вместо нескольких секунд, как это было на моем ноутбуке. Это связано с оборудованием (в основном I / O для SD-карты, может быть, немного CPU, но...).
вы можете попробовать использовать внешний жесткий диск, подключенный к raspberry Pi, и переместить папки docker туда, чтобы увидеть, лучше ли производительность.
Это старый вопрос, но для справки, вы, возможно, страдали от выбранного драйвера хранения.
в Ubuntu / Debian Docker по умолчанию использует драйвер хранения AUFS, что довольно быстро. В других дистрибутивах Docker по умолчанию использует драйвер хранилища devicemapper, который очень медленный с конфигурацией по умолчанию (из-за режима "loop-lvm", настроенного по умолчанию и не рекомендуемого для использования в производстве).
проверьте это руководство для справки и посмотреть, как чтобы настроить драйвер хранения devicemapper в производстве (без режима цикла):https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/