Есть несколько вопросов о контейнерах , таких как:
- Какую роль играют инструменты управления конфигурацией в неизменной инфраструктуре?
- Какие проблемы решает контейнерная оркестровка?
- Простые контейнеры CI / CD в AWS
Мои вопросы :
- Что на самом деле является «контейнером» (в контексте DevOps)?
- Почему они используются?
terminology
containers
Pierre.Vriens
источник
источник
Ответы:
Самое первое, что нужно знать о контейнере:
Это, в первую очередь, процесс.
Поняв это, можно начать понимать, как контейнеры сравниваются и сравниваются с виртуальными машинами. Контейнеры и виртуальные машины совместно используют изоляцию от своих хостов. Метод изоляции является критическим отличием.
Контейнерные процессы используют расширения узла ядра ОС, на котором они работают, чтобы изолировать себя от других процессов. Другие расширения также обеспечивают изоляцию диска и ресурсов. Контейнеры делят свое ядро и память с операционной системой хоста.
Виртуальные машины используют гипервизор для изоляции виртуальных машин от их хостов. Это уровень программного обеспечения, который перенаправляет запросы на ресурсы от «гостей» (ВМ) на аппаратное обеспечение. Изоляция диска обеспечивается виртуализацией диска. Виртуальные машины не разделяют ядро с хостом - они загружают свои собственные ядра в пространство памяти, выделенное для виртуальной машины.
Одним из важных последствий этого различия является то, что контейнер должен быть совместим с ядром своего хоста. Например, невозможно запустить контейнер на основе Windows Nano Server на хосте Linux или контейнер Ubuntu непосредственно на хосте Windows. Виртуальные машины, напротив, могут запускать любое ядро независимо от операционной системы хоста. При запуске контейнера Linux на хосте Windows Docker запускает контейнер в виртуальной машине Linux.
Операционные различия заключаются в гибкости: контейнеры запускаются и останавливаются примерно так же быстро, как и обычный процесс. Виртуальные машины «тяжелее», для них требуются выделенные ресурсы, и для их запуска и завершения требуется больше времени.
Контейнеры предлагают большую гибкость для операционной модели DevOps:
источник
Слово « контейнер» относится к облегченной технологии виртуализации, доступной в современных ядрах Linux, эта технология очень похожа на тюрьмы FreeBSD.
Старое ядро Linux, не поддерживающее контейнеры, может запускать процессы одновременно. Некоторые атрибуты системы являются частными для процесса, например, среда процесса или память процесса: только процесс, владеющий этими атрибутами, и сама операционная система могут получить доступ к этим данным. (Существует много лазеек, как в некоторых реализациях ps , но это, по сути, так!) Некоторые процессы совместно используются процессами, например, файловой системой и сетевыми интерфейсами.
Современное ядро Linux с возможностью работы с контейнерами способно обрабатывать больше атрибутов системы как частные данные, связанные с процессом или группой процессов. Результирующий контекст представляет собой контейнер, и вместо запуска программы в «начальных контейнерах» с использованием файловой системы и сетевых интерфейсов, инициализированных операционной системой, можно запускать процессы в других контейнерах, чтобы они видели другую файловую систему и другой список сетевых интерфейсов. Таким образом, два процесса, выполняющиеся в разных контейнерах, действительно совместно используют ядро. Возможно, вы знакомы с командой chroot, которая может запускать процесс в отдельной файловой иерархии, контейнеры продвигают идею на несколько шагов дальше.
Конечно, это только очень грубое объяснение, но я надеюсь, что оно поможет прояснить идею о том, что такое контейнеры. Теперь, для чего они хороши?
Популярный интерфейс к возможностям контейнеров в ядрах Linux реализуется утилитой командной строки docker, которую можно использовать для создания артефактов, представляющих файловые системы ( образы докеров ), и запуска процессов в контейнерах, где эти файловые системы доступны. Этот программный пакет также способен создавать специальные виртуальные сетевые системы, позволяющие нескольким контейнерам взаимодействовать в частной сети.
Контейнерные технологии удобны для:
(Поскольку вы, кажется, знакомы с другими технологиями виртуализации, такими как Virtual Box, вы можете заметить, что эти технологии также могут удобно решать три вышеуказанные задачи. В настоящее время спектр технологий виртуализации довольно небольшой, и мы можем сравнить вопрос об их популярности в В некоторых случаях популярность компьютерных языков зависит, вероятно, от технических достоинств каждого отдельного решения, а также от множества факторов, которые я просто обозначу как «случайность».)
источник
Обычно контейнеры ссылаются на что-то вроде докер-контейнеров, которые популяризировали название
Я цитирую из определения докера:
Корневое именование приходит из контейнеров linux (lxc), цель которых состояла в том, чтобы изолировать процесс от его хост-системы, первая цель состояла в том, чтобы избежать компрометации процесса для захвата хост-системы.
Теперь они используются в более широком масштабе. В современном определении «контейнер» вы более или менее выпустите пакет для среды выполнения, который уже включает ваше приложение, его промежуточное программное обеспечение, если это необходимо, и все необходимые библиотеки, и убедитесь, что он будет работать в любой совместимой системе.
Второе преимущество заключается в том, что он позволяет использовать несколько приложений с одинаковой зависимостью в разных версиях без необходимости сильно изменять переменные окружения, чтобы загружать правильные.
В отличие от системы виртуальных машин, такой как виртуальная машина с виртуальной коробкой или экземпляр EC2 в AWS, контейнеры являются виртуальными только на уровне файловой системы и изолируются только в стеке памяти. Они по-прежнему используют один и тот же хост, и операционная система под ними будет обрабатывать такты процессора.
Виртуальная машина является виртуальной на аппаратном уровне, и вы запускаете операционную систему внутри, контейнер является виртуальным на уровне ОС, и вы запускаете процесс внутри.
источник
Из определения AWS :
Контейнерирование - это упаковка всех необходимых вещей, необходимых для выполнения конкретной задачи / среды, чтобы она была самодостаточной и могла работать на любой платформе, что устраняет большую боль при настройке и установке.
источник