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