<===

ProNotes

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-середовищах.   
← Previous Next →
Back to list