2015-08-11 2 views
3

Мое приложение состоит из веб-сервера (node.js), нескольких рабочих (node.js) и базы данных Postgres. Обычно я просто создавал приложение на heroku с админом postgres и предлагал приложение там с процессами, определенными в Procfile.Как доставить докеретированное приложение клиенту?

Однако клиент хочет, чтобы приложение доставлялось на его частный сервер с докером. Итак, поток должен выглядеть так: я вношу некоторые изменения в моем приложении node.js (на веб-сервере на рабочих), «нажимать» изменения на репо (docker hub?) И клиент, когда он готов «тянет» измененное приложение (изображения ?) на свой сервер и приложение (контейнеры докеров?) перезапустите с новым обновленным кодом.

Я новичок в докер и даже после прочтения нескольких статей/учебники я не знаю, как я могу использовать докер ...

Так в идеале, если бы один докер изображение (в Докер хаб), который будет содержать мой код приложения, база данных и клиент могли бы как-то потянуть его и просто запустить ... Возможно ли это с докером?

ответ

4

Стандартная стратегия состоит в том, чтобы упаковать каждый компонент вашей системы в отдельное изображение докеры (это называется микросервисной архитектурой), а затем создать «оркестровку» - набор сценариев для развертывания, запуска/остановки и обновления.

Например:

  • сценарий развертывания вытягивает изображения из Докер репо (Докер Hub или частной репо) и призывает начать сценарий
  • сценарий запуска просто делает docker run для каждого компонента
  • остановка скрипт вызывает docker stop для каждого компонента
  • сценарий обновления вызывает стоп-скрипт, затем обновляет изображения с репо, затем вызывает стартовый скрипт

В Интернете есть проекты программного обеспечения, предназначенные для упрощения оркестровки, например. this SO ответ имеет исчерпывающий список. Но обычно простые скрипты bash работают нормально.

+2

Изображение docker для службы может стать очень громоздким, если вы создаете и распространяете полное изображение os для каждого компонента вашей системы. Он отлично работает для чего-то вроде [go] (https://golang.org/), где не может быть никаких зависимостей и крошечных образов, а не только для приложения с несколькими зависимостями пакета bloaty os. Вы можете запускать несколько контролируемых процессов в контейнере. Вы также можете распространять одно базовое изображение, которое может запускать все ваши индивидуальные службы. – Matt

+0

@Matt Это правда, архитектура микросервиса не всегда удобна. Но иногда это может быть полезно, например. мы запускаем несколько приложений python и, следовательно, у нас есть общий базовый образ python для всех из них -> размер изображения докеров относительно невелик. –

+0

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

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