# 🚀 Шпаргалка: От Docker к Kubernetes через Podman

Эта памятка поможет вам переключить мышление с изолированных контейнеров (мировоззрение Docker) на концепцию оркестрации, управления подами и декларативных манифестов (мировоззрение Kubernetes).

---

## 1. Базовый мост (Алиасы и Совместимость)
Podman полностью совместим с CLI-командами Docker. Вы можете использовать привычный синтаксис.

* **Быстрый переход для терминала:**
  ```bash
  alias docker=podman
  ```
  *После этого все команды вроде `docker run`, `docker ps`, `docker images` будут автоматически выполняться через Podman.*

---

## 2. Главное отличие: Создание локального Пода (Pod)
В Docker контейнеры изолированы друг от друга и связываются через Docker Networks. В Podman (как и в Kubernetes) минимальной единицей является **Pod** — группа контейнеров, разделяющих один IP-адрес и пространство `localhost`.

### Шаг А: Создаем пустой Под и пробрасываем в него порты
```bash
podman pod create --name my-learning-pod -p 8080:80
```

### Шаг Б: Запускаем контейнеры внутри этого Пода
Теперь нам не нужно пробрасывать порты для каждого контейнера отдельно. Мы просто помещаем их внутрь пода с помощью флага `--pod`:

```bash
# 1. Запускаем веб-сервер Nginx в наш под
podman run -d --pod my-learning-pod --name web-server docker.io/library/nginx:alpine

# 2. Запускаем утилиту curl в том же поде, чтобы проверить связь через localhost
podman run --rm --pod my-learning-pod docker.io/library/curlimages/curl curl http://localhost:80
```
*Контейнеры внутри одного пода видят друг друга через `localhost`, как процессы на одном компьютере.*

---

## 3. Магия миграции: Генерация манифестов для Kubernetes (`podman kube`)
Вместо написания сложных YAML-файлов для Kubernetes вручную, вы можете спроектировать архитектуру приложения локально в Podman, а затем выгрузить её.

### Конвертация запущенного Пода в Kubernetes YAML:
```bash
podman kube generate my-learning-pod > k8s-deployment.yaml
```

**Что произойдет под капотом:**
Podman создаст валидный, чистокровный манифест Kubernetes (типа `Pod` или `Deployment`), содержащий описание всех контейнеров, портов и переменных окружения, готовый к деплою в реальный кластер (Minikube, GKE, AWS EKS).

---

## 4. Обратная совместимость: Запуск манифестов Kubernetes локально
Если у вас уже есть готовый манифест Kubernetes, вам **не нужно** разворачивать тяжелый локальный кластер (Minikube / Kind), чтобы протестировать его. Podman умеет читать их «из коробки».

### Запуск K8s-манифеста на локальном ПК:
```bash
podman kube play k8s-deployment.yaml
```

### Удаление всего стека, описанного в манифесте:
```bash
podman kube down k8s-deployment.yaml
```

---

## 5. Таблица перевода концепций для студентов

| Задача | Как делали в Docker (Тупиковый путь) | Как делаем в Podman ➡️ Kubernetes (Правильный путь) |
| :--- | :--- | :--- |
| **Управление процессами** | Демон `dockerd` с правами `root`. | Бездемонная модель (**Daemonless**), запуск от обычного пользователя (**Rootless**). |
| **Связь между контейнерами** | `docker network create` + имена контейнеров. | Создание пода `podman pod create` + общее пространство `localhost`. |
| **Локальный мульти-контейнер** | `docker-compose up` (Файлы `.yaml` не подходят для продакшна K8s). | `podman kube play k8s-pod.yaml` (Манифест на 100% совместим с продакшном). |
| **Просмотр подов** | *Концепция отсутствует* | `podman pod ps` |
| **Посмотреть логи всего пода** | Приходилось смотреть логи каждого контейнера отдельно. | `podman pod logs my-learning-pod` (Агрегирует логи всех контейнеров пода). |

---

## 💡 Педагогический совет для практической работы:
Дайте студентам задание: 
1. Развернуть связку из двух контейнеров (например, Frontend на Nginx + Backend на Python/Node) внутри одного пода через `podman pod create`.
2. Сгенерировать файл `k8s-deployment.yaml` с помощью `podman kube generate`.
3. Отредактировать полученный файл (например, изменить количество реплик) и запустить его заново через `podman kube play`.