Основи сучасної контейнеризації

Технології контейнеризації дуже сильно відрізняються від технології віртуалізації.

Автор: Черкашин Михайло, провідний інженер відділу засобів захисту інформації групи компаній InnoSTage

Тема віртуалізації системи дуже велика і в одній статті все не висвітлити. Весь матеріал ми розділили на цикл статей і дана стаття буде першою з цього циклу:

  • Основи сучасної контейнеризації
  • Автоматизація роботи з контейнерами
  • Безпека контейнерів

ІСТОРИЧНИЙ ЕКСКУРС

Ідея ізоляції користувача простору на рівні операційної системи сформувалася ще в 80х роках. Почалося все з системного виклику chroot, що з’явився в ядрі UNIX v7 в 1979 році поряд з іншими новими системними викликами. Він дозволяв запущеної з зміненим кореневим каталогом, мати доступ тільки до файлів цієї категорії. З самого початку, цей системний виклик створювався для реалізації функції безпеки, пов’язаної із захистом файлової системи і процесів від пошкодження чи компрометації.

Як розвиток цієї технології в 2000 році в операційній системі FreeBSD 4.0 з’явився механізм ізолювання оточення, що дозволяє створювати кілька копій FreeBSD, званих jails, незалежно працюючих на одному ядрі і розділених між собою за допомогою системного виклику jail і роздільного користувальницького оточення. Все це було зроблено, щоб обмежити права користувача всередині віртуального оточення.

У 1982 році Білл Джой, майбутній співзасновник компанії Sun Microsystems додав системний виклик chroot в BSD. Як результат – у 2005 році компанія Sun Microsystems реалізувала технологію віртуалізації на рівні операційної системи і назвала її Solaris Zones.

У 2005 році в ядрі Linux з’явилася технологія OpenVZ, яка дозволяла запускати на одному фізичному сервері велика кількість віртуальних приватних серверів (VPS). Це вже був крок у бік апаратної віртуалізації, де застосовувалися інші техніки, такі як технологія паравиртуализации. Але це вже інша історія».

Для того, щоб до кінця з’ясувати різницю між віртуалізацією на рівні операційної системи від апаратної віртуалізації, варто сказати, що апаратна віртуалізація, емулюючи апаратне оточення, може запускати окремі гостьові системи, а віртуалізація на рівні операційної системи дозволяє запускати екземпляр операційної системи тільки з тим же ядром, що і на основній операційній системі (Рис. 1).

Рис. 1

Однак, у зв’язку з отсутствуя повноцінної операційної системи і власного ядра, необхідних для запуску повноцінної операційної системи, відсутні і накладні витрати на контейнер. Так що це – два різних способу «виртуализоваться» – зі своїми достоїнствами і недоліками. Досить історії – перейдемо до технологій, які безпосередньо пов’язані з сучасною контейнеризацией.

CGROUPS І NAMESPACES І ПРИЧОМУ ТУТ КОНТЕЙНЕРИ

У 2006 році Пол Менэдж і Рохіт Сет почали розробку власних механізмів ізоляції ядра і обмеження на деякі обчислювальні ресурси. Спочатку розробка називалася «контейнери процесів», яка дозволяла утворювати групи процесів із заданими ресурсними лімітами. Починаючи з версії ядра Linux 2.6.24, вона під новою назвою cgroups була включена в офіційну версію. У цьому ж році з’являється нова функція ядра Linux, звана Linux Containers або LXC, в основі якої лежить функція ядра namespaces, що дозволяє ізолювати і віртуалізувати глобальні системні ресурси груп процесів. Власне, namespaces – це ні що інше, як еволюція chroot, яка дозволила здійснити задумане, а саме забезпечити повну ізоляцію середовища.

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

DOCKER І OCI

Проект Docker став логічним продовженням історії розвитку ізольованих середовищ і включив в себе більшість напрацювань у цьому напрямку. Docker відірвався від всіх інших розробок за рахунок автоматизації управління контейнерами і зібрав навколо себе велике співтовариство, так як з його допомогою час розгортання віртуальних вузлів скорочувалася в десятки разів. Але дуже скоро стало зрозуміло, що Docker не ідеальний і занадто мало стандартів в області віртуалізації рівня операційної системи. Docker на момент релізу в 2013 році використав напрацювання минулих років, представляючи користувачеві зручний інтерфейс взаємодії з даним рівнем абстракції. З часом спільнота, що зародилося навколо технологій контейнеризації оголосило про створення проекту Open Container Initiative (OCI), метою якого стала розробка єдиного стандарту в області контейнерних технологій. У 2015 році з-під його крила вирвався інструмент для запуску контейнерів runC (даний runtime-движок почав так само підтримуватися Docker’ом з версії 1.11 в 2017 році). (Рис. 2) Досить теорії, давайте перейдемо до практики.

