eruditecat
@eruditecat
Красноглазик

Правильно ли я понял философию Docker?

Я только-только начал вникать в Docker, и мне понравилось. Но прежде чем создать свой первый рабочий стек, я хотел бы удостовериться, что я правильно всё понял. Вот как я вижу вижу веб-приложение, которое работает на связке nginx + Node.js + MongoDB:
  1. nginx
    • HTTP-сервер
    • Конфиг
    • Логи
  2. Node.js
    • Движок (сам Node.js)
    • Исходный код приложения
    • npm-модули
      • Глобальные
      • Локальные
    • Конфиг приложения
    • Логи
  3. MongoDB
    • Сервер СУБД
    • Базы данных
    • Конфиг
    • Логи

Как это будет в Docker:
  1. Образы
    1. nginx
    2. Node.js и глобальные npm-модули
    3. Исходный код и локальные npm-модули (или лучше это в предыдущий контейнер, и при старте выполнять npm install?)
    4. СУБД
  2. Контейнеры данных
    1. Базы данных
  3. На файловой системе хоста
    1. Логи (но, я так понимаю, это немного нарушает принцип изолированности. Если так, то куда их? В отдельный контейнер?)
    2. Все конфиги (или лучше разместить конфигурацию в Dockerfile полностью?)

Допустил ли я где-нибудь ошибки? Не могли бы ли вы поправить меня в 1.c., 3.a., 3.b.?
  • Вопрос задан
  • 3490 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Контейнеры данных


Они не нужны, используйте named volumes вместо этого (с версии 1.9 докера).

Исходный код и локальные npm-модули (или лучше это в предыдущий контейнер, и при старте выполнять


Нет, npm install надо выполнять ДО сборки образа. Когда контейнер стартует - внутри у него уже все должно быть. Опять же я лично против того, что бы выносить исходники проекта в отдельный контейнер-пустышку. У вас есть контейнер с нодой - исходники для ноды должны быть там. Есть некоторые нюансы связанные со сборкой контейнера но это так.

На файловой системе хоста


Ничего.

Логи прокидываются в stdout/stderr контейнера и собираются на хосте через докер любым подходящим драйвером (читаем документацию).

Конфигурация - все что в конфигах от окружения к окружению меняется - в ENV переменные. Все остальное - не меняется и потому просто вшито внутрь контейнера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы