Назад | Перейти на главную страницу

контейнеры докеров в процессе конвейера CI

Я пытаюсь интегрировать контейнеры докеров в свой простой конвейер CI для развертывания веб-приложения.

У меня есть 3 контейнера с nginx, tomcat и mysql.

Я понял основы того, как создавать эти контейнеры с помощью файлов Docker и связывать их вместе.

Мои артефакты загружаются на сервер Nexus, и я вижу разные способы развертывания артефактов в контейнерах докеров.

Один из них - перестроить контейнер tomcat, извлекая вновь созданный артефакт и копируя его в контейнер с помощью ADD в Dockerfile.

Другой способ - запустить неизмененный контейнер Tomcat, монтирующий том на хосте, содержащий новый артефакт, полученный из нексуса.

Я не понимаю, какой подход был бы правильным с «точки зрения докеров». Я вижу компромисс между возможностью повторного использования контейнера с некоторой конфигурацией и одним фиксированным контейнером, который я могу просто отправить и запустить без дополнительных процессов предоставления папки webapp для развертывания и т. Д.

Это у меня общее замешательство. То же самое для контейнера nginx. Должны ли определенные изменения в файлах конфигурации привести к перестройке контейнера или мне следует просто смонтировать какой-либо файл на хост-машине при запуске контейнера?

большое спасибо

Частично победа с Docker заключается в оптимизации и автоматизации частей процесса разработки. Я думаю, что лучший способ добиться этого - перестроить контейнер. Управляйте своими простыми конфигурациями и небольшими файлами в репозитории, копируйте артефакты в контейнер Docker как часть процесса Dockerfile. Таким образом, всякий раз, когда вам нужно обновить код, вы просто создаете новый контейнер Docker. Совместное использование смонтированного тома также будет работать, но я бы сказал, что вам следует избегать этого, если вы можете. Я говорю это потому, что смонтированные тома сложнее использовать с SELinux. SELinux теперь может автоматически генерировать метки MCS для каждого контейнера Docker при запуске, что в основном ограничивает его каталогом. Это значительно снижает риск для вашего хоста, поскольку по умолчанию контейнеры не содержат каких-либо значимых файлов.

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

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

Если вы выполняете развертывание в производственной среде с помощью Docker, я бы попытался, чтобы мой конвейер CI создавал образы докеров, как они будут использоваться в производственной среде.