# Лабораторная работа №2 - Разработка простого распределённого приложения ## Описание задания **Цель**: Создать два приложения, где результаты работы первого используются в качестве входных данных для второго. **Основные задачи**: 1. Разработать два приложения: - **app_one**: Находит файл с максимальным количеством строк в папке `/var/data` и копирует его содержимое в `/var/result/data.txt`. - **app_two**: Определяет минимальное число в файле `/var/result/data.txt` и записывает его третью степень в `/var/result/result.txt`. 2. Настроить Docker-образ для каждого приложения. 3. Подготовить `docker-compose.yml` для управления обоими приложениями. 4. Организовать монтирование директорий для обмена данными между контейнерами. 5. Настроить `.gitignore` для исключения ненужных файлов при коммитах. ## Детали задания ### **Описание приложений** 1. **work_one**: - Анализирует содержимое каталога `/var/data`, определяя файл с наибольшим количеством строк. - Копирует содержимое найденного файла в `/var/result/data.txt`. 2. **work_two**: - Читает содержимое файла `/var/result/data.txt`. - Находит минимальное число в файле и возводит его в третью степень. - Сохраняет результат в `/var/result/result.txt`. ### **Требования к реализации**: - **Docker**: Используется для контейнеризации приложений. - **Docker Compose**: Позволяет запускать несколько контейнеров через единый файл `docker-compose.yml`. ### **Сборка и запуск приложения**: Для сборки и запуска контейнеров выполните команду в директории с `docker-compose.yml`: ```bash docker-compose up --build ``` Эта команда: 1. Создает Docker-образы для всех сервисов. 2. Запускает контейнеры. 3. Выполняет обработку данных приложениями последовательно. ### **Результаты работы**: После завершения работы контейнеров: - Файл **data.txt** в папке `/var/result` будет содержать данные из файла с максимальным количеством строк из папки `/var/data`. - Файл **result.txt** в той же папке сохранит третью степень минимального числа из файла **data.txt**. ## Детали реализации ### **Программы**: 1. **work_one/main.py**: - Осуществляет поиск файла с наибольшим количеством строк. - Сохраняет его содержимое в `/var/result/data.txt`. 2. **work_two/main.py**: - Читает содержимое файла `/var/result/data.txt`. - Находит минимальное число, возводит его в третью степень и сохраняет результат в `/var/result/result.txt`. ### **Генерация тестовых данных**: Скрипт **generate.py** используется для создания случайных данных: - Создает несколько файлов с целыми числами в папке `/var/data`. - Каждый файл содержит случайные данные, которые обрабатываются первым приложением. ### **Dockerfile**: Для каждого приложения разработан отдельный `Dockerfile`, где описаны шаги по сборке образов и запуску соответствующих программ. ## Итог В ходе работы было создано распределённое приложение, использующее Docker и Docker Compose для последовательной обработки данных в двух контейнерах. ## Видео https://cloud.mail.ru/public/H89o/DGmReqSk9