Назад | Перейти на главную страницу

Как запустить сборку докеров с более низким приоритетом?

Мне часто приходится перестраивать образы Docker, и я делаю это внутри хоста, на котором запускаю свои контейнеры. Иногда я замечаю, что это оказывает значительное давление на ЦП, поэтому я подумал, что могу запустить docker build под nice -n19, но, похоже, это не имеет никакого значения с точки зрения того, сколько докеров дает, когда нужно запускать другие процессы.

Я бы предпочел не использовать репозитории Docker Hub, потому что это личные вещи, и я пытаюсь сэкономить каждую копейку, которую могу прямо сейчас. Я также знаю, что могу настроить другую машину в качестве сборки / репозитория - например, я могу использовать машину в офисе, - но я не уверен, как это сделать.

Итак, вопрос: почему nice -n19 docker build ... кажется не очень полезным?

(бонусные баллы за то, что указали мне на документы о том, как настроить мою собственную машину для сборки / репо)

почему хороший -n19 docker build ... кажется не очень полезным?

В docker commands - это клиент демона docker, который запускает процессы, выполняемые в контейнерах. Когда вы отдаете меньший приоритет docker , приоритет самого демона докера не изменяется, поэтому ваша сборка и exec запускаются с приоритетом по умолчанию. Это похоже на то, что более низкий приоритет вашего веб-браузера не означает, что веб-сервер будет обслуживать ваши запросы с более низким приоритетом.

как настроить мою собственную машину для сборки / репо

Для базовой отдельной машины сборки вы можете просто сделать docker export, scp, docker import. Но для более серьезной системы сборки вы можете захотеть запустить частный реестр докеров. Еще несколько полезных документов:

Если у вас есть собственный частный реестр, вы можете выполнить сборку со своей локальной рабочей станции в офисе, а затем использовать docker push и docker pull чтобы загрузить образ докера в свой частный реестр и получить его в любом месте.

Ответ Ли объясняет причину, по которой Докер не nice ваши сборки. Ниже я хотел бы дать вам практическое решение.

Один из способов сделать ваши сборки Docker более щадящими - это определить ресурсоемкие части вашего Dockerfile, а затем просто nice эти части в самом Dockerfile. Это также сделает вашу сборку более щадящей для инфраструктуры удаленной сборки (например, Jenkins CI).

В моем случае я создавал довольно тяжелый контейнер Apache mod_perl с кучей модулей CPAN. Сборка всех этих модулей была дорогостоящей частью, поскольку большая часть кода компилируется с использованием GCC. Во всяком случае, я смог nice этот шаг моей сборки, изменив строку моего Dockerfile с

RUN cpanm --quiet --installdeps --local-lib-contained /perlmod .

к

RUN nice -n19 cpanm --quiet --installdeps --local-lib-contained /perlmod . 

Несмотря на то, что это странно и немного взломано, я не уверен, что буду публиковать программное обеспечение с nice в Dockerfile, но вы сказали, что это все равно для личных вещей, так что это, вероятно, подходящее решение.

Вы можете обобщить это на любую другую дорогостоящую операцию в Dockerfile,

Другие примеры:

Python

RUN nice -n19 pip install some_module

Node.js

RUN nice -n19 npm install .

Дорогой этап сжатия

RUN nice -n19 xz some_file.bin