#docker #kubernetes #containers
#docker #kubernetes #контейнеры
Вопрос:
Мы изучаем docker и пытаемся выяснить, предоставляют ли docker способ сделать следующее, чтобы устранить некоторые накладные расходы на управление при текущем подходе, который мы используем.
Мы рассматриваем что-то вроде приведенного ниже:
-
Иметь базовый шаблон, который имеет ОС Linux App1- Oracle App2 — Mysql App3 — Mongodb
-
Всякий раз, когда у нас есть запрос, мы должны иметь возможность извлекать контейнер из базового шаблона для конкретного приложения. Пример: контейнер, в котором установлена ОС Linux только приложение Oracle. Аналогично OS Mongodb в другом контейнере
-
У нас есть ограничение на наличие разных шаблонов для каждого приложения, следовательно, нам нужно иметь только один главный шаблон, который может содержать все приложения и извлекать контейнеры каждый раз, когда конкретное приложение включено только из базового шаблона.
Любой указатель на то, как мы можем этого добиться, был бы полезен. Может ли помочь dockerfile или что-то еще?
Заранее спасибо.
Комментарии:
1. Рассмотрите возможность использования Helm .
Ответ №1:
Можете ли вы? ДА. Должны ли вы? Нет.
Многоуровневые файловые системы означают, что вы можете создавать несколько изображений и совместно использовать общие части файловой системы. Вы создаете свой файл Dockerfile с общими частями в верхней части файла Dockerfile или в общем базовом образе. Эти общие части должны быть минимальными, вам не нужно перестраивать app2 из-за изменения app1.
Изображения должны быть помечены разными репозиториями для каждого приложения и разными тегами для разных сборок каждого приложения. Сами изображения должны содержать двоичные файлы, библиотеки и другие зависимости, необходимые для запуска приложения, но не конфигурацию или постоянные данные. Конфигурация вводится извне с помощью переменных среды, аргументов командной строки, конфигураций, секретов или тома, доступного только для чтения. И данные почти всегда сохраняются в томе или базе данных.
Изображения не включают ОС, если под ОС вы включаете ядро Linux. Контейнеры совместно используют ядро из операционной системы хоста. Не путайте контейнер с виртуальной машиной, они разные, ведут себя по-разному и управляются по-разному.
Для смешивания и сопоставления различных приложений с различными конфигурациями и базами данных наиболее разумно перейти к файлу compose или kubernetes yml, который определяет, какие образы и конфигурации следует развертывать. Когда вы меняете приложения, это не просто изменение конфигураций для монолитного образа, вместо этого вы извлекаете соответствующий образ для этой конкретной задачи.
Ответ №2:
у каждого docker должен быть один PID. Это означает, что мы должны запускать одну службу в одном контейнере
Ответ №3:
Вы можете это сделать, но вам никогда не следует объединять несколько сервисов в одном контейнере. У него много недостатков и нет никакой пользы.
Несколько недостатков:
- Вы не можете эффективно ограничивать ресурсы для разных служб
- Вы не можете масштабировать одну службу независимо
- Ваши изображения будут огромного размера, поскольку кэш не может быть использован
- Иногда вы не можете разрешить конфликтующие зависимости