2016-08-22 3 views
3

Я пытаюсь закрепить мое приложение для рельсов.Docker, Как заменить задачи capistrano в докере

В настоящее время приложение настроено с использованием Ansible и развертывается с использованием capistrano.

Я исследовал для различных докеров стратегии развертывания-х и мыслей об избавлении от Capistrano в докер и буду использовать докер с докером-компоновать

Я пишу dockerfile для настройки и развертывания приложения, но это несколько сложно развернуть app похож на capistrano, поскольку deploy.rb использует несколько задач rake для настройки заданий перед развертыванием, таких как создание каталогов, задающих имя приложения и выборка нескольких переменных.

Как я могу дублировать задачи с крышкой в ​​файле докеров или есть способ использовать текущие задачи грабли в файл докеров или запуск контейнера докеров?

ответ

1

Теперь самое подходящее время для того, чтобы отступить и подумать, превышают ли преимущества Docker дополнительную сложность для вашей ситуации. Предполагая, что это, вот несколько советов о том, как улучшить работу этих компонентов.

В то время как Ansible - это система управления конфигурацией, она также предназначена для оркестровки (т. Е. Выполнения команд в серии удаленных машин). Это связано с переходом с Capistrano, и вы можете счесть полезным переносить задачи Capistrano в Ansible и исключить инструмент (и, следовательно, сложность) из вашего стека. Вероятно, это связано с созданием загрузочной книги deploy.yaml, которую вы запускаете для развертывания вашего приложения.

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

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

В целом, я рассматриваю его так: Docker создает контейнер, в котором есть все необходимое для запуска одной части вашего приложения (включая конкретную проверку кода). Ansible настраивает среду, в которой вы запускаете контейнеры, и управляет всеми работами по их обновлению и помещает их в нужные места.

+0

Да, вы правы, что это будет извлечено только при создании файла dockerfile, но теперь моя боль должна получить задачи рейка из capistrano, работающие над контейнером, или просто перевести их в сценарий оболочки и вызывать их из файла dockerfile? btw Спасибо за подробное объяснение, но я буду использовать Ansible только для обеспечения контейнеров. – slashRahul

+0

Это зависит от того, что делают ваши команды Cap. Если они уже работают только на локальной машине, вы можете просто «RUN» их в файле докеров. Если они предназначены для работы на удаленных хостах, вам нужно будет немного поработать, чтобы получить доступ к вашим контейнерам докеров через стандартный метод оркестровки, например ssh, или переписать их только для работы на локальной машине. –

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