Могу ли я размещать несколько приложений в одном файле dockerfile

#docker #kubernetes #containers

#docker #kubernetes #контейнеры

Вопрос:

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

Мы рассматриваем что-то вроде приведенного ниже:

  1. Иметь базовый шаблон, который имеет ОС Linux App1- Oracle App2 — Mysql App3 — Mongodb

  2. Всякий раз, когда у нас есть запрос, мы должны иметь возможность извлекать контейнер из базового шаблона для конкретного приложения. Пример: контейнер, в котором установлена ОС Linux только приложение Oracle. Аналогично OS Mongodb в другом контейнере

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

Любой указатель на то, как мы можем этого добиться, был бы полезен. Может ли помочь dockerfile или что-то еще?

Заранее спасибо.

Комментарии:

1. Рассмотрите возможность использования Helm .

Ответ №1:

Можете ли вы? ДА. Должны ли вы? Нет.

Многоуровневые файловые системы означают, что вы можете создавать несколько изображений и совместно использовать общие части файловой системы. Вы создаете свой файл Dockerfile с общими частями в верхней части файла Dockerfile или в общем базовом образе. Эти общие части должны быть минимальными, вам не нужно перестраивать app2 из-за изменения app1.

Изображения должны быть помечены разными репозиториями для каждого приложения и разными тегами для разных сборок каждого приложения. Сами изображения должны содержать двоичные файлы, библиотеки и другие зависимости, необходимые для запуска приложения, но не конфигурацию или постоянные данные. Конфигурация вводится извне с помощью переменных среды, аргументов командной строки, конфигураций, секретов или тома, доступного только для чтения. И данные почти всегда сохраняются в томе или базе данных.

Изображения не включают ОС, если под ОС вы включаете ядро Linux. Контейнеры совместно используют ядро из операционной системы хоста. Не путайте контейнер с виртуальной машиной, они разные, ведут себя по-разному и управляются по-разному.

Для смешивания и сопоставления различных приложений с различными конфигурациями и базами данных наиболее разумно перейти к файлу compose или kubernetes yml, который определяет, какие образы и конфигурации следует развертывать. Когда вы меняете приложения, это не просто изменение конфигураций для монолитного образа, вместо этого вы извлекаете соответствующий образ для этой конкретной задачи.

Ответ №2:

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

Ответ №3:

Вы можете это сделать, но вам никогда не следует объединять несколько сервисов в одном контейнере. У него много недостатков и нет никакой пользы.

Несколько недостатков:

  1. Вы не можете эффективно ограничивать ресурсы для разных служб
  2. Вы не можете масштабировать одну службу независимо
  3. Ваши изображения будут огромного размера, поскольку кэш не может быть использован
  4. Иногда вы не можете разрешить конфликтующие зависимости