Що таке контейнер?


23

Є кілька питань щодо контейнерів , таких як:

Мої запитання :

  • Що насправді є "контейнером" (в контексті DevOps)?
  • Для чого вони використовуються?

Відповіді:


18

Перше, що потрібно знати про контейнер:

Це, в першу чергу, процес.

Як тільки це буде зрозуміло, можна почати розуміти, як контейнери порівнюють і контрастують з віртуальними машинами. І контейнери, і автомашини поділяють ізоляцію від своїх господарів. Метод ізоляції - критична різниця.

Процеси контейнерів використовують розширення для хоста ядра ОС, на якому вони запущені, щоб ізолювати себе від інших процесів. Інші розширення також забезпечують ізоляцію диска та ресурсів. Контейнери діляться своїм ядром та пам'яттю з хост-операційною системою.

Віртуальні машини використовують гіпервізор, щоб ізолювати VM від своїх хостів. Це шар програмного забезпечення, який пересилає запити на ресурси від "гостей" (VM) до обладнання. Ізоляція диска забезпечується віртуалізацією диска. Віртуальні машини не ділять ядро ​​з хостом - вони завантажують власні ядра в простір пам'яті, призначений для VM.

Одним з важливих наслідків цієї різниці є те, що контейнер повинен бути сумісний з ядром з його хостом. Наприклад, неможливо запустити контейнер на основі сервера Windows Nano на хості Linux або контейнер Ubuntu безпосередньо на хості Windows. Віртуальні машини, навпаки, можуть запускати будь-яке ядро ​​незалежно від хост-операційної системи. Під час запуску контейнера Linux на хості Windows, Docker запускає контейнер у Linux VM.

Оперативні відмінності полягають у спритності: контейнери запускаються та зупиняються приблизно так само швидко, як звичайний процес. Відеомагнітофони "важчі", вимагаючи виділення для них виділених ресурсів і потрібно більше часу, щоб запускати і вимикати.

Контейнери пропонують велику гнучкість для операційної моделі DevOps:

  • Контейнери виділяють залежності програмних компонентів. Розробники можуть використовувати контейнери, щоб гарантувати, що прикладний модуль буде функціонувати так само, як на машинах їх розробки, як у QA / UA / Production
  • Контейнери використовують встановлені програмним забезпеченням мережі для спілкування
  • Визначення контейнерів є декларативними і можуть контролюватися джерелами
  • Системи управління контейнерами (Kubernetes, DC / OS, Swarm) можуть управляти апаратними ресурсами (обчислювати / ОЗУ / сховище) пулами та динамічно масштабувати контейнери

1
Я також роблю твій останній пункт від кулі на vSphere, завдяки
бродячому

8

Слово контейнер відноситься до легкої технології віртуалізації, доступної на сучасних ядрах Linux, ця технологія дуже схожа на в'язниці FreeBSD.

Старіше ядро ​​Linux, яке не вміщує контейнери, здатне одночасно запускати процеси. Деякі атрибути системи є приватними для обробки, як-от середовище процесу або пам'ять процесу: лише процес, що володіє цими атрибутами, і сама операційна система можуть отримати доступ до цих даних. (Є багато лазівки, як деякі реалізації ps , але це, по суті, правда!) Деякі інші атрибути поділяються між процесами, наприклад, наприклад, файлова система та мережеві інтерфейси.

Сучасне ядро ​​Linux, здатне працювати з контейнерами, здатне обробляти більше атрибутів системи як приватних даних, пов'язаних з процесом або групою процесів. Отриманий контекст є контейнером, і замість запуску програми у "початкових контейнерах" за допомогою файлової системи та мережевих інтерфейсів, ініціалізованих операційною системою, можна запускати процеси в інших контейнерах, щоб вони бачили іншу файлову систему та різний перелік мережевих інтерфейсів. Тому два процеси, що працюють у різних контейнерах, дійсно ділять ядро. Ви, можливо, вам знайомі з командою chroot, яка може запустити процес у різній ієрархії файлів, контейнери пройдуть ідею на кілька кроків далі.

Звичайно, це лише дуже грубе пояснення, але я сподіваюся, що це допоможе з’ясувати уявлення про те, що таке контейнери. Тепер, для чого вони гарні?

