2015-04-28 2 views
7

Если я запустил Docker Engine и тот же контейнер в наборе разных дистрибутивов Linux, будет ли контейнер работать таким же образом? Я спрашиваю, потому что во многих случаях приложения зависят от конкретного дистрибутива Linux для некоторых ресурсов, таких как шрифты. Если мое приложение, запущенное внутри контейнера Docker, зависит от шрифта, используемого в Ubuntu (и может быть много других зависимостей), как это управляется? Нужно ли мне устанавливать шрифт внутри контейнера, мне нужно запустить Ubuntu внутри контейнера, запускающего приложение, или приложение использует шрифты из базовой операционной системы, запускающей контейнер?Изоляция контейнера докеров, не заботятся ли о базовой ОС Linux?

+0

Как используются шрифты? Например. ваша программа использует их через X или через HTML/CSS в веб-браузере или каким-то другим способом? – Bryan

ответ

8

Любые недостающие ресурсы должны быть установлены в Docker image (который может начинаться с изображения ubuntu).
Он не должен полагаться на хост для зависимостей.

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

Контейнер не видит ресурсы хоста (рядом с установленными томами), поскольку он имеет механизм Docker между контейнером и хостом, чтобы настроить cgroups и namespaces, чтобы контролировать, какие ресурсы контейнер может видеть и получать.

Docker

The "fedora" image referenced in jboss/base является base image:

images

В терминологии Докер, только для чтения слой называется изображение. Изображение никогда не меняется.

Поскольку Docker использует файловую систему Union, процессы считают, что вся файловая система смонтирована read-write. Но все изменения идут на самый верхний слой, который можно записать, и под ним исходный файл в режиме только для чтения остается неизменным.
Поскольку изображения не меняются, изображения не имеют состояния.

См "What is the relationship between the docker host OS and the container base image OS?":

Единственная связь между хостовой ОС и контейнером является ядром.

Поскольку ядро ​​по-прежнему является ядром хоста, у вас не будет никакого конкретного модуля/патчей ядра, предоставляемого дистрибутивом.

+0

Правильно, единственное, что процесс Docker должен совместно использовать с основной ОС - это ядро. Все остальное должно быть в самом изображении контейнера (или четко определенной внешней службе, такой как сервер базы данных). – Thilo

+0

Спасибо.Есть ли у docker engine Linux по умолчанию, или вы всегда определяете его в своем файле docker? Я вижу, что, например, Jboss Wildfly использует «базовый» образ, который начинается с загрузки Fedora. – user1340582

+1

@ user1340582 На хосте Linux не установлен механизм докеров, поэтому сервер должен иметь ядро ​​3.10+ (для обеспечения функций lxc, cgroups и других функций Docker) – VonC

0

Что вам нужно быть осторожным является

  • зависимости ядра,
  • и некоторых управления обязательным доступа (SELinux, Apparmor) конфигурацией, которые распределения зависят и может оказать влияние на то, как ваш Докерные контейнеры работают.