Слово « контейнер» относится к облегченной технологии виртуализации, доступной в современных ядрах Linux, эта технология очень похожа на тюрьмы FreeBSD.
Старое ядро Linux, не поддерживающее контейнеры, может запускать процессы одновременно. Некоторые атрибуты системы являются частными для процесса, например, среда процесса или память процесса: только процесс, владеющий этими атрибутами, и сама операционная система могут получить доступ к этим данным. (Существует много лазеек, как в некоторых реализациях ps , но это, по сути, так!) Некоторые процессы совместно используются процессами, например, файловой системой и сетевыми интерфейсами.
Современное ядро Linux с возможностью работы с контейнерами способно обрабатывать больше атрибутов системы как частные данные, связанные с процессом или группой процессов. Результирующий контекст представляет собой контейнер, и вместо запуска программы в «начальных контейнерах» с использованием файловой системы и сетевых интерфейсов, инициализированных операционной системой, можно запускать процессы в других контейнерах, чтобы они видели другую файловую систему и другой список сетевых интерфейсов. Таким образом, два процесса, выполняющиеся в разных контейнерах, действительно совместно используют ядро. Возможно, вы знакомы с командой chroot, которая может запускать процесс в отдельной файловой иерархии, контейнеры продвигают идею на несколько шагов дальше.
Конечно, это только очень грубое объяснение, но я надеюсь, что оно поможет прояснить идею о том, что такое контейнеры. Теперь, для чего они хороши?
Популярный интерфейс к возможностям контейнеров в ядрах Linux реализуется утилитой командной строки docker, которую можно использовать для создания артефактов, представляющих файловые системы ( образы докеров ), и запуска процессов в контейнерах, где эти файловые системы доступны. Этот программный пакет также способен создавать специальные виртуальные сетевые системы, позволяющие нескольким контейнерам взаимодействовать в частной сети.
Контейнерные технологии удобны для:
- Опишите масштабируемые сложные развертывания.
- Предоставить разработчикам приложений среду, очень похожую на производственную среду.
- Реализуйте неизменяемый шаблон сервера, поскольку программные артефакты обычно описывают полную операционную систему, а не просто пакет приложения.
(Поскольку вы, кажется, знакомы с другими технологиями виртуализации, такими как Virtual Box, вы можете заметить, что эти технологии также могут удобно решать три вышеуказанные задачи. В настоящее время спектр технологий виртуализации довольно небольшой, и мы можем сравнить вопрос об их популярности в В некоторых случаях популярность компьютерных языков зависит, вероятно, от технических достоинств каждого отдельного решения, а также от множества факторов, которые я просто обозначу как «случайность».)