1. Що таке Docker?
Docker — це платформа для розробки, доставки й запуску застосунків у контейнерах. Контейнер містить застосунок і його залежності, тому працює однаково на різних середовищах.
Docker допомагає уникати проблеми "працює в мене локально, але не працює на сервері", бо середовище стандартизоване.
Коротко:
- Docker запускає застосунки в контейнерах.
- Контейнери ізолюють процеси та залежності.
- Дає однакову поведінку локально, на CI і в production.
2. Які основні переваги використання Docker?
Основні переваги:
- Портативність: один і той самий образ запускається всюди.
- Швидкий старт: контейнер запускається за секунди.
- Ізоляція: залежності одного сервісу не конфліктують з іншими.
- Простий деплой: замість "налаштовувати сервер" — "запустити образ".
- Ефективність ресурсів: контейнери легші за повноцінні ВМ.
Коротко:
- Швидше розробка і релізи.
- Менше конфліктів середовища.
- Краща утилізація інфраструктури.
3. Які проблеми вирішує Docker?
Docker вирішує типові інженерні проблеми:
- різниця між локальним, тестовим і production середовищем;
- складний онбординг нового розробника;
- ручне керування залежностями та версіями;
- нестабільні деплоя через дріфт конфігурацій;
- важке масштабування сервісів.
Коротко:
- Усуває environment drift.
- Стандартизує запуск застосунку.
- Спрощує CI/CD і масштабування.
4. Що таке контейнер у Docker?
Контейнер — це запущений екземпляр Docker-образу. Він має власний файловий шар для запису, ізольований простір процесів, мережу та налаштування.
Контейнер еферемерний: його можна швидко створити, зупинити, видалити і перезапустити.
Коротко:
- Контейнер = runtime-стан образу.
- Ізольований процес з власним оточенням.
- Швидко створюється й видаляється.
5. Чим контейнер відрізняється від віртуальної машини?
Ключова відмінність — рівень віртуалізації:
- VM віртуалізує апаратний рівень і має власну гостьову ОС.
- Контейнер віртуалізує рівень ОС і ділить kernel хоста.
Через це контейнери зазвичай:
- легші;
- швидше стартують;
- споживають менше ресурсів.
Коротко:
- VM важчі, але дають сильнішу ізоляцію ОС.
- Контейнери легші й швидші.
- Для мікросервісів частіше обирають контейнери.
6. Що таке Docker Image?
Docker Image — це незмінний шаблон (read-only), з якого створюються контейнери. Образ містить файлову систему, застосунок, залежності та метадані запуску.
Образи збирають через Dockerfile і зберігають у registry.
Коротко:
- Image — шаблон для створення контейнерів.
- Містить код, залежності та інструкції запуску.
- Сам по собі не виконується, доки не створено контейнер.
7. Чим відрізняються Image і Container?
- Image — статичний, незмінний артефакт.
- Container — запущений процес на основі image.
Один image може породжувати багато контейнерів із різним runtime-станом.
Коротко:
- Image = "шаблон".
- Container = "живий екземпляр".
- Багато контейнерів можуть використовувати один image.
8. Що таке Docker Engine?
Docker Engine — це базовий runtime Docker, який забезпечує збірку образів, запуск контейнерів, керування мережами, томами та API взаємодію.
Це основний компонент, який встановлюється на сервер або локальну машину.
Коротко:
- Docker Engine — ядро платформи Docker.
- Керує життєвим циклом контейнерів.
- Надає API і CLI-інтеграцію.
9. З яких компонентів складається Docker Engine?
Docker Engine складається з:
- Docker Daemon (
dockerd) — серверна частина. - Docker API — інтерфейс взаємодії з daemon.
- Docker CLI (
docker) — клієнт для командного керування.
Коротко:
dockerdвиконує операції.- API передає команди.
- CLI — зручна оболонка для користувача.
10. Що таке Docker Daemon?
Docker Daemon (dockerd) — це фоновий сервіс, який приймає Docker-команди
через API і виконує їх: збірка образів, запуск/зупинка контейнерів,
керування мережами та томами.
Коротко:
dockerd— головний процес Docker на хості.- Саме він реально створює та запускає контейнери.
- CLI звертається до нього через API.
11. Що таке Docker Client?
Docker Client — це CLI-інструмент docker, яким користувач вводить команди
на кшталт docker run, docker ps, docker build.
Client не запускає контейнери напряму — він надсилає запити daemon-у.
Коротко:
- Docker Client = команда
dockerу терміналі. - Приймає команди користувача.
- Передає їх до Docker Daemon.
12. Як Docker Client взаємодіє з Docker Daemon?
Docker Client взаємодіє з daemon через Docker API:
- локально через Unix socket (типово
/var/run/docker.sock); - або віддалено через TCP (за належного захисту).
Коли ви виконуєте docker ps, CLI відправляє API-запит до daemon і повертає
результат у консоль.
Коротко:
- CLI -> API -> Daemon.
- Локально зазвичай використовується Unix socket.
- Daemon виконує дію й повертає відповідь.
13. Що таке Docker Host?
Docker Host — це машина (фізична або віртуальна), на якій встановлено Docker Engine і де запускаються контейнери.
Host надає ресурси: CPU, RAM, disk, network.
Коротко:
- Docker Host — середовище виконання контейнерів.
- Може бути локальним ноутбуком або production-сервером.
- Контейнери ділять ресурси хоста.
14. Що таке Docker Registry?
Docker Registry — це сховище Docker-образів. У registry зберігаються
репозиторії та теги образів, які можна push/pull.
Registry буває публічним або приватним (Docker Hub, GHCR, ECR, GCR, Harbor).
Коротко:
- Registry зберігає і роздає образи.
- Підтримує версії через теги.
- Критичний компонент CI/CD.
15. Що таке Docker Hub?
Docker Hub — це публічний хмарний registry від Docker. Він містить:
- офіційні образи (
nginx,redis,postgresтощо); - образи від спільноти та команд;
- приватні репозиторії (на відповідних планах).
Коротко:
- Docker Hub — найпоширеніший registry за замовчуванням.
- Дозволяє швидко ділитися та отримувати образи.
- Часто використовується як source у CI/CD.
16. Як завантажити образ із Docker Hub?
Використовуйте команду docker pull:
docker pull nginx:latestЯкщо тег не вказати, за замовчуванням використовується latest.
docker pull redisКоротко:
- Основна команда:
docker pull <image>:<tag>. - Без тега зазвичай береться
latest. - Після pull образ з'являється локально в кеші Docker.
17. Як запустити контейнер із образу?
Базовий запуск виконується через docker run:
docker run -d --name web -p 8080:80 nginx:latestТут:
-d— фоновий режим;--name web— ім'я контейнера;-p 8080:80— проброс порту хост:контейнер.
Коротко:
docker runстворює і запускає контейнер.- Параметри керують мережею, іменем, томами, env.
- Один із найважливіших базових Docker-команд.
18. Як переглянути список запущених контейнерів?
Для перегляду лише активних контейнерів використовуйте:
docker psКоманда покаже ID, image, статус, порти, назву контейнера.
Коротко:
docker psпоказує тільки running-контейнери.- Зручно для швидкої перевірки стану сервісів.
- Базова команда для operational рутини.
19. Як переглянути всі контейнери (включно із зупиненими)?
Використайте прапорець -a:
docker ps -aЦе покаже і запущені, і зупинені контейнери, включно з кодами завершення.
Коротко:
docker ps -aпоказує повний список контейнерів.- Допомагає діагностувати crash/exit після запуску.
- Часто використовується разом із
docker logs.
20. Як зупинити контейнер?
Для коректної зупинки використовуйте docker stop:
docker stop webDocker надсилає SIGTERM і чекає grace period, після чого може завершити процес примусово.
Коротко:
docker stop <name|id>— м'яка зупинка.- Дає процесу час на graceful shutdown.
- Переважний спосіб завершення контейнера.
21. Як запустити зупинений контейнер?
Щоб знову запустити раніше створений контейнер, використовуйте:
docker start webЦе саме перезапуск існуючого контейнера, а не створення нового.
Коротко:
docker startпіднімає existing container.- Конфігурація контейнера зберігається.
- Не плутати з
docker run(створює новий).
22. Як примусово завершити контейнер?
Для негайного завершення використовується docker kill:
docker kill webЗа замовчуванням надсилається SIGKILL, без graceful shutdown.
Коротко:
docker killзупиняє контейнер миттєво.- Використовуйте, коли
stopне спрацьовує. - Може призвести до некоректного завершення процесів.
23. Як видалити контейнер?
Видалення контейнера:
docker rm webЯкщо контейнер запущений, спочатку зупиніть його, або видаляйте примусово:
docker rm -f webКоротко:
docker rmвидаляє контейнер.- Для running-контейнера потрібен
-fабо попереднійstop. - Видалення не зачіпає image.
24. Як видалити Docker Image?
Видалення образу виконується через docker rmi:
docker rmi nginx:latestЯкщо образ використовується контейнерами, спершу треба видалити/зупинити ці контейнери.
Коротко:
docker rmiвидаляє локальний образ.- Потрібно звільнити залежні контейнери.
- Корисно для очищення диска.
25. Як переглянути список образів?
Список локальних образів:
docker imagesАльтернатива:
docker image lsКоманди показують repository, tag, image ID, розмір і дату створення.
Коротко:
docker images/docker image lsпоказують локальні image.- Допомагає контролювати кеш і зайнятий простір.
- Базова команда для повсякденної роботи з Docker.
26. Що таке Dockerfile?
Dockerfile — це текстовий файл з інструкціями для збірки Docker-образу. Він описує базовий образ, кроки встановлення залежностей, копіювання коду, конфігурацію середовища і команду запуску.
Dockerfile робить збірку повторюваною та версійованою.
Коротко:
- Dockerfile = рецепт збірки image.
- Дає відтворюваний build у локальному та CI середовищі.
- Є основою стандартизованого деплою.
27. Як створити Docker Image за допомогою Dockerfile?
Створення образу виконується командою docker build у директорії, де лежить
Dockerfile.
docker build -t my-app:1.0.0 .Тут:
-tзадаєrepository:tag;.— build context (вміст каталогу, доступний під час збірки).
Коротко:
- Основна команда:
docker build -t <name>:<tag> <context>. - Docker читає інструкції з Dockerfile послідовно.
- Результат — локальний image, готовий до запуску або push.
28. Що таке інструкція FROM?
FROM задає базовий образ, з якого починається збірка.
FROM node:20-alpineУ multi-stage build може бути кілька FROM, кожен відкриває окремий stage.
Коротко:
FROMвизначає базу для image.- Без
FROMDockerfile зазвичай невалідний. - Кілька
FROMвикористовують для multi-stage збірки.
29. Що робить інструкція RUN?
RUN виконує команду під час збірки образу і створює новий layer.
RUN apk add --no-cache curlТипові use-case: встановлення пакетів, збірка артефактів, підготовка файлової системи.
Коротко:
RUNпрацює на етапі build, не runtime.- Кожен
RUNдодає новий layer. - Використовується для підготовки image.
30. Чим відрізняються RUN, CMD і ENTRYPOINT?
Ці інструкції працюють на різних етапах:
RUN— команда під час build (формує image).CMD— команда за замовчуванням під час run (можна перевизначити).ENTRYPOINT— фіксована точка входу контейнера (аргументи часто додаються черезCMDабо CLI).
Коротко:
RUN= build-time.CMD/ENTRYPOINT= runtime.ENTRYPOINTзадає executable,CMD— дефолтні аргументи/команду.
31. Чим відрізняються CMD і ENTRYPOINT?
CMD задає дефолтну команду, яку легко замінити при docker run.
ENTRYPOINT задає основний процес контейнера, який зазвичай не замінюється,
а доповнюється аргументами.
Поширений шаблон:
ENTRYPOINT— стабільний binary/script;CMD— дефолтні параметри запуску.
Коротко:
CMDлегко override-иться.ENTRYPOINTфіксує головний процес контейнера.- Разом дають передбачуваний і гнучкий запуск.
32. Чим відрізняються COPY і ADD?
COPY просто копіює файли/теки з build context у image.
ADD робить більше: може розпаковувати локальні tar-архіви і працювати з URL
(хоча URL-скачування краще робити явно через RUN curl/wget).
У більшості випадків рекомендують COPY як більш передбачуваний варіант.
Коротко:
COPY— базове та рекомендоване копіювання.ADDмає додаткову "магію" (tar/URL).- Якщо не потрібні спецможливості, обирайте
COPY.
33. Що таке `.dockerignore` і навіщо він потрібен?
.dockerignore — файл, який виключає файли/каталоги з build context.
Приклад:
.git
node_modules
*.log
.envЦе пришвидшує збірку, зменшує розмір контексту і знижує ризик випадково потрапити в image секретам або зайвим артефактам.
Коротко:
.dockerignoreфільтрує файли, що відправляються в build context.- Покращує швидкість build і безпеку.
- Особливо важливий для великих репозиторіїв.
34. Що таке багатошарова архітектура Docker Image?
Docker Image складається з шарів (layers), де кожна інструкція Dockerfile
(наприклад RUN, COPY) додає новий шар.
Шари кешуються і перевикористовуються між збірками та контейнерами, що робить build швидшим і економить місце.
Коротко:
- Image складається з послідовності layers.
- Layers immutable і кешуються.
- Правильний порядок інструкцій суттєво впливає на швидкість build.
35. Що таке layer у Docker?
Layer — це незмінний файловий шар образу, створений окремою інструкцією збірки. Під час запуску контейнера Docker додає зверху writable layer для runtime-змін.
Це дозволяє ефективно ділити спільні базові шари між багатьма образами.
Коротко:
- Layer — immutable частина image.
- Контейнер має додатковий writable layer.
- Шари перевикористовуються і економлять disk space.
36. Що таке multi-stage build?
Multi-stage build — підхід, коли в одному Dockerfile є кілька стадій збірки: окрема для компіляції, окрема для фінального runtime-образу.
Приклад ідеї: зібрати бінарник у "builder" stage і скопіювати лише артефакт у мінімальний runtime-образ.
Коротко:
- Дає менші й безпечніші фінальні image.
- Виносить build-залежності за межі production image.
- Стандартний підхід для modern Docker builds.
37. Як зменшити розмір Docker Image?
Практичні кроки:
- Обирати легкі базові образи (
-alpine, slim-варіанти). - Використовувати multi-stage build.
- Копіювати тільки потрібні файли (
COPY+.dockerignore). - Об'єднувати команди встановлення й чистити кеш пакетного менеджера.
- Не класти в image тести, сорси збірки, тимчасові файли.
Коротко:
- Найбільший ефект дають base image + multi-stage.
- Контролюйте build context через
.dockerignore. - Менший image = швидший pull, краща безпека, дешевший storage.
38. Що таке dangling images і як їх видалити?
Dangling images — це "висячі" образи без тега (<none>:<none>), які
зазвичай лишаються після перебудов або ретегування.
Перегляд:
docker images -f dangling=trueВидалення:
docker image prune -fКоротко:
- Dangling image не має нормального тега.
- Може непомітно займати багато диска.
- Очищується командою
docker image prune.
39. Які стани може мати Docker-контейнер?
Типові стани контейнера в Docker:
created— контейнер створений, але не запущений;running— контейнер виконується;paused— процеси призупинені;restarting— йде перезапуск;exited— контейнер зупинений;dead— контейнер у некоректному стані (зазвичай після помилки).
Коротко:
- Контейнер проходить кілька runtime-станів.
- Найчастіші у практиці:
runningіexited. - Стан легко перевірити через
docker ps -a.
40. Опишіть життєвий цикл контейнера.
Типовий життєвий цикл:
- Створення контейнера (
docker createабоdocker run). - Запуск (
docker startабо одразу вrun). - Робота процесу в стані
running. - Зупинка (
docker stop/docker kill) -> станexited. - Повторний запуск (
docker start) або видалення (docker rm).
Опціонально можливі pause/unpause, restart, політики автоперезапуску.
Коротко:
- Create -> Run -> Stop -> Start/Remove.
- Контейнер зазвичай ефемерний елемент інфраструктури.
- Дані для довгого зберігання виносять у volumes.
41. Що робить команда `docker create`?
docker create створює контейнер з image, але не запускає його.
docker create --name app nginx:latestПісля цього контейнер буде у стані created і його можна запустити окремо:
docker start appКоротко:
docker create= підготовка контейнера без старту.- Дозволяє розділити етапи create і start.
- Використовується рідше, ніж
docker run.
42. Що відбувається під час `docker stop`?
docker stop виконує graceful shutdown:
- Docker надсилає головному процесу контейнера сигнал
SIGTERM. - Чекає заданий timeout (типово ~10 секунд).
- Якщо процес не завершився — надсилає
SIGKILL.
docker stop appКоротко:
docker stopспочатку дає шанс завершитися коректно.- Лише після timeout застосовується жорстке завершення.
- Рекомендований спосіб зупинки сервісів.
43. Чим відрізняються `docker stop` і `docker kill`?
Різниця в сигналах і поведінці:
docker stop->SIGTERM+ очікування + за потребиSIGKILL.docker kill-> одразуSIGKILL(або інший сигнал, якщо вказати).
stop безпечніший для більшості застосунків, бо дає шанс зберегти стан і
закрити з'єднання.
Коротко:
stop= м'яко,kill= негайно.- Для production спочатку використовують
stop. killзастосовують, коли контейнер "завис".
44. Що робить команда `docker restart`?
docker restart послідовно зупиняє і знову запускає контейнер.
docker restart appПоведінка схожа на stop + start: спочатку graceful stop, потім новий старт
того ж контейнера.
Коротко:
docker restart= швидкий перезапуск контейнера.- Використовує той самий контейнер, а не створює новий.
- Зручно після зміни зовнішніх залежностей або тимчасових збоїв.
45. Чи може контейнер автоматично перезапускатися?
Так. Для цього задають restart policy під час запуску контейнера.
docker run -d --restart unless-stopped --name app nginx:latestPolicy визначає, коли Docker має автоматично підняти контейнер після падіння, рестарту Docker daemon або перезавантаження хоста.
Коротко:
- Автоперезапуск підтримується вбудовано.
- Налаштовується через
--restart. - Важливий для підвищення доступності сервісу.
46. Які існують restart policy (`no`, `on-failure`, `always`, `unless-stopped`)?
Основні restart policy:
no— не перезапускати автоматично (значення за замовчуванням).on-failure[:max-retries]— перезапускати лише якщо процес завершився з помилкою (non-zero exit code).always— завжди перезапускати контейнер після зупинки/рестарту daemon.unless-stopped— якalways, але якщо контейнер зупинено вручну, Docker не підніматиме його автоматично після рестарту daemon/хоста.
Коротко:
no— без автоперезапуску.on-failure— тільки при падінні.always/unless-stopped— для long-running сервісів.
47. Чи зберігаються дані після зупинки контейнера?
Так. Після docker stop дані у writable layer контейнера залишаються, бо
контейнер лише зупиняється, а не видаляється.
Якщо потім виконати docker start, стан файлової системи контейнера збережеться.
Коротко:
stopне видаляє дані контейнера.- Дані зникають не при зупинці, а при видаленні контейнера.
- Для важливих даних краще використовувати volumes.
48. Коли дані контейнера можуть бути втрачені?
Дані можуть бути втрачені, якщо вони зберігались тільки у writable layer і:
- контейнер видалили (
docker rm); - контейнер перевидали після оновлення image;
- виконали очищення, що зачепило контейнерні шари.
Щоб уникнути втрат, стан потрібно виносити у volume або bind mount.
Коротко:
- Ризик втрати: видалення/пересоздання контейнера.
- Ephemeral storage не підходить для критичних даних.
- Persistency забезпечують volumes або зовнішні сховища.
49. Що таке Docker Volume?
Docker Volume — це кероване Docker сховище для персистентних даних. Volume живе окремо від життєвого циклу контейнера.
Його використовують для БД, логів, кешів та будь-яких даних, що мають переживати перезапуски і перевипуск контейнерів.
Коротко:
- Volume = постійне сховище даних.
- Не зникає при видаленні контейнера (доки не видалений окремо).
- Рекомендований спосіб зберігання стану в Docker.
50. Де зберігаються Docker Volumes на хості?
У Linux типово volumes зберігаються в каталозі:
/var/lib/docker/volumes/Для Docker Desktop (macOS/Windows) фактичне зберігання відбувається всередині Linux VM, яку використовує Docker Desktop.
Коротко:
- Linux default path:
/var/lib/docker/volumes/. - У Desktop шляхи абстраговані через внутрішню VM.
- Краще керувати volume через Docker-команди, а не вручну.
51. Що таке bind mount?
Bind mount підключає конкретний шлях хоста в контейнер.
docker run -v /host/path:/app/data nginx:latestКонтейнер читає/пише напряму в цю директорію хоста.
Коротко:
- Bind mount = прямий мапінг шляху хоста.
- Зручний для dev-сценаріїв (live code, конфіги).
- Сильна залежність від структури файлової системи хоста.
52. Чим Volume відрізняється від bind mount?
Різниця:
Volumeкерується Docker і portable між хостами на рівні Docker abstractions.Bind mountприв'язаний до конкретного шляху ОС хоста.
Volume зазвичай кращий для production-даних, bind mount — для локальної
розробки та явного доступу до файлів хоста.
Коротко:
- Volume: керований Docker, зручний для persistent data.
- Bind mount: прямий шлях хоста, більше гнучкості й більше ризиків.
- Для БД у production частіше обирають volume.
53. Як поділитися даними між контейнерами?
Найпоширеніший варіант — підключити один і той самий volume до кількох контейнерів.
docker volume create shared-data
docker run -d --name c1 -v shared-data:/data nginx
docker run -d --name c2 -v shared-data:/data busyboxТакож можливий bind mount того самого хост-шляху.
Коротко:
- Спільний volume дає обмін файлами між контейнерами.
- Це стандартний патерн для sidecar/backup задач.
- Потрібно враховувати конкуренцію записів і блокування.
54. Як працює мережа в Docker?
Docker створює віртуальні мережі і підключає до них контейнери через network namespaces та драйвери (bridge, host, overlay тощо).
Кожен контейнер отримує мережевий інтерфейс, IP і маршрути в межах своєї мережі.
Проброс портів (-p) відкриває доступ із хоста назовні.
Коротко:
- Контейнери ізольовані по мережі.
- Комунікація керується Docker network driver.
- Публічний доступ робиться через port mapping.
55. Який мережевий драйвер використовується за замовчуванням?
Для standalone-контейнерів за замовчуванням використовується bridge мережа
(bridge network типу docker0 на Linux).
Якщо не вказати --network, контейнер буде підключений до default bridge.
Коротко:
- Default driver для звичайного
docker run—bridge. - Дає базову ізоляцію та внутрішню IP-комунікацію.
- Для керованої взаємодії краще створювати user-defined bridge.
56. Які типи мереж існують у Docker (bridge, host, overlay, macvlan, none)?
Основні типи:
bridge— стандартна мережа для контейнерів на одному хості.host— контейнер використовує мережевий стек хоста.overlay— мережа між кількома хостами (Swarm).macvlan— контейнер отримує MAC/IP у фізичній мережі.none— мережа відключена.
Коротко:
- Кожен драйвер вирішує різні network-задачі.
bridgeнайпоширеніший для локальних/одиночних хостів.overlayпотрібен для multi-host сценаріїв.
57. Що таке bridge-мережа?
Bridge — віртуальна L2-мережа на одному Docker host, де контейнери можуть
спілкуватися між собою.
User-defined bridge надає вбудований DNS по іменах контейнерів і кращу керованість.
Коротко:
- Bridge об'єднує контейнери в межах одного хоста.
- Дозволяє внутрішню комунікацію без зовнішнього доступу.
- User-defined bridge кращий за default bridge.
58. Що таке host-мережа?
У режимі host контейнер не отримує окремий мережевий namespace, а використовує
мережу хоста напряму.
Через це немає NAT і port mapping, але ізоляція мережі зменшується.
Коротко:
--network hostдає нативний мережевий стек хоста.- Може зменшити network overhead.
- Компроміс: нижча ізоляція і вищі ризики конфлікту портів.
59. Що таке overlay-мережа?
Overlay — віртуальна мережа для контейнерів на різних хостах, зазвичай у
Docker Swarm.
Вона інкапсулює трафік і дає сервісам прозоро спілкуватися між вузлами, ніби вони в одній мережі.
Коротко:
- Overlay = multi-host мережа.
- Ключовий інструмент для кластерних Docker-сценаріїв.
- Найчастіше використовується разом зі Swarm.
60. Як створити власну Docker-мережу?
Створення user-defined bridge мережі:
docker network create app-netЗапуск контейнера в ній:
docker run -d --name api --network app-net nginxКоротко:
- Використовуйте
docker network create. - User-defined мережі дають DNS і кращу ізоляцію.
- Рекомендований підхід для сервісів, що взаємодіють між собою.
61. Як контейнери знаходять один одного в мережі?
У user-defined мережах Docker надає вбудований DNS. Контейнери можуть звертатися один до одного за іменем контейнера або alias.
Приклад: сервіс api може викликати db:5432, якщо обидва в одній мережі.
Коротко:
- Service discovery працює через внутрішній DNS Docker.
- Ім'я контейнера часто є DNS-ім'ям у мережі.
- Потрібно, щоб контейнери були підключені до однієї мережі.
62. Що таке namespaces у Docker?
Namespaces — механізм Linux kernel для ізоляції ресурсів процесів. Docker
використовує pid, net, mnt, ipc, uts, user namespaces.
Завдяки цьому контейнер "бачить" власний набір процесів, мереж, hostname, монтувань тощо.
Коротко:
- Namespaces забезпечують логічну ізоляцію.
- Кожен контейнер має свій ізольований view системи.
- Це фундамент контейнеризації в Linux.
63. Що таке cgroups?
cgroups (control groups) — механізм Linux kernel для обмеження й обліку
ресурсів процесів: CPU, RAM, I/O, pids.
Docker використовує cgroups, щоб один контейнер не "з'їв" усі ресурси хоста.
Коротко:
- cgroups = контроль ресурсів.
- Дають ліміти і fair sharing між контейнерами.
- Критично важливі для стабільності production.
64. Як Docker ізолює контейнери?
Ізоляція базується на комбінації механізмів Linux:
- namespaces (ізоляція оточення);
- cgroups (ліміти ресурсів);
- capabilities, seccomp, AppArmor/SELinux (безпека);
- окремі filesystem layers і мережі.
Коротко:
- Docker не запускає повну гостьову ОС, але ізолює процеси ядром Linux.
- Ізоляція багаторівнева: процеси, мережа, ФС, права.
- Безпека залежить і від конфігурації контейнера.
65. Чому Docker потребує Linux kernel?
Docker relies on Linux kernel features (namespaces, cgroups, capabilities),
які і реалізують контейнерну ізоляцію.
Тому нативно Docker працює на Linux. Інші ОС використовують Linux VM або kernel-compatible шари для контейнерного runtime.
Коротко:
- Контейнери Docker побудовані на Linux kernel primitives.
- Без них стандартна модель Docker не працює.
- Linux — нативне середовище для Docker runtime.
66. Як Docker працює на Windows і macOS?
На macOS і більшості сценаріїв Windows Docker Desktop запускає легку Linux VM, всередині якої працює Docker Engine.
Користувач працює з тим самим CLI/API, але фактичний runtime контейнерів — у VM. На Windows також існують Windows-containers для відповідних образів.
Коротко:
- На не-Linux ОС Docker зазвичай працює через Linux VM.
- CLI для користувача виглядає так само.
- Важливо враховувати різницю файлової системи та продуктивності mount.
67. Що таке containerd?
containerd — це контейнерний runtime-демон, який керує життєвим циклом
контейнерів, image pull/push, snapshot та storage операціями.
Docker використовує containerd під капотом як нижчий runtime шар.
Коротко:
- containerd — core runtime компонент.
- Відповідає за low-level container operations.
- Використовується не лише Docker, а й іншими платформами.
68. Чим containerd відрізняється від dockerd?
dockerd— високорівневий Docker daemon (API, build, networks, volumes, інтеграція CLI).containerd— нижчий runtime шар для виконання контейнерів.
Спрощено: dockerd оркеструє Docker-функціональність, containerd виконує
runtime-операції.
Коротко:
dockerd= верхній рівень Docker платформи.containerd= runtime фундамент під ним.- Обидва працюють разом у стандартній Docker-архітектурі.
69. Що таке runC?
runC — низькорівневий OCI runtime, який безпосередньо створює і запускає
контейнерні процеси згідно OCI-специфікації.
У типовому стеку Docker виклики йдуть зверху вниз: dockerd -> containerd ->
runC.
Коротко:
- runC виконує фактичний запуск контейнера.
- OCI-сумісний компонент низького рівня.
- Зазвичай використовується через containerd, а не напряму.
70. Як обмежити CPU і пам’ять для контейнера?
При запуску задають ресурсні ліміти:
docker run -d --name app --cpus="1.5" --memory="512m" --memory-swap="512m" nginxТакож часто використовують --pids-limit, --cpu-shares, --cpuset-cpus.
Коротко:
- Ліміти задаються параметрами
docker run. - Мінімум для production: ліміт RAM і CPU.
- Це захищає хост від "шумних" контейнерів.
71. Як перевірити використання ресурсів контейнера?
Швидкий перегляд runtime-метрик:
docker statsДля конкретного контейнера:
docker stats appКоманда показує CPU, RAM, network I/O, block I/O.
Коротко:
docker stats— базовий live-моніторинг.- Дає оперативну картину по навантаженню контейнерів.
- Для production бажано підключати зовнішню observability.
72. Як переглянути логи контейнера?
Використовуйте docker logs:
docker logs appСтрім логів у реальному часі:
docker logs -f --tail 100 appКоротко:
docker logsчитає stdout/stderr контейнера.-fдля follow,--tailдля останніх рядків.- У production логи краще централізувати.
73. Як підключитися всередину контейнера?
Для інтерактивної сесії:
docker exec -it app shАбо bash, якщо він є в образі:
docker exec -it app bashКоротко:
docker exec -itзапускає shell у running-контейнері.- Зручно для діагностики й дебагу.
- Не варто робити manual-fixes як постійну практику.
74. Як отримати детальну інформацію про контейнер або image?
Для детальної JSON-інформації використовують docker inspect:
docker inspect app
docker inspect nginx:latestТам є конфіг, мережа, mounts, env, статус, metadata.
Коротко:
docker inspectдає повний технічний стан об'єкта.- Працює для container, image, network, volume.
- Основний інструмент для troubleshooting.
75. Що робить команда `docker system prune`?
docker system prune очищає невикористовувані Docker-ресурси:
- stopped containers;
- unused networks;
- dangling images;
- build cache.
docker system prune -fКоротко:
- Видаляє непотрібні артефакти і звільняє диск.
- Потребує обережності в production.
- Для ширшого очищення існують додаткові прапорці (
-a,--volumes).
76. Як моніторити Docker у production?
Практичний підхід:
- Збирати метрики контейнерів/хоста (CPU, RAM, restarts, fs, network).
- Централізувати логи.
- Налаштувати алерти по SLO/SLA (latency, error rate, OOM, crash-loop).
- Мати дашборди по сервісах і вузлах.
Типовий стек: Prometheus + Grafana + Alertmanager + Loki/ELK.
Коротко:
- Потрібен моніторинг і контейнерів, і хостів.
- Критичні сигнали: OOM, restart spikes, saturation ресурсів.
- Без алертингу моніторинг не закриває production-ризики.
77. Як реалізувати healthcheck для контейнера?
Healthcheck задають у Dockerfile або при docker run.
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD wget -qO- http://localhost:8080/health || exit 1Docker відмічає контейнер як healthy або unhealthy за результатом команди.
Коротко:
- Healthcheck дає сигнал про фактичну готовність сервісу.
- Краще використовувати lightweight endpoint.
- Важливий для автоматичного відновлення і оркестрації.
78. Як забезпечити безпеку контейнерів?
Базові практики:
- використовувати мінімальні базові образи;
- не запускати процеси від root (
USER); - обмежувати capabilities, застосовувати
seccomp/AppArmor/SELinux; - сканувати image на вразливості;
- підписувати й контролювати джерела образів;
- оновлювати image і runtime регулярно.
Коротко:
- Безпека починається з supply chain образів.
- Принцип least privilege обов'язковий.
- Сканування та патч-менеджмент мають бути регулярними.
79. Як працювати із секретами в Docker?
Секрети не слід вшивати в image або комітити в git.
Підходи:
- передавати через зовнішній secret manager;
- у Swarm — використовувати Docker Secrets;
- у Compose/dev — передавати через env/file, але з обережністю.
Для production краще short-lived credentials і ротація.
Коротко:
- Секрети мають приходити на runtime, не на build-time image.
- Перевага за централізованими secret manager рішеннями.
- Ротація і аудит доступу обов'язкові.
80. Що таке Docker Compose?
Docker Compose — інструмент для опису і запуску multi-container застосунків через декларативний YAML-файл.
В одному файлі задають сервіси, мережі, томи, env, залежності.
Коротко:
- Compose = "інфраструктура застосунку" в одному файлі.
- Спрощує запуск кількох сервісів однією командою.
- Дуже зручний для dev/test середовищ.
81. Для чого використовується Docker Compose?
Compose застосовують для:
- локального запуску стеку (app + db + cache + queue);
- інтеграційних тестів;
- стандартизованого dev environment у команді;
- швидкого підняття демо/POC.
Коротко:
- Compose описує і піднімає весь стек сервісів.
- Мінімізує ручні команди
docker run. - Основний інструмент локальної контейнерної оркестрації.
82. Чим Docker Compose відрізняється від Dockerfile?
Dockerfileописує, як зібрати один image.Composeописує, як запустити та зв'язати кілька контейнерів.
Вони доповнюють одне одного, а не заміняють.
Коротко:
- Dockerfile = build-рівень.
- Compose = runtime-рівень multi-service застосунку.
- У типовому проєкті використовують обидва.
83. Яка структура файлу `docker-compose.yml`?
Типова структура:
services— контейнери застосунку;networks— мережі між сервісами;volumes— персистентні сховища;- опційно
configs,secrets(залежно від режиму/платформи).
Коротко:
- Ядро Compose-файлу:
services,networks,volumes. - YAML декларативно описує стан стеку.
- Один файл часто достатній для dev середовища.
84. Що таке services у Docker Compose?
services — це логічні компоненти застосунку (наприклад web, db, redis),
кожен з власним image/build, портами, env, volumes і policy.
Compose створює для кожного сервісу один або кілька контейнерів.
Коротко:
- Service описує роль і конфіг контейнера.
- Кожен сервіс має власні параметри запуску.
- Сервіси разом формують повний стек застосунку.
85. Що таке networks у Docker Compose?
networks у Compose визначають, як сервіси спілкуються між собою і які з них
ізольовані.
За замовчуванням Compose створює окрему project-мережу, де сервіси доступні за іменами.
Коротко:
- Networks керують зв'язністю та ізоляцією сервісів.
- Compose автоматично створює default network.
- Для складних схем можна оголосити кілька мереж.
86. Що таке volumes у Docker Compose?
volumes у Compose — декларативний опис персистентних сховищ, які монтуються в
сервіси.
Приклад: винести дані PostgreSQL у named volume, щоб вони не губилися після перезапуску контейнера.
Коротко:
- Volumes у Compose дають persistency для стану.
- Оголошуються один раз і підключаються до сервісів.
- Критично важливі для БД і stateful компонентів.
87. Як запустити застосунок через Docker Compose?
Сучасний синтаксис:
docker compose up -dКоманда збирає (за потреби), створює мережі/томи і запускає сервіси у фоні.
Коротко:
- Основна команда:
docker compose up -d. - Піднімає весь стек з
docker-compose.yml. - Для розробки часто використовують
docker compose upбез-d.
88. Що робить команда `docker-compose down`?
docker-compose down (або docker compose down) зупиняє і видаляє контейнери,
мережі та інші ресурси, створені up.
За замовчуванням named volumes не видаляються, якщо не вказати -v.
Коротко:
downприбирає стек, створений Compose.- Очищає контейнери й мережі проєкту.
- Для видалення томів використовуйте
-v.
89. Як сервіси взаємодіють між собою в Compose?
Сервіси, що в одній Compose-мережі, звертаються один до одного по імені сервісу і внутрішньому порту.
Наприклад, web може підключатись до db:5432 без публікації цього порту назовні.
Коротко:
- Взаємодія відбувається через internal network.
- Ім'я сервісу = DNS-ім'я.
- Публічний порт потрібен лише для зовнішнього доступу.
90. Як працює DNS між сервісами?
Compose використовує вбудований DNS Docker. Для кожного сервісу реєструється ім'я, яке резолвиться в IP контейнера в межах мережі.
При масштабуванні сервісу DNS може повертати кілька IP (round-robin).
Коротко:
- DNS автоматично доступний у межах Compose-мережі.
- Сервіси знаходять один одного за service name.
- Не потрібно вручну прописувати IP адреси.
91. Що таке `depends_on`?
depends_on — директива Compose, що керує порядком запуску/зупинки сервісів.
Вона каже Compose, що один сервіс логічно залежить від іншого.
Коротко:
depends_onвизначає startup order.- Допомагає уникнути хаотичного старту стеку.
- Не є повноцінною перевіркою готовності.
92. Чому `depends_on` не гарантує готовність сервісу?
Тому що "контейнер запущений" не означає "застосунок всередині готовий приймати запити".
Наприклад, БД може стартувати контейнер, але ще виконувати ініціалізацію.
Коротко:
depends_onгарантує порядок, але не readiness.- Потрібні healthchecks або wait-механізми.
- Інакше можливі race conditions на старті.
93. Як реалізувати очікування готовності сервісу?
Найпрактичніше:
- Додати
healthcheckдля залежного сервісу (наприклад БД). - Використовувати механізм очікування в клієнтському сервісі (
wait-for-it,dockerize, retry loop у коді).
Production-friendly підхід — retries з backoff на рівні застосунку.
Коротко:
- Readiness вирішується не тільки Compose-конфігом, а й логікою сервісу.
- Healthcheck + retry/backoff дають стабільний старт.
- Це зменшує флейки в CI/CD та локальному dev.
94. Як використовувати змінні середовища в Compose?
У docker-compose.yml змінні підставляються як ${VAR} і можуть передаватись у
environment.
Приклад:
services:
app:
environment:
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT}Коротко:
- Compose підтримує шаблонізацію через
${...}. - Значення приходять із shell або
.env. - Це дозволяє мати різні конфіги без дублювання файлів.
95. Як працює файл `.env`?
Файл .env поруч із compose-файлом містить пари KEY=VALUE, які Compose
використовує для підстановки змінних.
DB_HOST=db
DB_PORT=5432.env зручний для локальної конфігурації, але секрети для production краще
тримати у спеціалізованих secret manager рішеннях.
Коротко:
.envпідживлює змінні для Compose-шаблонів.- Спрощує перемикання між середовищами.
- Не ідеальний для чутливих production-секретів.
96. Як використовувати кілька Compose-файлів (dev/prod)?
Compose дозволяє накладати файли один на один.
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -dБазовий файл містить спільну конфігурацію, override-файли — відмінності конкретного середовища.
Коротко:
- Multi-file підхід зменшує дублювання конфігів.
- Base + overrides = чиста структура dev/prod.
- Порядок
-fважливий (пізніші файли перекривають попередні).
97. Як масштабувати сервіси через Compose?
Масштабування виконується через --scale:
docker compose up -d --scale web=3Compose підніме кілька реплік сервісу. Потрібно врахувати балансування трафіку і stateful обмеження.
Коротко:
--scale service=Nстворює кілька контейнерів сервісу.- Підходить для stateless-компонентів.
- Для складного production-автоскейлу зазвичай потрібен оркестратор.
98. Як організувати healthcheck у Docker Compose?
Healthcheck задається в секції сервісу:
services:
api:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 3s
retries: 3
start_period: 10sЦе дозволяє відстежувати стан сервісу і використовувати readiness у сценаріях залежностей та моніторингу.
Коротко:
- Healthcheck у Compose описується прямо в
service. - Дає статус
healthy/unhealthy. - Потрібен для надійного керування залежностями.
99. Які обмеження Docker Compose у production?
Compose має обмеження для великого production:
- немає повноцінного scheduler-а по кластерах;
- обмежені вбудовані механізми self-healing і autoscaling;
- слабша історично інтеграція enterprise-рівня політик і multi-tenant контролю;
- складніше керувати великим distributed-флотом.
Для невеликих production-систем Compose може бути достатнім, але масштаб має бути контрольованим.
Коротко:
- Compose сильний у dev/test і малому prod.
- Для великого кластера зазвичай обирають Swarm/Kubernetes.
- Межа застосування залежить від складності і SLO вимог.
100. Чим Docker Compose відрізняється від Docker Swarm або Kubernetes?
Порівняння:
- Compose: локальна/проста оркестрація, переважно single-host або невеликі сценарії.
- Swarm: вбудована кластерна оркестрація Docker з простішим operational порогом входу.
- Kubernetes: найпотужніша оркестрація для великих distributed-систем (autoscaling, self-healing, rich ecosystem, policy control).
Коротко:
- Compose — найпростіший рівень.
- Swarm/K8s — кластерний рівень оркестрації.
- Kubernetes зазвичай обирають для складного enterprise production.
101. Що таке Docker Swarm?
Docker Swarm — це вбудований у Docker режим кластерної оркестрації, що об'єднує кілька Docker-хостів у єдиний кластер.
У Swarm є manager-вузли (керують станом кластера) і worker-вузли (виконують сервіси/таски).
Коротко:
- Swarm = кластерний режим Docker.
- Дає оркестрацію сервісів на кількох вузлах.
- Простіший поріг входу, ніж у Kubernetes.
102. Як масштабувати сервіси у Docker Swarm?
Масштабування виконується зміною кількості реплік сервісу:
docker service scale web=5Альтернатива через update:
docker service update --replicas 5 webКоротко:
- Масштабування у Swarm = зміна
replicas. - Swarm сам розподіляє таски по вузлах.
- Підходить для stateless-сервісів.
103. Чи підтримує Swarm автоматичне масштабування?
Нативного horizontal autoscaling (на кшталт HPA) у Docker Swarm немає.
Swarm підтримує self-healing (перезапуск/перерозміщення тасків), але автоматичне масштабування реплік за метриками зазвичай реалізують зовнішніми скриптами/інструментами.
Коротко:
- Built-in autoscaling у Swarm відсутній.
- Є автоматичне відновлення сервісів, але не auto-replica scaling.
- Для autoscaling потрібні зовнішні механізми.
104. Як працює балансування навантаження у Swarm?
Swarm використовує routing mesh: запит може прийти на будь-який вузол кластера, після чого буде проксійований до однієї з реплік сервісу.
Додатково є внутрішнє балансування між тасками сервісу через вбудований DNS/VIP.
Коротко:
- Swarm має вбудований load balancing.
- Routing mesh дозволяє доступ через будь-який node.
- Трафік розподіляється між репліками сервісу.
105. Як Docker використовується в CI/CD?
У CI/CD Docker зазвичай використовується так:
- Зібрати image з коду.
- Прогнати тести/скани.
- Запушити image у registry.
- Деплоїти конкретний тег/digest у середовище.
Це робить релізи відтворюваними і зменшує різницю між build та run середовищем.
Коротко:
- Docker стандартизує build artifact.
- Один image проходить шлях від CI до production.
- Зручно для rollback і traceability.
106. Як зберігати та версіонувати Docker Images?
Практика версіонування:
- використовувати semver/релізні теги (
1.4.2); - додавати immutable tag (наприклад git SHA);
- у деплої краще фіксувати digest (
@sha256:...) для повної відтворюваності.
Зберігають image у registry з політиками retention та доступу.
Коротко:
- Не покладатися лише на
latest. - Мати зрозумілу tag-стратегію + immutable ідентифікатор.
- Для критичних релізів використовувати digest pinning.
107. Як пушити образ у Registry?
Кроки:
- Затегувати image під registry/repo.
- Авторизуватись.
- Виконати push.
docker tag my-app:1.0.0 registry.example.com/team/my-app:1.0.0
docker push registry.example.com/team/my-app:1.0.0Коротко:
- Потрібен правильний повний тег репозиторію.
- Без
docker loginpush зазвичай не спрацює. - Після push image доступний для деплою з registry.
108. Як виконати `docker login`?
Базова авторизація:
docker loginДля конкретного registry:
docker login registry.example.comУ CI краще використовувати token/robot account і non-interactive вхід через stdin для пароля.
Коротко:
docker loginзберігає облікові дані для registry.- Для CI використовуйте токени, не паролі користувачів.
- Мінімізуйте scope прав облікових даних.
109. Як експортувати та імпортувати Docker Image (`save/load`)?
Експорт image у tar:
docker save -o my-app.tar my-app:1.0.0Імпорт назад:
docker load -i my-app.tarЦе корисно для air-gapped середовищ або офлайн-перенесення.
Коротко:
saveекспортує image у файл.loadвідновлює image з tar.- Зручно, коли registry недоступний.
110. Як організувати multi-environment (dev/stage/prod) з Docker?
Практичний підхід:
- один базовий Dockerfile;
- різні конфіги через env vars/secrets;
- різні compose/stack-файли або overlays для dev/stage/prod;
- окремі теги образів і pipeline для кожного середовища.
Коротко:
- Образ бажано тримати максимально однаковим між середовищами.
- Різницю виносити в конфіг, а не в код/бінарник.
- Потрібен чіткий promotion flow (dev -> stage -> prod).
111. Як зменшити час збірки Docker Image?
Основні техніки:
- Оптимізувати порядок layer-ів для cache hit.
- Мінімізувати build context через
.dockerignore. - Використовувати multi-stage і кеш залежностей.
- Застосовувати BuildKit (
DOCKER_BUILDKIT=1). - Використовувати remote/cache-from у CI.
Коротко:
- Найбільше впливає cache strategy.
- Менший context = швидший build.
- BuildKit значно покращує продуктивність збірки.
112. Як оновити контейнер без втрати даних?
Оновлення роблять через новий image і перевипуск контейнера, а стан зберігають у volume/зовнішньому сховищі.
Патерн:
- Зупинити старий контейнер.
- Запустити новий контейнер з тим самим volume.
- Переключити трафік.
Коротко:
- Дані мають бути винесені з контейнера.
- Оновлюється контейнер, а не mutable "ремонт" всередині нього.
- Для безперервності потрібен rolling/blue-green підхід.
113. Як мігрувати контейнер на інший сервер?
Зазвичай переносять не "живий контейнер", а артефакти:
- image (через registry або
save/load); - дані (volume backup/restore, DB replication, snapshots);
- конфіг/секрети/мережеві налаштування.
Після цього контейнер відтворюють на новому хості.
Коротко:
- Міграція = відтворення на новому хості, а не копіювання runtime стану.
- Ключові елементи: image + data + config.
- Потрібен план downtime або live-migration на рівні сервісу.
114. Як відлагодити проблему, якщо контейнер падає після запуску?
Чеклист:
docker ps -a— статус і exit code.docker logs <container>— причина падіння.docker inspect— env, command, mounts, healthcheck.- Перевірити ресурси (OOM, ліміти), порти, залежності.
- Локально відтворити запуск із debug-командою.
Коротко:
- Починати з
ps -aіlogs. - Найчастіші причини: неправильний CMD/ENTRYPOINT, конфіг, залежності.
inspectдає повну технічну картину запуску.
115. Скільки контейнерів можна запустити на одному хості і від чого це залежить?
Фіксованого числа немає. Ліміт залежить від:
- CPU, RAM, disk I/O, мережі;
- профілю навантаження контейнерів;
- заданих лімітів ресурсів;
- overhead логування, моніторингу, runtime.
Практично визначають через навантажувальні тести і SLO.
Коротко:
- Кількість контейнерів визначається ресурсами і workload, а не Docker-правилом.
- Без лімітів контейнери можуть заважати один одному.
- Capacity planning обов'язковий для production.
116. Як організувати логування для контейнерів у production?
Рекомендації:
- писати логи в stdout/stderr;
- використовувати централізований збір (Fluent Bit/Vector/Logstash);
- зберігати structured logs (JSON);
- налаштувати ротацію і retention policy;
- корелювати логи з trace/request ID.
Коротко:
- Контейнерні логи не повинні жити лише локально на хості.
- Потрібна централізація, пошук і алертинг.
- Формат логів має бути машинно-оброблюваним.
117. Як організувати централізований моніторинг Docker?
Базовий підхід:
- Метрики контейнерів і хостів (Prometheus/cAdvisor/node exporter).
- Дашборди (Grafana).
- Алертинг (Alertmanager, on-call маршрути).
- Логи й трейси в єдиній observability-платформі.
Коротко:
- Моніторинг має бути централізованим і проактивним.
- Потрібні метрики, логи, алерти і чіткі runbooks.
- Без on-call процесу метрики мало корисні.
118. Як забезпечити високу доступність контейнерного застосунку?
Ключові практики:
- запускати кілька реплік сервісу;
- розносити репліки по різних вузлах/зонах;
- використовувати healthchecks і авто-відновлення;
- мати зовнішній load balancer;
- уникати single points of failure (БД, storage, ingress).
Коротко:
- HA = реплікація + автоматичне відновлення + балансування.
- Станові компоненти потребують окремої HA-стратегії.
- Регулярно тестуйте failover-сценарії.
119. Як працює service discovery у Swarm?
Swarm надає вбудований DNS для сервісів. Кожен сервіс отримує DNS-ім'я в overlay-мережі.
Залежно від режиму endpoint (VIP або dnsrr) запити йдуть через virtual IP
або отримують список IP тасків.
Коротко:
- Service discovery у Swarm вбудований з коробки.
- Сервіси знаходять один одного по service name.
VIP/dnsrrвизначають модель маршрутизації.
120. У яких випадках не варто використовувати Docker?
Docker може бути не найкращим вибором, якщо:
- застосунок тісно залежить від специфіки ОС/ядра, несумісної з контейнерним підходом;
- критичні ultra-low-latency/real-time сценарії, де навіть невеликий overhead неприйнятний;
- команда не має операційної зрілості для підтримки контейнерної платформи;
- простий моноліт на одному сервері не потребує додаткової складності.
Коротко:
- Docker не самоціль, а інструмент.
- Якщо складність переважає вигоду, краще простіший підхід.
- Рішення має базуватись на вимогах системи і зрілості команди.