- •Теория Базы данных и sql
- •Контейнеризация и Docker
- •Rest api и проектирование
- •Машинное обучение
- •Асинхронное программирование
- •Мобильная разработка и безопасность
- •Архитектура приложений
- •Практические задания Задание 1: sql (анализ оценок студентов)
- •Выполнение:
- •Задание 2: Docker (запуск FastApi-приложения в контейнере) доделать
- •Задание 3: rest api / FastApi (проектирование api для курсов)
- •Задание 4: Машинное обучение (определить тип ml-задачи)
Контейнеризация и Docker
6) Какую проблему решает Docker и как контейнеризация помогает обеспечить одинаковую работу приложения в разных средах: на компьютере разработчика, в тестовой среде и на сервере?
Docker — платформа для упаковки приложения со всеми зависимостями в изолированной сети. Он позволяет решить проблему конфликтов зависимостей, недостатка или разных версий системных пакетов, и в принципе невозможности запуска какого либо приложения из за различий системы, на которой это приложение запускается.
Контейнеризация выполняет функции:
Воспроизводимость: одинаковый образ → одинаковый результат
Изоляция: зависимости проекта не ломают систему и не конфликтуют с другими проектами
Быстрый старт
Портативность — один Image переносится на любую машину с Docker
Управляемость — версии окружения фиксируются в Dockerfile / compose.yml
Масштабирование и деплой — проще сделать релизы, откатывать версии, запускать несколько экземпляров
Командная разработка
Приложение неотделимо от окружения: ОС, библиотеки, настройки, переменные, сервисы, права доступа, сеть. Для решения проблемы различий окружений на компьютерах используется контейнеризация.
7) Сравните виртуальные машины и контейнеры: что они изолируют, какие имеют преимущества и ограничения.
Виртуальная машина изолирует целую ОС. Сильнее изоляция, можно запускать разные ОС с разными ядрами. Тяжелее, дольше старт, сложнее обновлять/масштабировать.
Контейнер изолирует процессы и окружение приложения. Легче, стартует быстро, плотнее упаковка, удобно для микросервисов и CI/CD.
Контейнеризация дает воспроизводимость (одинаковый образ → одинаковый результат), изоляцию (зависимости проекта не ломают систему и не конфликтуют с другими проектами), быстрый старт (клон репозитория → “docker compose up” вместо многостраничного README), портативность (один образ переносится на любую машину с Docker), управляемость (версии окружения фиксируются в Dockerfile / docker_compose.yml), масштабирование и деплой (проще сделать релизы, откатывать версии, запускать несколько экземпляров), командная разработка (меньше “магии” и ручных шагов — больше стандарта), короткая формула (контейнеризация превращает “настроить среду” в “собрать и запустить образ”).
8) Объясните различия между Docker image, container и registry. Как они связаны в жизненном цикле приложения?
Image (образ) — шаблон для запуска: файловая система + зависимости + настройки запуска, собран из слоев и доступен только для чтения. Идентифицируется как name:tag (например, python:3.12-slim) или по digest. Формула: образ = <что_запускаем>
Container (контейнер) — запущенный экземпляр образа (image + runtime-настройки), имеет свой ID, сеть, переменные, подключенные тома, может изменять свое состояние (но обычно контейнеры делают одноразовыми (проще пересоздать, чем чинить вручную)). Формула: контейнер = <образ_в_работе>
Registry (реестр) — публичное/приватное хранилище образов (откуда их доставать и куда отправлять), например Docker Hub, GitLab Registry и тд. Внутри: repositories и tags (версии образов) Формула: registry = <где_лежат_образы>
Связка: собрали Image (docker build) → залили в registry (docker push) → на сервере скачали Image (docker pull) → запустили container (docker run / docker compose up)
9) Что такое Dockerfile? Объясните назначение команд FROM, WORKDIR, COPY, RUN, CMD и роль слоёв образа при сборке.
Dockerfile — «рецепт», по которому Docker собирает образ. Минимальный набор команд позволяет: выбрать базу, задать рабочую папку, скопировать файлы и выполнить подготовку / установку зависимостей.
FROM — базовый образ, с которого начинается сборка
WORKDIR — рабочая директория внутри образа
COPY — копировать файлы из build context в образ
RUN — выполнить команду во время сборки
CMD — команда по умолчанию, если в docker run не указана никакая команда, в обратном случае полностью заменяется на указанную команду.
Пример:
FROM python:3.12-slim # Базовый образ WORKDIR /app # Рабочая директория COPY requirements.txt # Файлы из папки сборки (контекста) кладет в образ RUN pip install –no-cache-dir -r requirements.txt # Команда во время сборки COPY . . |
Слои образа (layers): образ собирается послойно — почти каждая инструкция в Dockerfile создает новый слой. Каждый слой — снимок изменений файловой системы относительно предыдущего. Слои переиспользуются разными образами.
