Docker и Kubernetes для Разработчиков - Лекция 1

Jul 18, 2024

Лекция: Введение в Docker и Kubernetes

Введение

  • Автор: Евгений Сулейманов
  • Более 10 лет опыта в разработке промышленных систем
  • Цель видео — дать теоретические и практические навыки работы с Docker и Kubernetes

План курса

  1. Введение в курс и правила обучения
  2. Обзор модулей курса
    • Docker образы и контейнеры
    • Работа с томами (Volumes)
    • Сетевое взаимодействие контейнеров
    • Docker Compose, Dockerизация Spring Boot, деплой в AWS
  3. Введение в Kubernetes
    • Основные концепции Kubernetes
    • Развёртывание и работа с Kubernetes локально
    • Работа с томами и сетевое взаимодействие
    • Заключение и рекомендации

Основы Docker

  • Docker — это технология контейнеризации для создания и управления контейнерами
    • Контейнеры — стандартизированная рабочая единица, содержащая приложение и его зависимости
  • Преимущества контейнеров
    • Единое поведение в разных окружениях
    • Лёгкость совместного использования окружения
    • Упрощённое переключение между проектами
    • Уменьшение зависимости от версии ПО и фреймворков

Сравнение Docker и виртуальных машин

  • Виртуальные машины
    • Изоляция и защита через эмуляцию платформы
    • Интерактивное развитие и настройки
    • Недостатки: большая занимаемая память и низкая скорость цикла разработки
  • Docker
    • Использование общего узла для контейнеров
    • Скорость итерации
    • Надёжная экосистема
    • Недостатки: уязвимость общего узла

Ключевые компоненты Docker

  • Docker Engine: ядро Docker, необходимое для запуска контейнеров
  • Docker Desktop: клиент для упрощения работы с Docker
  • Docker Compose: управление сложными и многоконтейнерными приложениями
  • Docker Hub: хранилище образов Docker, аналог GitHub для Docker образов

Установка Docker

  • Ссылки на официальные инструкции по установке для Mac, Windows и Linux
  • Проверка установки командой docker --version

Основные понятия Docker

  • Docker образ: шаблон на основе которого создаются контейнеры, содержит исходный код и среды выполнения
  • Docker контейнер: рабочая единица, запущенная на основе образа
  • Docker Volume: папка на файловой системе, доступная контейнерам для чтения и записи. Существует даже после удаления контейнера

Работа с Docker образами

  1. Создание Docker образа
    • Команда: docker build --tag <имя_образа>:<версия> .
  2. Запуск Docker контейнера
    • Команда: docker run -p <локальный_порт>:<внутренний_порт> <имя_образа>:<версия>
  3. Работа с Docker Volume
  4. Отличие образа от контейнера
    • Образ — слепок приложения с его зависимостями
    • Контейнер — экземпляр образа запущенный в изолированном окружении

Сетевое взаимодействие контейнеров

  • Создание и настройка сети для взаимодействия контейнеров
  • Команды: docker network create, docker run --network=<название_сети>

Docker Compose

  • Позволяет объединить несколько контейнеров в единую систему
  • Пример конфигурации в docker-compose.yml
  • Команда для запуска: docker-compose up -d --build

Публикация образов на Docker Hub

  1. Создание репозитория на Docker Hub
  2. Тегирование Docker образа
    • Команда: docker tag <имя_образа>:<версия> <dockerhub_логин>/<имя_репозитория>:<версия>
  3. Публикация Docker образа
    • Команда: docker push <dockerhub_логин>/<имя_репозитория>:<версия>

Основные команды Docker CLI

  • docker ps: список запущенных контейнеров
  • docker ps -a: список всех контейнеров
  • docker kill <ID>: остановка контейнера
  • docker rm <ID>: удаление контейнера
  • docker image ls: список образов
  • docker rmi <ID>: удаление образа

Kubernetes: Оркестрация контейнеров

  • Решает задачи мониторинга состояния, автоматического деплоймента и масштабирования контейнеров
  • Основные компоненты Kubernetes:
    • Master node (Control Plane): управляет кластером
    • Worker nodes: запускают контейнеры
    • Pod: наименьшая рабочая единица, содержащая один или несколько контейнеров
    • Service: логическое объединение подов, доступных по единому IP адресу

Установка Kubernetes (Minikube)

  • Пошаговые инструкции для установки на различные ОС
  • Запуск Minikube: minikube start --driver=<тип драйвера> --no-vtx-check
  • Проверка статуса Minikube: minikube status
  • Запуск дашборда Minikube: minikube dashboard

Основные понятия Kubernetes

  • Deployment: описание и управление подами
  • Service: доступ к подам внутри кластера и извне

Работа с Minikube и Kubernetes Dashboard

  • Создание и управление Deployment и Service через команды kubectl
  • Проверка состояния подов и сервисов через kubectl get pods и kubectl get svc

Поддержка инфраструктуры как кода (IaC)

  • Инфраструктура Kubernetes через конфигурационные файлы
  • Пример конфигов deployment.yaml и service.yaml
  • Работа с Persistent Volume для хранения данных вне подов

Заключение

  • Рекомендации по изучению материалов и документации
  • Обратная связь и контакт для вопросов: prite@yahoo.com