# Лабораторная работа №2 - Разработка простейшего распределённого приложения ## Задание **Цель**: Разработать два приложения, результат работы первого из которых становится входными данными для второго. **Задачи**: 1. Разработать два приложения: - **worker_1**: Считывает файл с целыми числами, умножает каждое число на 2 и сохраняет результат в новый файл. - **worker_2**: Считывает файл, созданный `worker_1`, вычисляет сумму чисел и выводит результат. 2. Разработать файлы сборки Docker для каждого приложения. 3. Собрать файл `docker-compose.yml` для запуска обоих приложений. 4. Настроить монтирование директорий для обмена данными между контейнерами. 5. Организовать генерацию входных данных с помощью скрипта `data_gen.py`. 6. Правильно закоммитить решение с использованием `.gitignore` для исключения лишних файлов. ## Описание решения ### Программы 1. **data_generator/data_gen.py**: - Генерирует случайные целые числа и сохраняет их в файл `input.txt` в папке `data`. 2. **worker_1/app.py**: - Читает файл `input.txt`, умножает числа на 2 и сохраняет результат в `output_worker1.txt`. 3. **worker_2/app.py**: - Читает файл `output_worker1.txt`, вычисляет сумму чисел и выводит результат на экран. ### Генерация данных Скрипт `data_gen.py` создаёт файл `input.txt` с 20 случайными числами в диапазоне от 1 до 100. Если папка `data` отсутствует, скрипт создаёт её автоматически. ### Docker 1. **Dockerfile для `worker_1`**: - Устанавливает Python. - Копирует скрипт `app.py`. - Устанавливает рабочую директорию `/app`. - Запускает `app.py`. 2. **Dockerfile для `worker_2`**: - Устанавливает Python. - Копирует скрипт `app.py`. - Устанавливает рабочую директорию `/app`. - Запускает `app.py`. ### Docker Compose Файл `docker-compose.yml` управляет запуском трёх сервисов: 1. **data_generator** — генерирует входные данные. 2. **worker_1** — обрабатывает данные из `input.txt` и создаёт `output_worker1.txt`. 3. **worker_2** — читает `output_worker1.txt`, вычисляет сумму чисел и выводит результат. Монтирование директорий обеспечивает обмен файлами между контейнерами. ### Сборка и запуск 1. Генерация данных: ``` docker-compose run data_generator ``` 2. Запуск всех сервисов: ``` docker-compose up --build ``` ### Результаты После выполнения команд: - **input.txt** — файл, созданный `data_generator`, содержащий случайные числа. - **output_worker1.txt** — файл, созданный `worker_1`, содержащий числа, умноженные на 2. - Конечный результат (сумма чисел) выводится в консоль `worker_2`. ## Вывод В результате лабораторной работы было создано простейшее распределённое приложение с использованием Docker и Docker Compose. Реализация демонстрирует базовые подходы к созданию контейнеризированных приложений, обмену данными между контейнерами и автоматизации обработки данных. **Видео демонстрации**: Ссылка: https://cloud.mail.ru/public/83jj/3fGCcVQcK