diff --git a/putilin_pavel_lab_2/README.md b/putilin_pavel_lab_2/README.md deleted file mode 100644 index e52bdd3..0000000 --- a/putilin_pavel_lab_2/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# Лабораторная работа №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 - diff --git a/putilin_pavel_lab_2/data_generator/data_generator.py b/putilin_pavel_lab_2/data_generator/data_generator.py deleted file mode 100644 index 0febf98..0000000 --- a/putilin_pavel_lab_2/data_generator/data_generator.py +++ /dev/null @@ -1,14 +0,0 @@ -import random -import os - -def generate_data(file_path, count=10): - # Создаём директорию, если она не существует - os.makedirs(os.path.dirname(file_path), exist_ok=True) - - with open(file_path, "w") as f: - numbers = [str(random.randint(1, 100)) for _ in range(count)] - f.write("\n".join(numbers)) - -if __name__ == "__main__": - generate_data("../data/input.txt", count=20) - print("Data generated successfully in 'data/input.txt'") diff --git a/putilin_pavel_lab_2/docker-compose.yml b/putilin_pavel_lab_2/docker-compose.yml deleted file mode 100644 index d546578..0000000 --- a/putilin_pavel_lab_2/docker-compose.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: "3.9" -services: - data_generator: - image: python:3.10-slim - volumes: - - ./data_generator:/app - - ./data:/data - working_dir: /app - command: python data_gen.py - - worker_1: - build: - context: ./worker_1 - volumes: - - ./data:/data - depends_on: - - data_generator - - worker_2: - build: - context: ./worker_2 - volumes: - - ./data:/data - depends_on: - - worker_1 diff --git a/putilin_pavel_lab_2/worker_1/Dockerfile b/putilin_pavel_lab_2/worker_1/Dockerfile deleted file mode 100644 index e465753..0000000 --- a/putilin_pavel_lab_2/worker_1/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM python:3.10-slim -WORKDIR /app -COPY app.py /app -CMD ["python", "app.py"] diff --git a/putilin_pavel_lab_2/worker_1/app.py b/putilin_pavel_lab_2/worker_1/app.py deleted file mode 100644 index f4c6432..0000000 --- a/putilin_pavel_lab_2/worker_1/app.py +++ /dev/null @@ -1,12 +0,0 @@ -def process_data(input_file, output_file): - with open(input_file, "r") as f: - numbers = [int(line.strip()) for line in f.readlines()] - - processed_numbers = [n * 2 for n in numbers] - - with open(output_file, "w") as f: - f.write("\n".join(map(str, processed_numbers))) - -if __name__ == "__main__": - process_data("/data/input.txt", "/data/output_worker1.txt") - print("Worker 1 processing complete.") diff --git a/putilin_pavel_lab_2/worker_2/Dockerfile b/putilin_pavel_lab_2/worker_2/Dockerfile deleted file mode 100644 index e465753..0000000 --- a/putilin_pavel_lab_2/worker_2/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM python:3.10-slim -WORKDIR /app -COPY app.py /app -CMD ["python", "app.py"] diff --git a/putilin_pavel_lab_2/worker_2/app.py b/putilin_pavel_lab_2/worker_2/app.py deleted file mode 100644 index e72fb65..0000000 --- a/putilin_pavel_lab_2/worker_2/app.py +++ /dev/null @@ -1,9 +0,0 @@ -def calculate_sum(input_file): - with open(input_file, "r") as f: - numbers = [int(line.strip()) for line in f.readlines()] - - total = sum(numbers) - print(f"The sum of the processed numbers is: {total}") - -if __name__ == "__main__": - calculate_sum("/data/output_worker1.txt")