# Лабораторная работа №2 - разработка простейшего распределенного приложения

## Разработанные приложения
- worker_0 - программа, которая создаст папки /var/data и сгенерирует в них изначальные данные
- worker_1 - 1я программа. Вариант 4: Формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data
- worker_2 - 2я программа. Вариант 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt

Все программы были разработаны на языке Python.

## DockerFile
Для каждого приложения был создан отдельный dockerfile, который позволяет нам создавать свои образы, на основе которых будут созданы контейнеры. Все файлы лежат в папках программ, описание имеет только dockerfile для `worker_0`, так как по структуре все они одинаковы

## DockerCompose
Для того, чтобы запустить все программы нам нужно создать `docker-compose.yml`, в котором определим как запускать наши сервисы. В отличие от 1й л/р в `docker-compose.yml` были добавлены команды `build`, которая позволяет нам указать путь до dockerfile нашего приложения, а также `depends_on`, которая позволяет установить порядок запусков сервисов. Более подробное описание `docker-compose.yml` находится в нем самом в качестве комментариев

## Как запустить
Для того, чтобы запустить наше распределенное приложение нужно выполнить несколько шагов
1) Запустить докер приложение. Я использую doker desktop.
2) Открыть терминал
3) перейти в папку, в которой лежит `docker-compose.yml`. Сделать это можно с помощью команды `cd`
3) Запустить команду: 
```
docker-compose up --build
```
После этого будут созданые контейнеры, которые построены на основе образов, указанных в `docker-compose.yml`. В терминале будут отабражено следующее:
```[+] Running 5/5
 ✔ Network morozov_vladimir_lab_2_default       Created
 ✔ Volume "morozov_vladimir_lab_2_data"         Created
 ✔ Container morozov_vladimir_lab_2-worker_0-1  Created
 ✔ Container morozov_vladimir_lab_2-worker_1-1  Created
 ✔ Container morozov_vladimir_lab_2-worker_2-1  Created
Attaching to worker_0-1, worker_1-1, worker_2-1
worker_0-1  | Start generating data
worker_0-1  | Create dir and files
worker_0-1 exited with code 0
worker_1-1  | Start first app
worker_1-1  | Create dir
worker_1-1 exited with code 0
worker_2-1  | Start second app
worker_2-1  | 0
worker_2-1 exited with code 0
```

## Запись тестирования
Работа приложения представлена в [видео](https://disk.yandex.ru/i/0KAySyP5eaBg0g)