QUESTIONS
Запитання для тех-чеків:
✔️ Поясни архітектуру Docker.
Побудований за принципами мікросервісної архітектури (багато сервісів які мають свою зону відповідальності).
Компоненти Докера є стандартизованими, завдяки чому зʼявилась можливість розробки різних реалізацій цих компонентів.
- Client (Docker CLI) — це програма, яка допомагає формувати команди.
- Docker API (daemon) — це фактично REST API, який приймає команди, проводить якусь первинну обробку, наприклад, валідацію, і передає далі по ланцюжку виконання.
- Lifecycle Management (containerd) — це програма, яка відповідає за цикл життя контейнера і за такі команди як start, stop та pause.
- Low-Level Runtime (runc) — це компонент, який відповідає за абстрагування роботи з ядром Linux.
SonarCube ✔️ Яка різниця між Docker Image та Docker Container?
Image - образ , як у програмуванні класс є шаблоном для подальших екземплярів обʼєктів Container - конкретний екземпляр образу.
✔️ Які переваги має Docker над віртуальними машинами?
Віртуальні машини віртуалізують повноцінно операційну систему тим самим беручи набагато більше ресурсів хостової системи, а контейнеризація використовує спільне з хостовою машиною ядро Лінукс , та створює власні екземпляри файлової системи, мережевих налаштувань, користувачів та прав доступу. Також контейнер є ізольована зона операційної системи.
✔️ Як створити контейнер Docker?
Створити Dockerfile за певним синтаксисом заповнити цей файл, щоб в ньому описувалось на основі якого образу створюватиметься контейнер, робочу папку, копіювання необхідних файлів та рядки запуску програми. Після чого якщо синтаксис вірний запустити docker build з відповідними ключами, це створить образ, після чого docker run з відповідними клюючами що створить та запустить контейнер.
✔️ Яка різниця між реєстром (registry) і репозиторієм (repository)?
Реєстр це сервер/сервіс який містить репозиторії (наприклад Docker Hub чи Amazon ECR), а репозиторії це сховище конкретних образів якихось проектів різних версій .
✔️ Яке призначення команд EXPOSE та publish (-p) у Docker?
EXPOSE лише декларує про те що у додатку задані порти будуть мапитись, не роблячи при цьому сам маппінг (це просто метаданні) publish (-p) під час створення контейнеру саме мапить пор хоста на порт контейнеру.
✔️ Розкажи про життєвий цикл контейнера.
Контейнер живе від створення до стану видаленого. Створений з імеджу контейнер готовий до запуску, в цьому стані він не працює та не споживає ресурси. Стан running означає що контейнер запущений та працює, також контейнер можна поставити на паузу та зняти з паузи, в цьому стані контейнер не споживає ресурси хоста проте памґятає точку зупину. Стан зупинений де-факто посилає у контейнер сиг терм що gracefully завершує роботу контейнеру, або зупинений через kill примусово завершає роботу контейнеру. Також зупинений контейнер можна видалити.
✔️ Що таке Docker Volume?
Певне сховище розшарене з хостовою машиною, яке може загалом використовується як спільше сховище з різними контейнерами для того щоб ділитись спільними файлами та базами даних.
✔️ Як запустити контейнер у docker-compose?
Правильно прописати всі Dockerfile'и, потім прописати docker-compose.yml файл у заданому форматі, після чого запустити командою docker compose up -d