После длительных и постоянных мучений в ручном развертывании приложений на сервера для тестов и продакшена, у меня на работе появилось желание в автоматизации этого процесса.
Я обычный разработчик и с DevOps связан косвенно. Опыта в этом немного, а отдельного специалиста у нас для этого нет. Поэтому приходиться брать все в свои руки.
Сейчас у нас есть несколько приватных проектов, состоящие из бэкенда и фронтенда. По масштабу проекты не большие. Бэкенд создан на стеке NodeJS + MongoDB + ElasticSearch + Redis.
Что бы автоматизировать процесс развертывания, начал изучать Docker. Но столкнулся с некоторым непониманием как все должно работать. В основном все материалы в сети отвечают на вопрос: Что такое Docker? И лишь малая часть отвечает на вопрос: Как с ним работать? И даже в них все процессы описываются поверхностно.
Я разобрался с Docker клиентом и поднял docker-machine. Понял как устанавливать образы с Docker Hub и запускать контейнеры. А дальше все... Тупик.
Возникло много вопросов, что делать дальше?
Как мне создать свой контейнер состоящий из образов NodeJs, MongoDB, ElasticSearch, Redis?
Где это все хранить?
Как мне расшарить папки проектов для Docker?
Как мне это интегрировать с CI и CD?
Я запутался. Возникают мысли, а нужно ли мне это? Может все таки по старинке деплоить через FTP?
В общем прошу помощи разобраться в том, как должен быть построен процесс развертывания проектов на Docker?
Или поделиться материалами, где на практике показано что и как нужно делать.
Василий Назаров, Git используется. Но только в качестве контроля версий и не больше. Только как он мне может помочь в деплое? Как я понимаю мне тогда придется подключаться по ssh к каждому серверу и обновлять там все нужные репозитории проектов. Если я не прав, поправьте меня.
Тем более что по части фронтенда, я кидаю на сервер уже скомпиленную папку dist, которая Git'ом игнорируется.
Рамиль:
Конечно, придётся подключаться по SSH.
Но по FTP же вы тоже подключаетесь?
В самом-самом простом случае, даже без Докера/CI/CD, у вас на сервере будут 2 просто неоценимые возможности:
1. Одной командой git pull затянуть все обновления.
2. Одной командой git checkout откатиться на предыдущий стабильный коммит, если что-то пойдёт не так.
Что касается сборки фронта - не знаю, как лучше, но, как минимум, можно после заливки Git-ом дать ещё одну команду, gulp build или что там у вас
По моему скромному мнению...
не должно быть одного контейнера который содержит все - и базу и ноде и еластик. Это должны быть отдельные контейнеры, которые соединяются через расшаренные свои адреса и порты.
Поскольку контейнеров несколько , и управлять этим сложно , применять Docker compose, который как раз и описывает это все хозяйство.
Там же описывать внешние папки монтируемые к контейнеру. Или есть еще какие то Docker Storage ( не пробовал )
То есть , код всё равно придётся заливать на сервер и после растартовать контейнер/ы.