8

Я планирую создать рабочий процесс на основе jenkins на основе Docker в конце. Моя идея состоит в том, чтобы автоматически построить (по Jenkins) изображение докеров для каждой зеленой сборки, а затем развернуть это изображение либо дженкинсом, либо «рукой» (я еще не уверен, хочу ли я автоматически запускать каждую зеленую сборку).Рабочий процесс непрерывного развертывания Docker

Как легко создать новое изображение. Мой вопрос касается самого развертывания. Какова наилучшая практика для «перезагрузки» или «перезапуска» работающего контейнера докеров? Предположим, что изображение было изменено для контейнера, как я могу изящно перезагрузить его, когда у вас работает служба? Нужно ли мне делать традиционный танец с несколькими бегущими контейнерами и балансировкой нагрузки или есть «докеры»?

+2

См: http://stackoverflow.com/questions/18285212/ как-к-scale-docker-container-in-production/ –

ответ

6

Предположим, что изображение изменилось для контейнера, как я могу изящно его перезагрузить, имея внутри службы?

Вы не хотите этого.

Docker - это простая система управления приложениями и их зависимостями. Он прост и прочен, потому что ВСЕ связаны с ним приложениями. Если ваше приложение работает сегодня на вашем ноутбуке, оно будет работать завтра на вашем сервере. Это связано с тем, что мы захватили 100% «входов» для вашего приложения.

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

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

+0

Хороший ответ, хотя можно добавить факт, что по-прежнему важно убить запущенные процессы изящно –

+0

Докер уже отправляет сигнал и ждет, пока ваше приложение перестанет работать (только за 10 секунд по умолчанию вам может понадобиться увеличить его). В моем комментарии пытались сказать, что «перезапуск служб (или любых ошибок) внутри контейнера является анти-шаблоном». Всегда предпочитайте, чтобы контейнеры были свежими. Все остальное просто наращивает технический долг, который вызовет серьезные проблемы в будущем. – BraveNewCurrency

1

Машина Docker сама по себе всегда должна быть неизменной, поскольку вы должны заменить ее для нового развертывания. Сохранение состояния внутри контейнера Docker не будет работать, если вы хотите регулярно отправлять новые выпуски, которые вы создали на своем CI.

Docker поддерживает тома, которые позволят вам записывать файлы, которые являются постоянными в какую-либо папку на хосте. При последующем обновлении контейнера Docker вы используете один и тот же объем, так что вы получили доступ к тем же файлы, написанных старой емкость:

https://docs.docker.com/userguide/dockervolumes/

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