DevOps та хмари
Що таке контейнер?
Контейнер — це ізольоване середовище, у якому застосунок працює разом з усіма своїми залежностями, але використовує ядро операційної системи сервера. Програма всередині контейнера бачить лише власні файли та процеси.
Контейнери роблять роботу застосунку передбачуваною: усі бібліотеки зафіксовані в образі, тому програма поводиться однаково на будь-якому сервері. При цьому один сервер може запускати десятки контейнерів, які не заважають один одному.
Важлива особливість — контейнер тимчасовий. Його можуть будь-коли зупинити і запустити знову, тому дані зберігають не в ньому, а в зовнішніх томах і базах даних.
Де застосовується
Контейнер став стандартним способом постачання застосунків. У контейнерах розгортають вебсервіси та API, запускають збірку коду, піднімають бази даних для тестів, пакують аналітичні інструменти. Майже всі хмарні платформи — від простого хостингу до Kubernetes — приймають застосунок саме у вигляді контейнера.
Для команди головна користь — передбачуваність. Середовище описане в образі, який зберігається в репозиторії поруч із кодом. Тому оновлення версії мови чи бібліотеки стає звичайною зміною, яку видно в історії і можна скасувати.
Приклад
Застосунку потрібна стара версія бібліотеки, а на сервері встановлена нова, від якої залежить інший сервіс. У контейнерах такого конфлікту немає: кожен має власне середовище і не заважає сусідам.
docker run -d \
--name pg \
-e POSTGRES_PASSWORD=secret \
-p 5432:5432 \
postgres:16
docker ps
docker logs -f pg
Контейнер і віртуальна машина: різниця
Віртуальна машина імітує цілий комп’ютер із власною операційною системою, тому її образ займає гігабайти, а запуск триває хвилини. Контейнер використовує ядро сервера і містить лише застосунок із залежностями: десятки мегабайтів і запуск за секунди. Віртуальна машина краще ізольована, контейнер легший і швидший.
Часті запитання
Чим контейнер відрізняється від віртуальної машини?
Віртуальна машина містить повну операційну систему, займає гігабайти і запускається хвилинами. Контейнер використовує ядро сервера і має лише застосунок із залежностями: десятки мегабайтів і запуск за секунди. Натомість ізоляція в нього слабша.
Чи зберігаються дані в контейнері після перезапуску?
За замовчуванням ні: файлова система контейнера тимчасова і зникає разом із ним. Для бази даних чи завантажених файлів підключають окремий том, який існує незалежно від контейнера. Новачки часто про це забувають.
Скільки контейнерів можна запустити на одному сервері?
Обмежує не кількість, а ресурси: пам’ять, процесор, диск. На звичайному сервері легко працюють десятки контейнерів, бо кожен забирає мінімум зайвих ресурсів. Саме тому контейнери вигідніші за віртуальні машини.
Чи безпечні контейнери?
Ізоляція є, але слабша, ніж у віртуальних машин, бо ядро спільне. Тому базові образи регулярно оновлюють, процеси в контейнері не запускають від адміністратора, а образи перевіряють на відомі вразливості. Для чутливих задач іноді обирають віртуальні машини.
Навчання DevOps в OWU
Опануйте професію DevOps-інженера на практичних курсах із менторами та реальними проєктами.
Обрати курс