# Лабораторная работа №2 — Создание простейшего распределённого приложения

## Цель работы

Разработать два приложения, которые взаимодействуют следующим образом: результат работы первого приложения становится входными данными для второго.

## Поставленные задачи

1. **Разработка приложений**:
   - **app_one**: Определяет файл с максимальным количеством строк в каталоге `/var/data` и копирует его содержимое в `/var/result/data.txt`.
   - **app_two**: Анализирует файл `/var/result/data.txt`, находит наименьшее число и записывает его третью степень в `/var/result/result.txt`.
2. Создать Dockerfile для каждого приложения.
3. Настроить `docker-compose.yml` для совместного запуска приложений.
4. Реализовать монтирование директорий для передачи данных между контейнерами.
5. Организовать репозиторий с использованием `.gitignore` для исключения ненужных файлов.

## Детализация заданий

### Приложения

1. **app_one**:
   - Находит файл с наибольшим количеством строк в каталоге `/var/data`.
   - Копирует содержимое этого файла в `/var/result/data.txt`.

2. **app_two**:
   - Читает файл `/var/result/data.txt`.
   - Определяет наименьшее число в файле, возводит его в третью степень и сохраняет результат в `/var/result/result.txt`.

### Инструменты и требования

1. **Docker**: Для контейнеризации приложений.
2. **Docker Compose**: Для управления многоконтейнерным приложением через файл `docker-compose.yml`.

## Процесс сборки и запуска

Для запуска приложений выполните следующую команду в директории с файлом `docker-compose.yml`:

```bash
docker-compose up --build
```

Эта команда:
- Соберёт образы всех сервисов.
- Запустит контейнеры.
- Автоматически выполнит последовательную обработку данных.

## Итоговые результаты

После завершения работы приложений результат можно найти в каталоге `/var/result`:
- **data.txt** — копия файла с максимальным количеством строк из каталога `/var/data`.
- **result.txt** — результат возведения наименьшего числа из `data.txt` в третью степень.

## Описание реализации

### Скрипты

1. **app_one/main.py**:
   - Находит файл с максимальным количеством строк.
   - Копирует его содержимое в `/var/result/data.txt`.

2. **app_two/main.py**:
   - Анализирует файл `/var/result/data.txt`, определяет минимальное число, возводит его в третью степень и записывает в `/var/result/result.txt`.

3. **generate_data.py** (скрипт для генерации данных):
   - Создаёт несколько файлов с случайными числами в каталоге `/var/data` для тестирования.

### Dockerfile

Каждое приложение имеет собственный Dockerfile с инструкциями по сборке образов на основе Python.

## Заключение

Реализовано распределённое приложение, использующее Docker для запуска контейнеров и Docker Compose для оркестрации. Решение обеспечивает автоматизированную обработку данных через два взаимосвязанных приложения.

## Ссылка на видео

https://cloud.mail.ru/public/qbRv/m3AAUZ2VT