Когда я разрабатываю свои приложения, у меня много чего происходит. Обычно это микросервисы, и у каждого есть свои собственные инструменты сборки. Например, мне нужно запустить сценарий сборки для hugo, сценарий сборки для webpack и некоторые задачи gulp. Мне также придется сгенерировать некоторые файлы, ключи и т. д.
Запускать их вручную - огромная боль. Когда я тестирую в dev и размещаю, я постоянно перестраиваю контейнеры докеров, выполняя одни и те же команды. Это становится болезненно.
Есть ли какие-нибудь инструменты, которые могут в этом помочь? Где я могу запустить одну команду и заставить ее перестроить все в моем приложении? Сценарий bash подойдет, но это не вариант.
Я видел, как люди используют сценарии сборки, как в C, но я не могу найти ничего похожего для DevOps. Может быть, у докера есть для этого инструмент?
Большинство приложений, которые я видел, которые используют этот набор инструментов, используют скрипты npm и запускают что-то вроде npm build для выполнения всех этих задач. Скрипты make или shell тоже работают нормально.


Вероятно, вы захотите создать свои контейнеры, а не использовать изображение.
Я предполагаю, что вы используете docker-compose или docker stack deploy для запуска контейнеров. В обоих сценариях у вас есть файл .yaml, описывающий ваши службы. Предположим, что следующее является частью вашей конфигурации прямо сейчас, чтобы развернуть службу, в которой вы хотите запустить сценарий сборки для webpack, и что вы используете образ Node.js в качестве основы (и вы можете адаптировать это к вашему фактическому сценарию легко):
# ...
services:
webpack:
image: node:8.12.0
# ...
# ...
Вместо того, чтобы использовать изображение напрямую, вы можете указать контекст сборки:
# ...
services:
webpack:
build:
context: ./docker/webpack
# ...
# ...
# ...
Создайте структуру каталогов соответственно, чтобы там была папка docker/webpack. Внутри этой папки создайте сценарий оболочки build-script.sh с командами, которые вы хотите запустить, и создайте файл Dockerfile. Этот файл должен выглядеть так:
FROM node:8.12.0
COPY build-script.sh /tmp/build-script.sh
RUN npm install --save-dev webpack \
&& /bin/sh /tmp/build-script.sh
Затем, когда вы запустите docker-compose up или docker stack deploy ..., он создаст контейнер, уже инициализированный содержимым сценария build-script.sh. Очевидно, что с этим Dockerfile вы можете сделать гораздо больше, но для вашего случая использования вы можете начать с чего-нибудь довольно простого. Вы даже можете вообще не создавать скрипт и запускать все свои команды в одном огромном операторе RUN (используя \ в конце каждой строки, кроме последней, и разделяя разные команды с помощью &&).
Позже вы даже можете создать образ самостоятельно, загрузив этот Dockerfile в github, создав учетную запись на hub.docker.com и связав ее со своим github. Вы можете назвать это как-то вроде BugHunterUK-dev-environment или что-то в этом роде и использовать image: BugHunterUK-dev-environment:latest в своем Yaml-файле.
Просто из любопытства, почему сценарий bash не работает? Проверьте аргумент докера
commandздесь. Вы можете указать докеру запускать команды при создании своих служб, что позволит вам запускать сценарии bash автоматически каждый раз, когда вы повторно развертываете, вместо того, чтобы делать это вручную.