2014-01-30 4 views
14

Я заметил, что каждая строка в файле Dockerfile создает отдельное изображение. Существует ли ограничение на количество создаваемых изображений?Количество команд в файле Docker

Вместо этого мы пытаемся сделать oneliner ?

Как это будет отличаться, если мы используем сервис наподобие Quay?

Спасибо!

ответ

14

Как Alister said, при использовании файловой системы AUFS существует верхнее ограничение количества слоев в изображении Docker. В версии Docker 0.7.2 предел был увеличен до 127 уровней (changelog).

Поскольку это ограничение основной файловой системы союза (в случае AUFS), использование Quay или других частных реестров не изменит результат. Но вы можете использовать другую файловую систему.

Текущая альтернативная файловая система должна использовать devicemapper (см. CLI docs). Эти другие файловые системы могут иметь разные ограничения на количество слоев - я не думаю, что devicemapper имеет верхний предел.

Вы правы, выполнив несколько команд в одном заявлении RUN, вы можете уменьшить количество слоев.

В качестве альтернативы, если вам действительно нужно много слоев для создания изображения, вы можете создать изображение до тех пор, пока оно не достигнет максимума, а затем используйте docker export для создания несшитой копии файловой системы изображения. Затем docker import, чтобы снова включить его в изображение, на этот раз с одним слоем и продолжить строительство. Тем не менее, вы теряете историю.

5

Существует предел, равный 42 - по-видимому, жесткий предел, установленный AUFS.

Это может быть немного предотвращено путем размещения в сценарии отдельных команд RUN и последующего запуска этого скрипта. Тогда у вас будет один, более крупный слой изображения, а не несколько небольших файлов для слияния. Меньшие изображения (с несколькими линиями RUN) облегчают первоначальное тестирование (поскольку новое дополнение в конце RUNlist может повторно использовать предыдущее изображение), поэтому типично ждать, пока ваш файл Docker не стабилизируется до слияния строк.

Вы также можете уменьшить потенциальное количество изображений при ADD количестве файлов, добавив полный каталог, а не несколько отдельных файлов.

+0

Спасибо за ваш ответ. Поэтому, если я создаю изображение с файлом Docker, имеющим 41 строку, и нажимаю его на Quay и создаю другое изображение, использующее мое начальное изображение с Quay в качестве базы, я могу добавить еще 41 строку в файл Dockerfile? –

+0

@RezaSanaie мое понимание в том, что это неверно. Первое нажатое изображение содержит 41 слой. Если вы зависите от этого, у вас будут эти 41 уровень, а затем добавьте что-нибудь лишнее. AUFS используется для простое разделение файловых систем. Я думаю, что это огромное ограничение в Docker, но, возможно, они ждут, когда AUFS обработает больше слоев вверх по течению. – d11wtq

+0

Итак, лучший способ сделать это - это установить скрипт установки и запустить его. Это верно? –

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