Где я должен `сделать` скомпилированный код при создании образа Docker? БЕЖАТЬ? CMD? - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю образ докера для некоторого кода, который должен быть скомпилирован с использованием distutils.extension.У меня есть Makefile, который запускается python setup.py build_ext --inplace.

Должен ли я сделать

RUN make 

или

CMD ["make"]

Я нашел сообщение в блоге для maven compile который использовал RUN.Также это gcc image предлагает использовать RUN gcc -o myapp main.c, предполагая, что RUN будет работать для компиляции моего кода, но другие ресурсы ( Как создать c-образ в контейнере , Должен ли я скомпилировать свое приложение внутри образа Docker ) предлагает включить скомпилированный код в изображение, чтобы увеличить его размер, что заставляет меня думать, что я должен использовать CMD, потому что это не будет выполнено до запуска контейнера,

1 Ответ

0 голосов
/ 16 ноября 2018

Команды запускаются один раз, когда изображение строится.CMD будет выполняться каждый раз при запуске контейнера.

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

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

Нет смысла компилировать во фразе CMD, если у вас нет особых причин для этого.

...