Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

DevLoversTeam/docker-interview-questions

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docker

Найпопулярніші запитання та відповіді на співбесіді з Docker

1. Що таке Docker?

Docker

Docker — це платформа для розробки, доставки й запуску застосунків у контейнерах. Контейнер містить застосунок і його залежності, тому працює однаково на різних середовищах.

Docker допомагає уникати проблеми "працює в мене локально, але не працює на сервері", бо середовище стандартизоване.

Коротко:

  • Docker запускає застосунки в контейнерах.
  • Контейнери ізолюють процеси та залежності.
  • Дає однакову поведінку локально, на CI і в production.
2. Які основні переваги використання Docker?

Docker

Основні переваги:

  1. Портативність: один і той самий образ запускається всюди.
  2. Швидкий старт: контейнер запускається за секунди.
  3. Ізоляція: залежності одного сервісу не конфліктують з іншими.
  4. Простий деплой: замість "налаштовувати сервер" — "запустити образ".
  5. Ефективність ресурсів: контейнери легші за повноцінні ВМ.

Коротко:

  • Швидше розробка і релізи.
  • Менше конфліктів середовища.
  • Краща утилізація інфраструктури.
3. Які проблеми вирішує Docker?

Docker

Docker вирішує типові інженерні проблеми:

  • різниця між локальним, тестовим і production середовищем;
  • складний онбординг нового розробника;
  • ручне керування залежностями та версіями;
  • нестабільні деплоя через дріфт конфігурацій;
  • важке масштабування сервісів.

Коротко:

  • Усуває environment drift.
  • Стандартизує запуск застосунку.
  • Спрощує CI/CD і масштабування.
4. Що таке контейнер у Docker?

Docker

Контейнер — це запущений екземпляр Docker-образу. Він має власний файловий шар для запису, ізольований простір процесів, мережу та налаштування.

Контейнер еферемерний: його можна швидко створити, зупинити, видалити і перезапустити.

Коротко:

  • Контейнер = runtime-стан образу.
  • Ізольований процес з власним оточенням.
  • Швидко створюється й видаляється.
5. Чим контейнер відрізняється від віртуальної машини?

Docker

Ключова відмінність — рівень віртуалізації:

  • VM віртуалізує апаратний рівень і має власну гостьову ОС.
  • Контейнер віртуалізує рівень ОС і ділить kernel хоста.

Через це контейнери зазвичай:

  • легші;
  • швидше стартують;
  • споживають менше ресурсів.

Коротко:

  • VM важчі, але дають сильнішу ізоляцію ОС.
  • Контейнери легші й швидші.
  • Для мікросервісів частіше обирають контейнери.
6. Що таке Docker Image?

Docker

Docker Image — це незмінний шаблон (read-only), з якого створюються контейнери. Образ містить файлову систему, застосунок, залежності та метадані запуску.

Образи збирають через Dockerfile і зберігають у registry.

Коротко:

  • Image — шаблон для створення контейнерів.
  • Містить код, залежності та інструкції запуску.
  • Сам по собі не виконується, доки не створено контейнер.
7. Чим відрізняються Image і Container?

Docker

  • Image — статичний, незмінний артефакт.
  • Container — запущений процес на основі image.

Один image може породжувати багато контейнерів із різним runtime-станом.

Коротко:

  • Image = "шаблон".
  • Container = "живий екземпляр".
  • Багато контейнерів можуть використовувати один image.
8. Що таке Docker Engine?

Docker

Docker Engine — це базовий runtime Docker, який забезпечує збірку образів, запуск контейнерів, керування мережами, томами та API взаємодію.

Це основний компонент, який встановлюється на сервер або локальну машину.

Коротко:

  • Docker Engine — ядро платформи Docker.
  • Керує життєвим циклом контейнерів.
  • Надає API і CLI-інтеграцію.
9. З яких компонентів складається Docker Engine?

Docker

Docker Engine складається з:

  1. Docker Daemon (dockerd) — серверна частина.
  2. Docker API — інтерфейс взаємодії з daemon.
  3. Docker CLI (docker) — клієнт для командного керування.

Коротко:

  • dockerd виконує операції.
  • API передає команди.
  • CLI — зручна оболонка для користувача.
10. Що таке Docker Daemon?

Docker

Docker Daemon (dockerd) — це фоновий сервіс, який приймає Docker-команди через API і виконує їх: збірка образів, запуск/зупинка контейнерів, керування мережами та томами.

Коротко:

  • dockerd — головний процес Docker на хості.
  • Саме він реально створює та запускає контейнери.
  • CLI звертається до нього через API.
11. Що таке Docker Client?

Docker

Docker Client — це CLI-інструмент docker, яким користувач вводить команди на кшталт docker run, docker ps, docker build.

Client не запускає контейнери напряму — він надсилає запити daemon-у.

Коротко:

  • Docker Client = команда docker у терміналі.
  • Приймає команди користувача.
  • Передає їх до Docker Daemon.
12. Як Docker Client взаємодіє з Docker Daemon?

Docker

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

Docker Host — це машина (фізична або віртуальна), на якій встановлено Docker Engine і де запускаються контейнери.

Host надає ресурси: CPU, RAM, disk, network.

Коротко:

  • Docker Host — середовище виконання контейнерів.
  • Може бути локальним ноутбуком або production-сервером.
  • Контейнери ділять ресурси хоста.
14. Що таке Docker Registry?

Docker

Docker Registry — це сховище Docker-образів. У registry зберігаються репозиторії та теги образів, які можна push/pull.

Registry буває публічним або приватним (Docker Hub, GHCR, ECR, GCR, Harbor).

Коротко:

  • Registry зберігає і роздає образи.
  • Підтримує версії через теги.
  • Критичний компонент CI/CD.
15. Що таке Docker Hub?

Docker

Docker Hub — це публічний хмарний registry від Docker. Він містить:

  • офіційні образи (nginx, redis, postgres тощо);
  • образи від спільноти та команд;
  • приватні репозиторії (на відповідних планах).

