Oracle представила три відкритих проекти для роботи з ізольованими контейнерами

3 хв. читання

Oracle відкрила код трьох нових проектів, пов'язаних з ізольованими контейнерами: Smith, Crashcart і Railcar. Примітно, що перший додаток написано на мові Go, а два інших – на Rust.

Smith дозволяє збирати контейнери в форматі OCI (Open Container Image) і націлений на супровід процесу збирання компактних оточень, що включають тільки компоненти, необхідні для роботи додатка, що запускається в контейнері. Робота над Smith почалася два роки тому як спроба вирішення проблем зі стабільністю та безпекою процесів збирання контейнерів, з якими інженери Oracle зіткнулися при побудові хмарних сервісів за допомогою Docker.

Серед проблем, які спробували вирішити розробники Smith виділяються (проблеми були актуальні два роки тому при прийнятті рішення про створення Smith і зараз багато з них вже вирішені в Docker):

  • Великий розмір образів через включення зайвих компонентів;
  • Недостатня увага питанням забезпечення безпеки, через що в Docker періодично спливали вразливості, що дозволяють підвищити свої привілеї при отриманні контролю за додатком, що запускається в контейнері;
  • Відсутність контролю за версіями залежностей і засобів для визначення необхідності оновлення вмісту, що призводило до появи вразливостей через застарілі версії компонентів;
  • Відсутність засобів для створення багатошарових контейнерів, що дають можливість обійтися без повної перезбірки образу при запуску нової версії додатка;
  • Відсутність засобів для запуску кожного контейнера в окремому власному просторі назв ідентифікаторів користувача (user namespace);
  • Відсутність підтримки Overlayfs для запуску декількох різних контейнерів з одного образу;
  • Відсутність сховища для поширення образів по вузлах.

В Smith втілена ідея мікроконтейнерів, як способу формування вмісту, що забезпечує мінімальний розмір, більш високу стабільність і безпеку. Мікроконтейнер містить тільки один виконуваний файл і пов'язані з ним залежності (без shell і init-процесу), виконується з кореневої ФС в режимі тільки для читання (запис доступний тільки в окремо монтовані розділи), всі файли в контейнері належать одному користувачеві (не застосовується поділ на групи та користувачів).

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

Інструментарій для збірки доповнюють дві утиліти:

  • Crashcart – дозволяє в міру виникнення необхідності завантажувати в працюючий контейнер додаткові виконувані файли та бібліотеки в процесі налагодження мікроконтейнерів і діагностики проблем, пов'язаних відсутністю в контейнері компонентів, що викликаються в процесі роботи програми. В тому числі за допомогою Crashcart можна запустити в контейнері / bin / bash для виконання команди «docker exec»;

  • Railcar – реалізація runtime-компонентів для запуску контейнерів, визначених у специфікації oci-runtime, написана на мові Rust і позиціонується як альтернатива containerd / runc. Rust обрано тому, що він надає можливості низькорівневого доступу в поєднанні із засобами безпечної роботи з пам'яттю, що дозволяють уникнути багатьох вразливостей. У пропонованому в Docker за замовчуванням runtime runc, написаному на мові Go, для настройки просторів імен доводиться застосовувати обв'язку на мові C (у Go заважає збирач сміття і відсутність засобів низькорівневого управління потоками), яка запускається до старту основного runtime мовою Go і не використовує засоби безпечного програмування. З плюсів Railcar в порівнянні з runc також відзначається дуже швидкий запуск контейнера (контейнер запускається за 10ms, при тому, що runc тільки 150ms витрачає на очікування блокувань).

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.6K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація