75 lines
4.7 KiB
Markdown
75 lines
4.7 KiB
Markdown
|
# Лабораторная работа №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
|