Коротко:

  • Docker Hub — найпоширеніший registry за замовчуванням.
  • Дозволяє швидко ділитися та отримувати образи.
  • Часто використовується як source у CI/CD.
16. Як завантажити образ із Docker Hub?

Docker

Використовуйте команду docker pull:

docker pull nginx:latest

Якщо тег не вказати, за замовчуванням використовується latest.

docker pull redis

Коротко:

  • Основна команда: docker pull <image>:<tag>.
  • Без тега зазвичай береться latest.
  • Після pull образ з'являється локально в кеші Docker.
17. Як запустити контейнер із образу?

Docker

Базовий запуск виконується через docker run:

docker run -d --name web -p 8080:80 nginx:latest

Тут:

  • -d — фоновий режим;
  • --name web — ім'я контейнера;
  • -p 8080:80 — проброс порту хост:контейнер.

Коротко:

  • docker run створює і запускає контейнер.
  • Параметри керують мережею, іменем, томами, env.
  • Один із найважливіших базових Docker-команд.
18. Як переглянути список запущених контейнерів?

Docker

Для перегляду лише активних контейнерів використовуйте:

docker ps

Команда покаже ID, image, статус, порти, назву контейнера.

Коротко:

  • docker ps показує тільки running-контейнери.
  • Зручно для швидкої перевірки стану сервісів.
  • Базова команда для operational рутини.
19. Як переглянути всі контейнери (включно із зупиненими)?

Docker

Використайте прапорець -a:

docker ps -a

Це покаже і запущені, і зупинені контейнери, включно з кодами завершення.

Коротко:

  • docker ps -a показує повний список контейнерів.
  • Допомагає діагностувати crash/exit після запуску.
  • Часто використовується разом із docker logs.
20. Як зупинити контейнер?

Docker

Для коректної зупинки використовуйте docker stop:

docker stop web

Docker надсилає SIGTERM і чекає grace period, після чого може завершити процес примусово.

Коротко:

  • docker stop <name|id> — м'яка зупинка.
  • Дає процесу час на graceful shutdown.
  • Переважний спосіб завершення контейнера.
21. Як запустити зупинений контейнер?

Docker

Щоб знову запустити раніше створений контейнер, використовуйте:

docker start web

Це саме перезапуск існуючого контейнера, а не створення нового.

Коротко:

  • docker start піднімає existing container.
  • Конфігурація контейнера зберігається.
  • Не плутати з docker run (створює новий).
22. Як примусово завершити контейнер?

Docker

Для негайного завершення використовується docker kill:

docker kill web

За замовчуванням надсилається SIGKILL, без graceful shutdown.

Коротко:

  • docker kill зупиняє контейнер миттєво.
  • Використовуйте, коли stop не спрацьовує.
  • Може призвести до некоректного завершення процесів.
23. Як видалити контейнер?

Docker

Видалення контейнера:

docker rm web

Якщо контейнер запущений, спочатку зупиніть його, або видаляйте примусово:

docker rm -f web

Коротко:

  • docker rm видаляє контейнер.
  • Для running-контейнера потрібен -f або попередній stop.
  • Видалення не зачіпає image.
24. Як видалити Docker Image?

Docker

Видалення образу виконується через docker rmi:

docker rmi nginx:latest

Якщо образ використовується контейнерами, спершу треба видалити/зупинити ці контейнери.

Коротко:

  • docker rmi видаляє локальний образ.
  • Потрібно звільнити залежні контейнери.
  • Корисно для очищення диска.
25. Як переглянути список образів?

Docker

Список локальних образів:

docker images

Альтернатива:

docker image ls

Команди показують repository, tag, image ID, розмір і дату створення.

Коротко:

  • docker images / docker image ls показують локальні image.
  • Допомагає контролювати кеш і зайнятий простір.
  • Базова команда для повсякденної роботи з Docker.
26. Що таке Dockerfile?

Docker

Dockerfile — це текстовий файл з інструкціями для збірки Docker-образу. Він описує базовий образ, кроки встановлення залежностей, копіювання коду, конфігурацію середовища і команду запуску.

Dockerfile робить збірку повторюваною та версійованою.

Коротко:

  • Dockerfile = рецепт збірки image.
  • Дає відтворюваний build у локальному та CI середовищі.
  • Є основою стандартизованого деплою.
27. Як створити Docker Image за допомогою Dockerfile?

Docker

Створення образу виконується командою 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?

Docker

FROM задає базовий образ, з якого починається збірка.

FROM node:20-alpine

У multi-stage build може бути кілька FROM, кожен відкриває окремий stage.

Коротко:

  • FROM визначає базу для image.
  • Без FROM Dockerfile зазвичай невалідний.
  • Кілька FROM використовують для multi-stage збірки.
29. Що робить інструкція RUN?

Docker

RUN виконує команду під час збірки образу і створює новий layer.

RUN apk add --no-cache curl

Типові use-case: встановлення пакетів, збірка артефактів, підготовка файлової системи.

Коротко:

  • RUN працює на етапі build, не runtime.
  • Кожен RUN додає новий layer.
  • Використовується для підготовки image.
30. Чим відрізняються RUN, CMD і ENTRYPOINT?

Docker

Ці інструкції працюють на різних етапах:

  • RUN — команда під час build (формує image).
  • CMD — команда за замовчуванням під час run (можна перевизначити).
  • ENTRYPOINT — фіксована точка входу контейнера (аргументи часто додаються через CMD або CLI).

Коротко:

  • RUN = build-time.
  • CMD/ENTRYPOINT = runtime.
  • ENTRYPOINT задає executable, CMD — дефолтні аргументи/команду.
31. Чим відрізняються CMD і ENTRYPOINT?

Docker

CMD задає дефолтну команду, яку легко замінити при docker run. ENTRYPOINT задає основний процес контейнера, який зазвичай не замінюється, а доповнюється аргументами.

Поширений шаблон:

  • ENTRYPOINT — стабільний binary/script;
  • CMD — дефолтні параметри запуску.

Коротко:

  • CMD легко override-иться.
  • ENTRYPOINT фіксує головний процес контейнера.
  • Разом дають передбачуваний і гнучкий запуск.
32. Чим відрізняються COPY і ADD?

Docker

COPY просто копіює файли/теки з build context у image. ADD робить більше: може розпаковувати локальні tar-архіви і працювати з URL (хоча URL-скачування краще робити явно через RUN curl/wget).

У більшості випадків рекомендують COPY як більш передбачуваний варіант.

Коротко:

  • COPY — базове та рекомендоване копіювання.
  • ADD має додаткову "магію" (tar/URL).
  • Якщо не потрібні спецможливості, обирайте COPY.
33. Що таке `.dockerignore` і навіщо він потрібен?

Docker

.dockerignore — файл, який виключає файли/каталоги з build context.

Приклад:

.git
node_modules
*.log
.env

Це пришвидшує збірку, зменшує розмір контексту і знижує ризик випадково потрапити в image секретам або зайвим артефактам.

Коротко:

  • .dockerignore фільтрує файли, що відправляються в build context.
  • Покращує швидкість build і безпеку.
  • Особливо важливий для великих репозиторіїв.
34. Що таке багатошарова архітектура Docker Image?

Docker

Docker Image складається з шарів (layers), де кожна інструкція Dockerfile (наприклад RUN, COPY) додає новий шар.

Шари кешуються і перевикористовуються між збірками та контейнерами, що робить build швидшим і економить місце.

Коротко:

  • Image складається з послідовності layers.
  • Layers immutable і кешуються.
  • Правильний порядок інструкцій суттєво впливає на швидкість build.
35. Що таке layer у Docker?

Docker

Layer — це незмінний файловий шар образу, створений окремою інструкцією збірки. Під час запуску контейнера Docker додає зверху writable layer для runtime-змін.

Це дозволяє ефективно ділити спільні базові шари між багатьма образами.

Коротко:

  • Layer — immutable частина image.
  • Контейнер має додатковий writable layer.
  • Шари перевикористовуються і економлять disk space.
36. Що таке multi-stage build?

Docker

Multi-stage build — підхід, коли в одному Dockerfile є кілька стадій збірки: окрема для компіляції, окрема для фінального runtime-образу.

Приклад ідеї: зібрати бінарник у "builder" stage і скопіювати лише артефакт у мінімальний runtime-образ.

Коротко:

  • Дає менші й безпечніші фінальні image.
  • Виносить build-залежності за межі production image.
  • Стандартний підхід для modern Docker builds.
37. Як зменшити розмір Docker Image?

Docker

Практичні кроки:

  1. Обирати легкі базові образи (-alpine, slim-варіанти).
  2. Використовувати multi-stage build.
  3. Копіювати тільки потрібні файли (COPY + .dockerignore).
  4. Об'єднувати команди встановлення й чистити кеш пакетного менеджера.
  5. Не класти в image тести, сорси збірки, тимчасові файли.

Коротко:

  • Найбільший ефект дають base image + multi-stage.
  • Контролюйте build context через .dockerignore.
  • Менший image = швидший pull, краща безпека, дешевший storage.
38. Що таке dangling images і як їх видалити?

Docker

Dangling images — це "висячі" образи без тега (<none>:<none>), які зазвичай лишаються після перебудов або ретегування.

Перегляд:

docker images -f dangling=true

Видалення:

docker image prune -f

Коротко:

  • Dangling image не має нормального тега.
  • Може непомітно займати багато диска.
  • Очищується командою docker image prune.
39. Які стани може мати Docker-контейнер?

Docker

Типові стани контейнера в Docker:

  • created — контейнер створений, але не запущений;
  • running — контейнер виконується;
  • paused — процеси призупинені;
  • restarting — йде перезапуск;
  • exited — контейнер зупинений;
  • dead — контейнер у некоректному стані (зазвичай після помилки).

Коротко:

  • Контейнер проходить кілька runtime-станів.
  • Найчастіші у практиці: running і exited.
  • Стан легко перевірити через docker ps -a.
40. Опишіть життєвий цикл контейнера.

Docker

Типовий життєвий цикл:

  1. Створення контейнера (docker create або docker run).
  2. Запуск (docker start або одразу в run).
  3. Робота процесу в стані running.
  4. Зупинка (docker stop/docker kill) -> стан exited.
  5. Повторний запуск (docker start) або видалення (docker rm).

Опціонально можливі pause/unpause, restart, політики автоперезапуску.

Коротко:

  • Create -> Run -> Stop -> Start/Remove.
  • Контейнер зазвичай ефемерний елемент інфраструктури.
  • Дані для довгого зберігання виносять у volumes.
41. Що робить команда `docker create`?

Docker

docker create створює контейнер з image, але не запускає його.

docker create --name app nginx:latest

Після цього контейнер буде у стані created і його можна запустити окремо:

docker start app

Коротко:

  • docker create = підготовка контейнера без старту.
  • Дозволяє розділити етапи create і start.
  • Використовується рідше, ніж docker run.
42. Що відбувається під час `docker stop`?

Docker

docker stop виконує graceful shutdown:

  1. Docker надсилає головному процесу контейнера сигнал SIGTERM.
  2. Чекає заданий timeout (типово ~10 секунд).
  3. Якщо процес не завершився — надсилає SIGKILL.
docker stop app

Коротко:

  • docker stop спочатку дає шанс завершитися коректно.
  • Лише після timeout застосовується жорстке завершення.
  • Рекомендований спосіб зупинки сервісів.
43. Чим відрізняються `docker stop` і `docker kill`?

Docker

Різниця в сигналах і поведінці:

  • docker stop -> SIGTERM + очікування + за потреби SIGKILL.
  • docker kill -> одразу SIGKILL (або інший сигнал, якщо вказати).

stop безпечніший для більшості застосунків, бо дає шанс зберегти стан і закрити з'єднання.

Коротко:

  • stop = м'яко, kill = негайно.
  • Для production спочатку використовують stop.
  • kill застосовують, коли контейнер "завис".
44. Що робить команда `docker restart`?

Docker

docker restart послідовно зупиняє і знову запускає контейнер.

docker restart app

Поведінка схожа на stop + start: спочатку graceful stop, потім новий старт того ж контейнера.

Коротко:

  • docker restart = швидкий перезапуск контейнера.
  • Використовує той самий контейнер, а не створює новий.
  • Зручно після зміни зовнішніх залежностей або тимчасових збоїв.
45. Чи може контейнер автоматично перезапускатися?

Docker

Так. Для цього задають restart policy під час запуску контейнера.

docker run -d --restart unless-stopped --name app nginx:latest

Policy визначає, коли Docker має автоматично підняти контейнер після падіння, рестарту Docker daemon або перезавантаження хоста.

Коротко:

  • Автоперезапуск підтримується вбудовано.
  • Налаштовується через --restart.
  • Важливий для підвищення доступності сервісу.
46. Які існують restart policy (`no`, `on-failure`, `always`, `unless-stopped`)?

Docker

Основні 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

Так. Після docker stop дані у writable layer контейнера залишаються, бо контейнер лише зупиняється, а не видаляється.

Якщо потім виконати docker start, стан файлової системи контейнера збережеться.

Коротко:

  • stop не видаляє дані контейнера.
  • Дані зникають не при зупинці, а при видаленні контейнера.
  • Для важливих даних краще використовувати volumes.
48. Коли дані контейнера можуть бути втрачені?

Docker

Дані можуть бути втрачені, якщо вони зберігались тільки у writable layer і:

  • контейнер видалили (docker rm);
  • контейнер перевидали після оновлення image;
  • виконали очищення, що зачепило контейнерні шари.

Щоб уникнути втрат, стан потрібно виносити у volume або bind mount.

Коротко:

  • Ризик втрати: видалення/пересоздання контейнера.
  • Ephemeral storage не підходить для критичних даних.
  • Persistency забезпечують volumes або зовнішні сховища.
49. Що таке Docker Volume?

Docker

Docker Volume — це кероване Docker сховище для персистентних даних. Volume живе окремо від життєвого циклу контейнера.

Його використовують для БД, логів, кешів та будь-яких даних, що мають переживати перезапуски і перевипуск контейнерів.

Коротко:

  • Volume = постійне сховище даних.
  • Не зникає при видаленні контейнера (доки не видалений окремо).
  • Рекомендований спосіб зберігання стану в Docker.
50. Де зберігаються Docker Volumes на хості?

Docker

У 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?

Docker

Bind mount підключає конкретний шлях хоста в контейнер.

docker run -v /host/path:/app/data nginx:latest

Контейнер читає/пише напряму в цю директорію хоста.

Коротко:

  • Bind mount = прямий мапінг шляху хоста.
  • Зручний для dev-сценаріїв (live code, конфіги).
  • Сильна залежність від структури файлової системи хоста.
52. Чим Volume відрізняється від bind mount?

Docker

Різниця:

  • Volume керується Docker і portable між хостами на рівні Docker abstractions.
  • Bind mount прив'язаний до конкретного шляху ОС хоста.

Volume зазвичай кращий для production-даних, bind mount — для локальної розробки та явного доступу до файлів хоста.

Коротко:

  • Volume: керований Docker, зручний для persistent data.
  • Bind mount: прямий шлях хоста, більше гнучкості й більше ризиків.
  • Для БД у production частіше обирають volume.
53. Як поділитися даними між контейнерами?

Docker

Найпоширеніший варіант — підключити один і той самий 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

Docker створює віртуальні мережі і підключає до них контейнери через network namespaces та драйвери (bridge, host, overlay тощо).

Кожен контейнер отримує мережевий інтерфейс, IP і маршрути в межах своєї мережі. Проброс портів (-p) відкриває доступ із хоста назовні.

Коротко:

  • Контейнери ізольовані по мережі.
  • Комунікація керується Docker network driver.
  • Публічний доступ робиться через port mapping.
55. Який мережевий драйвер використовується за замовчуванням?

Docker

Для standalone-контейнерів за замовчуванням використовується bridge мережа (bridge network типу docker0 на Linux).

Якщо не вказати --network, контейнер буде підключений до default bridge.

Коротко:

  • Default driver для звичайного docker runbridge.
  • Дає базову ізоляцію та внутрішню IP-комунікацію.
  • Для керованої взаємодії краще створювати user-defined bridge.
56. Які типи мереж існують у Docker (bridge, host, overlay, macvlan, none)?

Docker

Основні типи:

  • bridge — стандартна мережа для контейнерів на одному хості.
  • host — контейнер використовує мережевий стек хоста.
  • overlay — мережа між кількома хостами (Swarm).
  • macvlan — контейнер отримує MAC/IP у фізичній мережі.
  • none — мережа відключена.

Коротко:

  • Кожен драйвер вирішує різні network-задачі.
  • bridge найпоширеніший для локальних/одиночних хостів.
  • overlay потрібен для multi-host сценаріїв.
57. Що таке bridge-мережа?

Docker

Bridge — віртуальна L2-мережа на одному Docker host, де контейнери можуть спілкуватися між собою.

User-defined bridge надає вбудований DNS по іменах контейнерів і кращу керованість.

Коротко:

  • Bridge об'єднує контейнери в межах одного хоста.
  • Дозволяє внутрішню комунікацію без зовнішнього доступу.
  • User-defined bridge кращий за default bridge.
58. Що таке host-мережа?

Docker

У режимі host контейнер не отримує окремий мережевий namespace, а використовує мережу хоста напряму.

Через це немає NAT і port mapping, але ізоляція мережі зменшується.

Коротко:

  • --network host дає нативний мережевий стек хоста.
  • Може зменшити network overhead.
  • Компроміс: нижча ізоляція і вищі ризики конфлікту портів.
59. Що таке overlay-мережа?

Docker

Overlay — віртуальна мережа для контейнерів на різних хостах, зазвичай у Docker Swarm.

Вона інкапсулює трафік і дає сервісам прозоро спілкуватися між вузлами, ніби вони в одній мережі.

Коротко:

  • Overlay = multi-host мережа.
  • Ключовий інструмент для кластерних Docker-сценаріїв.
  • Найчастіше використовується разом зі Swarm.
60. Як створити власну Docker-мережу?

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. Як контейнери знаходять один одного в мережі?

Docker

У user-defined мережах Docker надає вбудований DNS. Контейнери можуть звертатися один до одного за іменем контейнера або alias.

Приклад: сервіс api може викликати db:5432, якщо обидва в одній мережі.

Коротко:

  • Service discovery працює через внутрішній DNS Docker.
  • Ім'я контейнера часто є DNS-ім'ям у мережі.
  • Потрібно, щоб контейнери були підключені до однієї мережі.
62. Що таке namespaces у Docker?

Docker

Namespaces — механізм Linux kernel для ізоляції ресурсів процесів. Docker використовує pid, net, mnt, ipc, uts, user namespaces.

Завдяки цьому контейнер "бачить" власний набір процесів, мереж, hostname, монтувань тощо.

Коротко:

  • Namespaces забезпечують логічну ізоляцію.
  • Кожен контейнер має свій ізольований view системи.
  • Це фундамент контейнеризації в Linux.
63. Що таке cgroups?

Docker

cgroups (control groups) — механізм Linux kernel для обмеження й обліку ресурсів процесів: CPU, RAM, I/O, pids.

Docker використовує cgroups, щоб один контейнер не "з'їв" усі ресурси хоста.

Коротко:

  • cgroups = контроль ресурсів.
  • Дають ліміти і fair sharing між контейнерами.
  • Критично важливі для стабільності production.
64. Як Docker ізолює контейнери?

Docker

Ізоляція базується на комбінації механізмів Linux:

  • namespaces (ізоляція оточення);
  • cgroups (ліміти ресурсів);
  • capabilities, seccomp, AppArmor/SELinux (безпека);
  • окремі filesystem layers і мережі.

Коротко:

  • Docker не запускає повну гостьову ОС, але ізолює процеси ядром Linux.
  • Ізоляція багаторівнева: процеси, мережа, ФС, права.
  • Безпека залежить і від конфігурації контейнера.
65. Чому Docker потребує Linux kernel?

Docker

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?

Docker

На macOS і більшості сценаріїв Windows Docker Desktop запускає легку Linux VM, всередині якої працює Docker Engine.

Користувач працює з тим самим CLI/API, але фактичний runtime контейнерів — у VM. На Windows також існують Windows-containers для відповідних образів.

Коротко:

  • На не-Linux ОС Docker зазвичай працює через Linux VM.
  • CLI для користувача виглядає так само.
  • Важливо враховувати різницю файлової системи та продуктивності mount.
67. Що таке containerd?

Docker

containerd — це контейнерний runtime-демон, який керує життєвим циклом контейнерів, image pull/push, snapshot та storage операціями.

Docker використовує containerd під капотом як нижчий runtime шар.

Коротко:

  • containerd — core runtime компонент.
  • Відповідає за low-level container operations.
  • Використовується не лише Docker, а й іншими платформами.
68. Чим containerd відрізняється від dockerd?

Docker

  • dockerd — високорівневий Docker daemon (API, build, networks, volumes, інтеграція CLI).
  • containerd — нижчий runtime шар для виконання контейнерів.

Спрощено: dockerd оркеструє Docker-функціональність, containerd виконує runtime-операції.

Коротко:

  • dockerd = верхній рівень Docker платформи.
  • containerd = runtime фундамент під ним.
  • Обидва працюють разом у стандартній Docker-архітектурі.
69. Що таке runC?

Docker

runC — низькорівневий OCI runtime, який безпосередньо створює і запускає контейнерні процеси згідно OCI-специфікації.

У типовому стеку Docker виклики йдуть зверху вниз: dockerd -> containerd -> runC.

Коротко:

  • runC виконує фактичний запуск контейнера.
  • OCI-сумісний компонент низького рівня.
  • Зазвичай використовується через containerd, а не напряму.
70. Як обмежити CPU і пам’ять для контейнера?

Docker

При запуску задають ресурсні ліміти:

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. Як перевірити використання ресурсів контейнера?

Docker

Швидкий перегляд runtime-метрик:

docker stats

Для конкретного контейнера:

docker stats app

Команда показує CPU, RAM, network I/O, block I/O.

Коротко:

  • docker stats — базовий live-моніторинг.
  • Дає оперативну картину по навантаженню контейнерів.
  • Для production бажано підключати зовнішню observability.
72. Як переглянути логи контейнера?

Docker

Використовуйте docker logs:

docker logs app

Стрім логів у реальному часі:

docker logs -f --tail 100 app

Коротко:

  • docker logs читає stdout/stderr контейнера.
  • -f для follow, --tail для останніх рядків.
  • У production логи краще централізувати.
73. Як підключитися всередину контейнера?

Docker

Для інтерактивної сесії:

docker exec -it app sh

Або bash, якщо він є в образі:

docker exec -it app bash

Коротко:

  • docker exec -it запускає shell у running-контейнері.
  • Зручно для діагностики й дебагу.
  • Не варто робити manual-fixes як постійну практику.
74. Як отримати детальну інформацію про контейнер або image?

Docker

Для детальної 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

docker system prune очищає невикористовувані Docker-ресурси:

  • stopped containers;
  • unused networks;
  • dangling images;
  • build cache.
docker system prune -f

Коротко:

  • Видаляє непотрібні артефакти і звільняє диск.
  • Потребує обережності в production.
  • Для ширшого очищення існують додаткові прапорці (-a, --volumes).
76. Як моніторити Docker у production?

Docker

Практичний підхід:

  1. Збирати метрики контейнерів/хоста (CPU, RAM, restarts, fs, network).
  2. Централізувати логи.
  3. Налаштувати алерти по SLO/SLA (latency, error rate, OOM, crash-loop).
  4. Мати дашборди по сервісах і вузлах.

Типовий стек: Prometheus + Grafana + Alertmanager + Loki/ELK.

Коротко:

  • Потрібен моніторинг і контейнерів, і хостів.
  • Критичні сигнали: OOM, restart spikes, saturation ресурсів.
  • Без алертингу моніторинг не закриває production-ризики.
77. Як реалізувати healthcheck для контейнера?

Docker

Healthcheck задають у Dockerfile або при docker run.

HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD wget -qO- http://localhost:8080/health || exit 1

Docker відмічає контейнер як healthy або unhealthy за результатом команди.

Коротко:

  • Healthcheck дає сигнал про фактичну готовність сервісу.
  • Краще використовувати lightweight endpoint.
  • Важливий для автоматичного відновлення і оркестрації.
78. Як забезпечити безпеку контейнерів?

Docker

Базові практики:

  • використовувати мінімальні базові образи;
  • не запускати процеси від root (USER);
  • обмежувати capabilities, застосовувати seccomp/AppArmor/SELinux;
  • сканувати image на вразливості;
  • підписувати й контролювати джерела образів;
  • оновлювати image і runtime регулярно.

Коротко:

  • Безпека починається з supply chain образів.
  • Принцип least privilege обов'язковий.
  • Сканування та патч-менеджмент мають бути регулярними.
79. Як працювати із секретами в Docker?

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

Docker Compose — інструмент для опису і запуску multi-container застосунків через декларативний YAML-файл.

В одному файлі задають сервіси, мережі, томи, env, залежності.

Коротко:

  • Compose = "інфраструктура застосунку" в одному файлі.
  • Спрощує запуск кількох сервісів однією командою.
  • Дуже зручний для dev/test середовищ.
81. Для чого використовується Docker Compose?

Docker

Compose застосовують для:

  • локального запуску стеку (app + db + cache + queue);
  • інтеграційних тестів;
  • стандартизованого dev environment у команді;
  • швидкого підняття демо/POC.

Коротко:

  • Compose описує і піднімає весь стек сервісів.
  • Мінімізує ручні команди docker run.
  • Основний інструмент локальної контейнерної оркестрації.
82. Чим Docker Compose відрізняється від Dockerfile?

Docker

  • Dockerfile описує, як зібрати один image.
  • Compose описує, як запустити та зв'язати кілька контейнерів.

Вони доповнюють одне одного, а не заміняють.

Коротко:

  • Dockerfile = build-рівень.
  • Compose = runtime-рівень multi-service застосунку.
  • У типовому проєкті використовують обидва.
83. Яка структура файлу `docker-compose.yml`?

Docker

Типова структура:

  • services — контейнери застосунку;
  • networks — мережі між сервісами;
  • volumes — персистентні сховища;
  • опційно configs, secrets (залежно від режиму/платформи).

Коротко:

  • Ядро Compose-файлу: services, networks, volumes.
  • YAML декларативно описує стан стеку.
  • Один файл часто достатній для dev середовища.
84. Що таке services у Docker Compose?

Docker

services — це логічні компоненти застосунку (наприклад web, db, redis), кожен з власним image/build, портами, env, volumes і policy.

Compose створює для кожного сервісу один або кілька контейнерів.

Коротко:

  • Service описує роль і конфіг контейнера.
  • Кожен сервіс має власні параметри запуску.
  • Сервіси разом формують повний стек застосунку.
85. Що таке networks у Docker Compose?

Docker

networks у Compose визначають, як сервіси спілкуються між собою і які з них ізольовані.

За замовчуванням Compose створює окрему project-мережу, де сервіси доступні за іменами.

Коротко:

  • Networks керують зв'язністю та ізоляцією сервісів.
  • Compose автоматично створює default network.
  • Для складних схем можна оголосити кілька мереж.
86. Що таке volumes у Docker Compose?

Docker

volumes у Compose — декларативний опис персистентних сховищ, які монтуються в сервіси.

Приклад: винести дані PostgreSQL у named volume, щоб вони не губилися після перезапуску контейнера.

Коротко:

  • Volumes у Compose дають persistency для стану.
  • Оголошуються один раз і підключаються до сервісів.
  • Критично важливі для БД і stateful компонентів.
87. Як запустити застосунок через Docker Compose?

Docker

Сучасний синтаксис:

docker compose up -d

Команда збирає (за потреби), створює мережі/томи і запускає сервіси у фоні.

Коротко:

  • Основна команда: docker compose up -d.
  • Піднімає весь стек з docker-compose.yml.
  • Для розробки часто використовують docker compose up без -d.
88. Що робить команда `docker-compose down`?

Docker

docker-compose down (або docker compose down) зупиняє і видаляє контейнери, мережі та інші ресурси, створені up.

За замовчуванням named volumes не видаляються, якщо не вказати -v.

Коротко:

  • down прибирає стек, створений Compose.
  • Очищає контейнери й мережі проєкту.
  • Для видалення томів використовуйте -v.
89. Як сервіси взаємодіють між собою в Compose?

Docker

Сервіси, що в одній Compose-мережі, звертаються один до одного по імені сервісу і внутрішньому порту.

Наприклад, web може підключатись до db:5432 без публікації цього порту назовні.

Коротко:

  • Взаємодія відбувається через internal network.
  • Ім'я сервісу = DNS-ім'я.
  • Публічний порт потрібен лише для зовнішнього доступу.
90. Як працює DNS між сервісами?

Docker

Compose використовує вбудований DNS Docker. Для кожного сервісу реєструється ім'я, яке резолвиться в IP контейнера в межах мережі.

При масштабуванні сервісу DNS може повертати кілька IP (round-robin).

Коротко:

  • DNS автоматично доступний у межах Compose-мережі.
  • Сервіси знаходять один одного за service name.
  • Не потрібно вручну прописувати IP адреси.
91. Що таке `depends_on`?

Docker

depends_on — директива Compose, що керує порядком запуску/зупинки сервісів.

Вона каже Compose, що один сервіс логічно залежить від іншого.

Коротко:

  • depends_on визначає startup order.
  • Допомагає уникнути хаотичного старту стеку.
  • Не є повноцінною перевіркою готовності.
92. Чому `depends_on` не гарантує готовність сервісу?

Docker

Тому що "контейнер запущений" не означає "застосунок всередині готовий приймати запити".

Наприклад, БД може стартувати контейнер, але ще виконувати ініціалізацію.

Коротко:

  • depends_on гарантує порядок, але не readiness.
  • Потрібні healthchecks або wait-механізми.
  • Інакше можливі race conditions на старті.
93. Як реалізувати очікування готовності сервісу?

Docker

Найпрактичніше:

  1. Додати healthcheck для залежного сервісу (наприклад БД).
  2. Використовувати механізм очікування в клієнтському сервісі (wait-for-it, dockerize, retry loop у коді).

Production-friendly підхід — retries з backoff на рівні застосунку.

Коротко:

  • Readiness вирішується не тільки Compose-конфігом, а й логікою сервісу.
  • Healthcheck + retry/backoff дають стабільний старт.
  • Це зменшує флейки в CI/CD та локальному dev.
94. Як використовувати змінні середовища в Compose?

Docker

У docker-compose.yml змінні підставляються як ${VAR} і можуть передаватись у environment.

Приклад:

services:
  app:
    environment:
      - DB_HOST=${DB_HOST}
      - DB_PORT=${DB_PORT}

Коротко:

  • Compose підтримує шаблонізацію через ${...}.
  • Значення приходять із shell або .env.
  • Це дозволяє мати різні конфіги без дублювання файлів.
95. Як працює файл `.env`?

Docker

Файл .env поруч із compose-файлом містить пари KEY=VALUE, які Compose використовує для підстановки змінних.

DB_HOST=db
DB_PORT=5432

.env зручний для локальної конфігурації, але секрети для production краще тримати у спеціалізованих secret manager рішеннях.

Коротко:

  • .env підживлює змінні для Compose-шаблонів.
  • Спрощує перемикання між середовищами.
  • Не ідеальний для чутливих production-секретів.
96. Як використовувати кілька Compose-файлів (dev/prod)?

Docker

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?

Docker

Масштабування виконується через --scale:

docker compose up -d --scale web=3

Compose підніме кілька реплік сервісу. Потрібно врахувати балансування трафіку і stateful обмеження.

Коротко:

  • --scale service=N створює кілька контейнерів сервісу.
  • Підходить для stateless-компонентів.
  • Для складного production-автоскейлу зазвичай потрібен оркестратор.
98. Як організувати healthcheck у Docker Compose?

Docker

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?

Docker

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?

Docker

Порівняння:

  • 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

Docker Swarm — це вбудований у Docker режим кластерної оркестрації, що об'єднує кілька Docker-хостів у єдиний кластер.

У Swarm є manager-вузли (керують станом кластера) і worker-вузли (виконують сервіси/таски).

Коротко:

  • Swarm = кластерний режим Docker.
  • Дає оркестрацію сервісів на кількох вузлах.
  • Простіший поріг входу, ніж у Kubernetes.
102. Як масштабувати сервіси у Docker Swarm?

Docker

Масштабування виконується зміною кількості реплік сервісу:

docker service scale web=5

Альтернатива через update:

docker service update --replicas 5 web

Коротко:

  • Масштабування у Swarm = зміна replicas.
  • Swarm сам розподіляє таски по вузлах.
  • Підходить для stateless-сервісів.
103. Чи підтримує Swarm автоматичне масштабування?

Docker

Нативного horizontal autoscaling (на кшталт HPA) у Docker Swarm немає.

Swarm підтримує self-healing (перезапуск/перерозміщення тасків), але автоматичне масштабування реплік за метриками зазвичай реалізують зовнішніми скриптами/інструментами.

Коротко:

  • Built-in autoscaling у Swarm відсутній.
  • Є автоматичне відновлення сервісів, але не auto-replica scaling.
  • Для autoscaling потрібні зовнішні механізми.
104. Як працює балансування навантаження у Swarm?

Docker

Swarm використовує routing mesh: запит може прийти на будь-який вузол кластера, після чого буде проксійований до однієї з реплік сервісу.

Додатково є внутрішнє балансування між тасками сервісу через вбудований DNS/VIP.

Коротко:

  • Swarm має вбудований load balancing.
  • Routing mesh дозволяє доступ через будь-який node.
  • Трафік розподіляється між репліками сервісу.
105. Як Docker використовується в CI/CD?

Docker

У CI/CD Docker зазвичай використовується так:

  1. Зібрати image з коду.
  2. Прогнати тести/скани.
  3. Запушити image у registry.
  4. Деплоїти конкретний тег/digest у середовище.

Це робить релізи відтворюваними і зменшує різницю між build та run середовищем.

Коротко:

  • Docker стандартизує build artifact.
  • Один image проходить шлях від CI до production.
  • Зручно для rollback і traceability.
106. Як зберігати та версіонувати Docker Images?

Docker

Практика версіонування:

  • використовувати semver/релізні теги (1.4.2);
  • додавати immutable tag (наприклад git SHA);
  • у деплої краще фіксувати digest (@sha256:...) для повної відтворюваності.

Зберігають image у registry з політиками retention та доступу.

Коротко:

  • Не покладатися лише на latest.
  • Мати зрозумілу tag-стратегію + immutable ідентифікатор.
  • Для критичних релізів використовувати digest pinning.
107. Як пушити образ у Registry?

Docker

Кроки:

  1. Затегувати image під registry/repo.
  2. Авторизуватись.
  3. Виконати 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 login push зазвичай не спрацює.
  • Після push image доступний для деплою з registry.
108. Як виконати `docker login`?