Популярний інтерфейс до можливостей контейнерів ядер Linux реалізований докер - утилітою командного рядка, яка може використовуватися для створення артефактів, що представляють файлові системи ( зображення докера ), та запускає процеси в контейнерах, де ці файлові системи доступні. Цей програмний набір також може створити спеціальні віртуальні мережі для того, щоб кілька контейнерів могли спілкуватися в приватній мережі.

Технології на основі контейнерів зручні для:

  • Опишіть масштабовані складні розгортання.
  • Забезпечити розробників додатків середовищем, дуже схожим на виробниче середовище.
  • Реалізуйте незмінний шаблон сервера, оскільки артефакти програмного забезпечення зазвичай описують повну операційну систему, а не лише пакет програм.

(Як вам здається, знайомі з іншими технологіями віртуалізації, такими як Virtual Box, ви можете зауважити, що ці технології також можуть зручно вирішувати три вищезазначені пункти. На сьогоднішній день існує досить малий спектр технологій віртуалізації, і ми можемо порівняти питання про їх популярність у певний контекст з популярністю комп'ютерних мов: це, мабуть, залежить від технічних достоїнств кожного окремого рішення, а також від багатьох факторів, які я просто позначу «випадковістю».)


1
Не обмежуючись Linux, Windows 16 має таку ж здатність
Tensibai

1
Посилання для підтримки моєї претензії docs.microsoft.com/en-us/virtualization/windowscontainers/…
Тенсібай

7

Зазвичай контейнери посилаються на щось подібне докер-контейнерам, які популяризували назву

Я цитую там із визначення докера:

Використовуючи контейнери, все, що потрібно для виконання програмного забезпечення, пакується в окремі контейнери. На відміну від VM, контейнери не вбудовують повну операційну систему - потрібні лише бібліотеки та налаштування, необхідні для роботи програмного забезпечення.

Корінне іменування - це контейнери Linux (lxc), метою яких було ізолювати процес від своєї хост-системи, першою метою було уникнути компромісу процесу для переймання хост-системи.

Зараз вони використовуються в більш широкому обсязі. У сучасному визначенні "контейнер" ви більш-менш випустите пакет для виконання, який вже включає вашу програму, він є базовим середнім програмним забезпеченням, якщо це необхідно, та всіма необхідними бібліотеками, і будьте впевнені, що він буде працювати в будь-якій сумісній системі.

Друга перевага полягає в тому, що вона дозволяє використовувати кілька додатків з однаковою залежністю в різній версії без необхідності сильно налаштовувати її змінні середовища, щоб завантажувати правильну.

Навряд чи для такої системи VM, як віртуальна машина віртуальної коробки або екземпляр EC2 на AWS, контейнери є віртуальними лише на рівні файлової системи та ізольовані лише на стеці пам'яті. Вони все ще діляться тим самим хостом, і операційна система, що знаходиться під ними, буде арбітражувати процесори.

Віртуальна машина є віртуальною на апаратному рівні, і ви запускаєте операційну систему всередині, контейнер є віртуальним на рівні ОС, і ви запускаєте процес всередині.


1
Так, щось на кшталт VirtualBox-зображення (або все, що називається у VirtualBox) також може бути кваліфіковано як "контейнер", чи я цього не розумію?
Pierre.Vriens

Бачив, що я забув частину питання, додав різницю, продовжуючи відповідь.
Тенсібай

3

З визначення AWS :

Контейнери - це метод віртуалізації операційної системи, що дозволяє запускати додаток та його залежність у процесах, виділених ресурсами. Контейнери дозволяють легко упакувати код програми, конфігурації та залежності в прості у використанні будівельні блоки, які забезпечують узгодженість із середовищем, операційну ефективність, продуктивність розробника та контроль версій. Контейнери можуть допомогти забезпечити швидке, надійне та послідовне розгортання програм незалежно від середовища розгортання. Контейнери також надають вам більш детальний контроль над ресурсами, що покращує ефективність вашої інфраструктури.

Контейнери - це упаковка всіх необхідних предметів, необхідних для виконання певної задачі / середовища, щоб вона була самодостатньою і її можна було запустити на будь-якій платформі, яка забирає багато болю, коли справа стосується налаштування та встановлення матеріалів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.