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