Docker

Базова авторизація:

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`)?

Docker

Експорт 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?

Docker

Практичний підхід:

  • один базовий Dockerfile;
  • різні конфіги через env vars/secrets;
  • різні compose/stack-файли або overlays для dev/stage/prod;
  • окремі теги образів і pipeline для кожного середовища.

Коротко:

  • Образ бажано тримати максимально однаковим між середовищами.
  • Різницю виносити в конфіг, а не в код/бінарник.
  • Потрібен чіткий promotion flow (dev -> stage -> prod).
111. Як зменшити час збірки Docker Image?

Docker

Основні техніки:

  1. Оптимізувати порядок layer-ів для cache hit.
  2. Мінімізувати build context через .dockerignore.
  3. Використовувати multi-stage і кеш залежностей.
  4. Застосовувати BuildKit (DOCKER_BUILDKIT=1).
  5. Використовувати remote/cache-from у CI.

Коротко:

  • Найбільше впливає cache strategy.
  • Менший context = швидший build.
  • BuildKit значно покращує продуктивність збірки.
112. Як оновити контейнер без втрати даних?

Docker

Оновлення роблять через новий image і перевипуск контейнера, а стан зберігають у volume/зовнішньому сховищі.

Патерн:

  1. Зупинити старий контейнер.
  2. Запустити новий контейнер з тим самим volume.
  3. Переключити трафік.

Коротко:

  • Дані мають бути винесені з контейнера.
  • Оновлюється контейнер, а не mutable "ремонт" всередині нього.
  • Для безперервності потрібен rolling/blue-green підхід.
113. Як мігрувати контейнер на інший сервер?

Docker

Зазвичай переносять не "живий контейнер", а артефакти:

  • image (через registry або save/load);
  • дані (volume backup/restore, DB replication, snapshots);
  • конфіг/секрети/мережеві налаштування.

Після цього контейнер відтворюють на новому хості.

Коротко:

  • Міграція = відтворення на новому хості, а не копіювання runtime стану.
  • Ключові елементи: image + data + config.
  • Потрібен план downtime або live-migration на рівні сервісу.
114. Як відлагодити проблему, якщо контейнер падає після запуску?

Docker

Чеклист:

  1. docker ps -a — статус і exit code.
  2. docker logs <container> — причина падіння.
  3. docker inspect — env, command, mounts, healthcheck.
  4. Перевірити ресурси (OOM, ліміти), порти, залежності.
  5. Локально відтворити запуск із debug-командою.

Коротко:

  • Починати з ps -a і logs.
  • Найчастіші причини: неправильний CMD/ENTRYPOINT, конфіг, залежності.
  • inspect дає повну технічну картину запуску.
115. Скільки контейнерів можна запустити на одному хості і від чого це залежить?

Docker

Фіксованого числа немає. Ліміт залежить від:

  • CPU, RAM, disk I/O, мережі;
  • профілю навантаження контейнерів;
  • заданих лімітів ресурсів;
  • overhead логування, моніторингу, runtime.

Практично визначають через навантажувальні тести і SLO.

Коротко:

  • Кількість контейнерів визначається ресурсами і workload, а не Docker-правилом.
  • Без лімітів контейнери можуть заважати один одному.
  • Capacity planning обов'язковий для production.
116. Як організувати логування для контейнерів у production?

Docker

Рекомендації:

  • писати логи в stdout/stderr;
  • використовувати централізований збір (Fluent Bit/Vector/Logstash);
  • зберігати structured logs (JSON);
  • налаштувати ротацію і retention policy;
  • корелювати логи з trace/request ID.

Коротко:

  • Контейнерні логи не повинні жити лише локально на хості.
  • Потрібна централізація, пошук і алертинг.
  • Формат логів має бути машинно-оброблюваним.
117. Як організувати централізований моніторинг Docker?

Docker

Базовий підхід:

  1. Метрики контейнерів і хостів (Prometheus/cAdvisor/node exporter).
  2. Дашборди (Grafana).
  3. Алертинг (Alertmanager, on-call маршрути).
  4. Логи й трейси в єдиній observability-платформі.

Коротко:

  • Моніторинг має бути централізованим і проактивним.
  • Потрібні метрики, логи, алерти і чіткі runbooks.
  • Без on-call процесу метрики мало корисні.
118. Як забезпечити високу доступність контейнерного застосунку?

Docker

Ключові практики:

  • запускати кілька реплік сервісу;
  • розносити репліки по різних вузлах/зонах;
  • використовувати healthchecks і авто-відновлення;
  • мати зовнішній load balancer;
  • уникати single points of failure (БД, storage, ingress).

Коротко:

  • HA = реплікація + автоматичне відновлення + балансування.
  • Станові компоненти потребують окремої HA-стратегії.
  • Регулярно тестуйте failover-сценарії.
119. Як працює service discovery у Swarm?

Docker

Swarm надає вбудований DNS для сервісів. Кожен сервіс отримує DNS-ім'я в overlay-мережі.

Залежно від режиму endpoint (VIP або dnsrr) запити йдуть через virtual IP або отримують список IP тасків.

Коротко:

  • Service discovery у Swarm вбудований з коробки.
  • Сервіси знаходять один одного по service name.
  • VIP/dnsrr визначають модель маршрутизації.
120. У яких випадках не варто використовувати Docker?

Docker

Docker може бути не найкращим вибором, якщо:

  • застосунок тісно залежить від специфіки ОС/ядра, несумісної з контейнерним підходом;
  • критичні ultra-low-latency/real-time сценарії, де навіть невеликий overhead неприйнятний;
  • команда не має операційної зрілості для підтримки контейнерної платформи;
  • простий моноліт на одному сервері не потребує додаткової складності.

Коротко:

  • Docker не самоціль, а інструмент.
  • Якщо складність переважає вигоду, краще простіший підхід.
  • Рішення має базуватись на вимогах системи і зрілості команди.

About

Найпопулярніші запитання та відповіді на співбесіді по Docker

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.