Подтвердить что ты не робот

Какое базовое изображение Docker должно использоваться для установки приложений в контейнере без каких-либо дополнительных ОС?

Я запускаю демон Docker на моей ОС GUEST, которая является CentOS. Я хочу установить программные сервисы поверх этого изолированным образом, и мне не нужно другое изображение ОС внутри моего контейнера Docker.

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

Есть ли в Docker базовое изображение "whiteglove/blank", которое я могу использовать? Я хочу очень скудный контейнер, который использует в качестве отправной точки то, что может предложить моя GUEST OS. Возможно ли это?

4b9b3361

Ответ 1

То, что вы просите, невозможно из коробки с докером. Каждый образ Docker имеет собственную корневую файловую систему, в которой должна быть установлена какая-то ОС.

Ваши варианты:

  1. Используйте минимальное базовое изображение, например изображение BusyBox. Это даст вам абсолютный минимум, необходимый для запуска контейнера.

  2. Используйте базовый образ CentOS, в этом случае ваш контейнер будет работать в той же или очень похожей ОС.

Причина, по которой образы Docker таковы, заключается в том, что они должны быть портативными. Любой образ Docker предназначен для запуска везде, где работает Docker, независимо от операционной системы. Это означает, что образ Docker должен содержать всю корневую файловую систему и установку ОС.

Если вам нужно что-то из операционной системы хоста, вы можете поделиться каталогом с помощью томов Docker. Тем не менее, это, как правило, предназначено для использования при монтировании каталогов данных, и это все еще требует наличия образа Docker с ОС.


Тем не менее, если у вас есть статически связанный двоичный файл, который не имеет абсолютно никаких зависимостей, становится легко создать очень минимальное изображение. Это называется "микроконтейнер", и Go, в частности, хорошо подходит для их производства. Вот некоторые дополнительные сведения о микроконтейнерах и о том, как их производить.


Еще один вариант, на который вы могли бы обратить внимание, если вам нужна только часть управления ресурсами контейнеров, это использовать lxc-execute, как описано в этом ответе. Но вы теряете и все другие приятные функции Docker. К сожалению, то, что вы пытаетесь сделать, это просто не то, для чего построен Docker.

Ответ 2

Из Docker лучшие практики:

По возможности используйте текущие официальные репозитории в качестве основы для своего изображения. Мы рекомендуем образ Debian, так как он очень жестко контролируется и хранится крайне минимально (в настоящее время менее 100 мб), но все еще является полным дистрибутивом.

То, о чем вы просите, полностью противоречит идее использования контейнеров Docker. Вы не хотите, чтобы какая-либо надежда на вашу ОС GUEST. Если вы сделаете свой докер, вы не будете переносимы.

Когда вы создаете контейнер, вы хотите, чтобы он запускался на любой машине, на которой работает Docker. Будь то CentoOS, Ubuntu, Mac или Microsoft Azure:)

В идеале нет преимуществ вашей ОС базового контейнера, которая должна что-либо делать с вашей ОС хоста.

Ответ 3

Для любого контейнера необходимо иметь как минимум корневую файловую систему. Вот почему вам нужно использовать базовое изображение с корневой файловой системой. Ваша идея не полностью противоречит парадигме использования контейнера; в отличие от виртуальных машин, мы хотим, чтобы контейнер был минимальным без большого количества повторяющихся элементов, которые он может использовать из ОС ниже.

Ответ 4

Следуя ссылкам Рохана Сингха, я нашел некоторую связанную информацию, которая, как правило, не противоречит, а относится к основной идее вопроса:

Базовое изображение для всех изображений Docker - это изображение нуля. В нем по сути ничего нет. Это может показаться бесполезным, но вы можете использовать его для создания наименьшего возможного изображения для вашего приложения, если вы можете скомпилировать ваше приложение в статический двоичный файл с нулевыми зависимостями, как вы можете с Go или C.

Ответ 5

Как я понял в докере, когда вы используете базовый образ, вы действительно не устанавливаете дополнительную ОС.

Это просто структура каталогов с предустановленными программами, или, можно сказать, файловая система действительного базового образа ОС.

В большинстве случаев [щелкните эту ссылку для исключения], сам docker [механизм докера] работает на виртуальной машине Linux, когда используется на Mac и Windows.

Если вы запутались в виртуализации, в Docker Container нет виртуализации. Контейнеры выполняются в пользовательском пространстве поверх ядра операционной системы хоста. Таким образом, контейнеры и хост-ОС будут использовать одно и то же ядро.

Итак, для подведения итогов:

  1. Считайте, что основной операционной системой является Windows или Mac.
  2. Установленный Docker находится внутри виртуальной машины Linux, работающей на этих хост-ОС.[используйте этот ресурс для получения дополнительной информации]
  3. Базовые образы Linux внутри Docker-контейнера затем используют эту виртуальную машину Linux в качестве хост-ОС, а не собственные окна или Mac.
  4. В linux Базовые образы linux внутри директории контейнера Docker используют хост-систему, которая сама является linux без какой-либо виртуализации.
  5. Базовый образ в Docker Container - это просто снимок этих программ и инструментов для дистрибутива Linux.
  6. Базовый образ использует ядро хоста (во всех трех случаях это linux).
  7. Следовательно, в контейнере нет виртуализации, но докер может использовать одну родительскую виртуальную машину Linux для запуска самого [механизма докера] внутри него.

Заключение: Когда вы устанавливаете базовый образ в Docker, в контейнере не устанавливается дополнительная ОС, а создается только копия файловой системы с минимальным количеством программ и инструментов.