<===
2026-02-25 10:39:47
# Курс: Контейнеризація та Оркестрація з Docker та Kubernetes
## Огляд курсу:
Цей курс призначений для розробників, інженерів DevOps, системних адміністраторів та всіх, хто бажає глибоко зануритися у світ контейнеризації та оркестрації. Курс охоплює основи Docker та Kubernetes, починаючи з базових концепцій і закінчуючи практичними навичками розгортання та управління контейнеризованими застосунками. Мета курсу - надати студентам комплексне розуміння технологій контейнеризації, їх переваг, інструментів та кращих практик.
---
## Детальний план-конспект:
### **1. Основи контейнеризації**
**1.1. Проблема традиційних деплоїв**
- **Детальніше**:
- **"Works on my machine"**: несумісність середовищ через відмінності в ОС, бібліотеках, залежностях.
- **Ручне налаштування**: часозатратне та схоже на помилки.
- **Віртуальні машини (VM)**: важкі, повільні у запуску, високі вимоги до ресурсів.
- **Приклади**: порівняння часу розгортання VM vs контейнера.
- **Рішення**: контейнери як легковага альтернатива.
**1.2. Поняття контейнера, образу, реєстру**
- **Контейнер**: ізольоване середовище для запуску застосунку з усіма залежностями.
- **Образ**: шаблон для створення контейнерів (read-only).
- **Реєстр**: сховище образів (Docker Hub, приватні реєстри).
- **Відмінність від VM**: контейнери ділять ядро ОС, VM мають власне ядро.
**1.3. Типові кейси**
- **Мікросервіси**: ізоляція компонентів, незалежне масштабування.
- **CI/CD**: швидке тестування та розгортання.
- **Тестові середовища**: швидке створення ідентичних середовищ.
- **Ізоляція залежностей**: уникнення конфліктів бібліотек.
**1.4. Огляд екосистеми**
- **Docker**: найпопулярніший інструмент контейнеризації.
- **Containerd, Podman**: альтернативи Docker.
- **Kubernetes**: оркестратор для управління контейнерами у кластері.
**Практика**:
- Встановлення Docker.
- Розгортання першого контейнера (наприклад, Nginx).
---
### **2. Основи Docker**
**2.1. Архітектура Docker**
- **Client-Server модель**:
- **Docker Client**: відправляє команди.
- **Docker Daemon**: виконує команди, керує контейнерами.
- **Registry**: сховище образів.
- **Images та Containers**: образи — це шаблони, контейнери — запущені екземпляри.
**2.2. Базові команди**
- **`docker run`**: запуск контейнера.
- Параметри: `--rm`, `-d`, `-it`.
- **`docker ps`**: список активних контейнерів.
- **`docker stop/rm`**: зупинка та видалення контейнера.
- **`docker images`**: список образів.
- **`docker pull/push`**: завантаження/завантаження образів у реєстр.
**2.3. Мапінг портів та мережі**
- **`-p HOST:CONTAINER`**: мапінг портів.
- **Bridge мережа**: за замовчуванням, ізолює контейнери.
- **Host мережа**: контейнер використовує мережу хоста.
- **Практика**: розгортання веб-сервера з мапінгом порту.
**2.4. Volumes та Bind Mounts**
- **Volumes**: керовані Docker, зберігають дані між запусками.
- **Bind Mounts**: монтують каталоги хоста в контейнер.
- **Практика**: збереження даних бази даних у контейнері.
---
### **3. Створення та керування Docker-образами**
**3.1. Dockerfile**
- **Структура**: послідовність інструкцій.
- **Основні інструкції**:
- `FROM`: базовий образ.
- `RUN`: виконання команд у середовищі образу.
- `COPY/ADD`: копіювання файлів.
- `EXPOSE`: вказівка портів.
- `CMD/ENTRYPOINT`: команда для запуску контейнера.
- **Практика**: створення Dockerfile для Node.js застосунку.
**3.2. Кешування шарів та оптимізація**
- **Кешування**: Docker кешує шари між побудовами.
- **Оптимізація**:
- Об'єднати `RUN` команди.
- Використовувати `.dockerignore`.
- Мінімізувати кількість шарів.
**3.3. Multi-stage Build**
- **Ціль**: зменшення розміру фінального образу.
- **Приклад**: побудова застосунку на етапі `builder`, копіювання артефактів у легкий образ (наприклад, `alpine`).
**3.4. Теги та версіонування**
- **Теги**: `docker build -t image:tag`.
- **Версіонування**: семантичне версіонування (наприклад, `1.0.0`).
- **Docker Hub**: завантаження образу (`docker push`).
**Практика**:
- Створення оптимізованого образу з multi-stage build.
- Завантаження образу у Docker Hub.
---
### **4. Docker Compose. Part 1**
**4.1. Навіщо Docker Compose?**
- **Проблема**: управління декількома контейнерами вручну.
- **Рішення**: опис застосунку у `docker-compose.yml`.
**4.2. Структура `docker-compose.yml`**
- **`version`**: версія формату.
- **`services`**: опис сервісів (контейнерів).
- `image/build`: образ або Dockerfile.
- `ports`: мапінг портів.
- `volumes`: монтування томів.
- `environment`: змінні середовища.
**4.3. Базові команди**
- **`docker compose up`**: запуск застосунку.
- **`docker compose down`**: зупинка та видалення.
- **`docker compose ps`**: список контейнерів.
- **`docker compose logs`**: перегляд логів.
**Практика**:
- Створення стеку `web + db` (наприклад, Nginx + PostgreSQL).
---
### **5. Docker Compose. Part 2**
**5.1. Мережі в Compose**
- **Дефолтна мережа**: всі сервіси можуть спілкуватися між собою.
- **Явні мережі**: визначення власних мереж (`networks` у `docker-compose.yml`).
- **Доступ по імені**: сервіси доступні за іменами (наприклад, `db`).
**5.2. Зовнішні ресурси**
- **Volumes**: монтування зовнішніх томів.
- **Networks**: підключення до зовнішніх мереж.
- **Secrets/Configs**: управління конфіденційною інформацією.
**5.3. Профілі та змінні середовища**
- **Профілі**: вибіркове розгортання сервісів (`profiles` у `docker-compose.yml`).
- **Змінні середовища**: використання `.env` файлів.
- **Override-файли**: `docker-compose.override.yml` для налаштувань dev/prod.
**5.4. Перехід до Kubernetes**
- **Обмеження Compose**: проблеми з масштабуванням, відсутністю самозагойного механізму.
- **Kubernetes**: кластерна оркестрація, автоматичне відновлення, масштабування.
**Практика**:
- Налаштування мереж та volumes у `docker-compose.yml`.
- Використання override-файлів для різних середовищ.
---
### **6. Основи Kubernetes**
**6.1. Проблеми масштабування**
- **Docker/Compose**: обмеження для великих застосунків.
- **Kubernetes**: управління кластером вузлів, автоматичне масштабування.
**6.2. Архітектура Kubernetes**
- **Control Plane**:
- **API Server**: вхідна точка для управління кластером.
- **etcd**: розподілена БД для зберігання стану.
- **Scheduler**: розміщення Pod на вузлах.
- **Controller Manager**: управління контролерами (наприклад, ReplicaSet).
- **Worker Nodes**:
- **Kubelet**: агент на вузлі, виконує команди control plane.
- **Kube-proxy**: управління мережевими правилами.
**6.3. Базові об’єкти**
- **Pod**: найменша одиниця, може містити один або кілька контейнерів.
- **Deployment**: декларативне управління Pod.
- **ReplicaSet**: підтримка заданої кількості реплік Pod.
- **Service**: абстракція для доступу до Pod.
- **Namespace**: логічне розділення ресурсів.
**6.4. Інструменти**
- **`kubectl`**: CLI для управління кластером.
- **YAML маніфести**: декларативне визначення ресурсів.
- **Imperative vs Declarative**: різниця в підходах (наприклад, `kubectl run` vs `kubectl apply`).
**Практика**:
- Встановлення Minikube/Kind для локального кластера.
- Розгортання першого Pod та Service.
---
### **7. Pod, Deployment та ReplicaSet в деталях**
**7.1. Pod**
- **Життєвий цикл**: створення, запуск, завершення.
- **Multi-container Pod**: спільне середовище для тісно інтегрованих контейнерів (наприклад, застосунок + sidecar).
- **Практика**: розгортання Pod з двома контейнерами.
**7.2. ReplicaSet**
- **Ціль**: підтримка заданої кількості реплік Pod.
- **Зв’язок з Deployment**: Deployment керує ReplicaSet.
**7.3. Deployment**
- **Rolling Update**: поступове оновлення Pod.
- **Rollback**: повернення до попередньої версії.
- **Масштабування**: зміна кількості реплік (`kubectl scale`).
- **Практика**: розгортання Deployment, оновлення образу, масштабування.
---
### **8. Service та Ingress у Kubernetes**
**8.1. Service**
- **Типи**:
- **ClusterIP**: внутрішній доступ у кластері.
- **NodePort**: доступ ззовні на порт вузла.
- **LoadBalancer**: зовнішній балансувальник надається хмарним провайдером.
- **Селектори**: як Service знаходить Pod.
- **Endpoints**: IP-адреси Pod, що відповідають селектору.
**8.2. Ingress**
- **Концепція**: управління зовнішнім HTTP(S) трафіком.
- **Ingress-controller**: реалізація правил маршрутизації (наприклад, Nginx Ingress Controller).
- **Правила**: host-based та path-based routing.
- **Практика**: налаштування доступу до декількох сервісів через один вхід.
**8.3. Безпека та TLS**
- **Секрети**: зберігання сертифікатів (`kubectl create secret tls`).
- **Cert-manager**: автоматизація видачі сертифікатів Let's Encrypt.
- **Практика**: налаштування TLS для Ingress.
---
## Практичні Вправи та Проекти:
1. **Проект 1**: Розгортання блог-платформи (наприклад, WordPress + MySQL) у Docker.
2. **Проект 2**: Міграція застосунку з Docker Compose до Kubernetes.
3. **Проект 3**: Налаштування CI/CD для контейнеризованого застосунку (наприклад, GitHub Actions + Docker Hub).
4. **Проект 4**: Розгортання мікросервісного застосунку з Ingress та TLS у Kubernetes.
## Додаткові Ресурси:
- **Документація**:
- [Docker Docs](https://docs.docker.com/)
- [Kubernetes Docs](https://kubernetes.io/docs/)
- **Книги**:
- "Docker: Up & Running" by Karl Matthias, Sean P. Kane.
- "Kubernetes in Action" by Marko Luksa.
- **Онлайн-курси**:
- Docker and Kubernetes: The Complete Guide (Udemy).
- Certified Kubernetes Administrator (CKA) Prep Course.
- **Спільноти**:
- Reddit: r/docker, r/kubernetes
- Slack/Discord: Kubernetes Community.
Цей курс забезпечує не лише теоретичне розуміння, але й практичні навички, необхідні для успішної роботи з контейнеризованими застосунками у сучасних DevOps-середовищах.
Back to list