Рис. 2

ПЕРШИЙ ЗАПУСК

Для початку, визначимось яке ядро нам необхідно для запуску контейнерів, оскільки від цього буде залежати платформа для розгортання середовища Docker. На вибір у нас є: Windows, Linux і Mac. Тут варто обмовитися, що контейнери, розроблені для середовища Windows на Linux не зароблять (наприклад Windows IIS сервер під Ubuntu), зважаючи початкової різниці цих операційних систем, так як ми маємо справу з віртуалізацією рівня операційної системи. Тут ми розглянемо випадок, коли ядром для запуску контейнерів ядро Linux.

Перше, з чим нам доведеться зіткнутися – це установка дистрибутива і створення облікового запису на сайті docker.com. Для встановлення останньої версії Docker’а в ОС Ubuntu набираємо наступні команди:

# перевіряємо наявність оновлень

$ sudo apt-get update

# встановлюємо Docker CE (Community Edition)

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Для перевірки працездатності вводимо наступну команду:

$ sudo docker run hello-world

Docker підтягне тестовий образ контейнера hello-world і запустить його! (Рис. 3)

Рис. 3

Далі – вивчимо інструмент під назвою Docker Hub. Це такий App Store в світі контейнерів. Для доступу до хабу нам необхідно створити обліковий запис на сайті https://hub.docker.com/, де ми зможемо розміщувати свої образи і ділитися ними з усім світом, а також завантажувати ким-то вже створені контейнери, не витрачаючи час на їх складання. Тут варто розповісти про одну особливості роботи з «чужими» контейнерами. Контейнер може зібрати і опублікувати в Docker Hub будь-хто, не всім видавцям варто довіряти, так як в контейнерах можуть міститися як застарілі, так і уразливі версії пакетів і додатків. Docker перевіряє найбільш популярні образи і маркує їх тегом Docker Certified (Рис. 4).

Рис. 4

Є ще один різновид перевірених контейнерів – офіційні образи. Ці образи являють собою зразково-показові контейнери, зібрані за всіма правилами та кращим практикам Docker-платформи. (Рис.5)

Рис. 5

ПОЧАТОК РОБОТИ

Ми поставили Docker і створили обліковий запис, розібралися як підходити до вибору контейнерів. Тепер настав час спробувати запустити що-небудь корисне і поекспериментувати з його роботою. Для початку виберемо об’єкт наших випробувань – їм будемо CentOS, яку ми запустимо в оточенні Ubuntu. Для того, щоб запустити яку-небудь команду на CentOS у віртуальному оточенні нам потрібно всього одна команда:

$ sudo docker run –t centos:latest /usr/bin/ top

Якщо Docker не знайде у нас вже локально завантажений контейнер – він вивантажить його з Docker Hub’а і відразу ж запустить контейнер, виконавши команду top.

Як ми бачимо (Рис. 6) – запущений нами процес – єдиний і нічого крім нього контейнер не бачить. Ми запустили свій повністю робочий контейнер.

Рис. 6

ПІДСУМКИ

Технології контейнеризації дуже сильно відрізняються від технології віртуалізації. У цієї технології дуже багато плюсів і багатообіцяюче майбутнє. Цей факт підтверджують своїми діями великі виробники програмного забезпечення віртуалізації рівня ОС, додають можливість управління корпоративними контейнерами в свої продукти (https:// www.vmware.com/ru/products/vsphere/integrated-containers.html). У наступних статтях ми розглянемо варіанти створення власних контейнерів, можливості оркестрации і автоматизації управління, а також питання безпеки – куди ж без них. Як говориться, stay tuned!

Джерело

Поділитися
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Реклама

137

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Схожі записи

Почніть набирати текст зверху та натисніть "Enter" для пошуку. Натисніть ESC для відміни.

Повернутись вверх