diff --git a/labs/lab_2.md b/labs/lab_2.md index ee8cbf5..f13c79e 100644 --- a/labs/lab_2.md +++ b/labs/lab_2.md @@ -1 +1,108 @@ -To be done \ No newline at end of file +# Лабораторная работа №2 - Разработка простейшего распределённого приложения + +**Цель**: изучение техники создания простого распределённого приложения. + +**Задачи**: + +1. **Согласно вашему варианту** (выбирайте любой) разработать два приложения такие, что результат первого является исходными данными для второго. +2. Изучить файлы сборки образов docker и разработать их для созданных приложений. +3. Собрать файл `docker-compose.yml` для запуска приложений. + Разобраться с монтированием каталогов из хост-системы. +4. Правильно закоммитить результат без лишних файлов. +5. Оформить pull request по правилам и отправить его на проверку. + +## Разработка двух приложений + +Необходимо разработать 2 приложения согласно варианту. +Описание поиска своего варианта расположено ниже. + +Общее для всех вариантов: + +* Язык разработки приложений — любой. +* Содержимое исходных файлов - целые числа. +* Результат выполнения программы 2 необходимо дополнительно вывести на экран. + +> Автор советует использовать dotnet, java, go или python. + +Каждая программа должна лежать в отдельной подпапке в репозитории, например: `moiseev-vv-lab_2/worker-1` и `moiseev-vv-lab_2/worker-2`. + +## Добавление файлов сборки `Dockerfile` + +В каталоге с каждым приложением необходимо создать файл `Dockerfile`, где будут расположены инструкции по сборке образа с вашими приложениями. + +> Для многих языков программирования шаблоны `Dockerfile` можно найти в Интернете. + +В рамках задания необходимо расписать, за что отвечает каждая значимая строка в `Dockerfile`. +Хотя бы одном. + +Если у вас используется multi-stage build (как в примере выше, где в одном `Dockerfile` несколько конструкций `FROM`), необходимо расписать, зачем. + +## Формирование файла `docker-compose.yml` + +Необходимо в каталоге с вашей работой создать файл `docker-compose.yml`, чтобы можно было собрать и запустить программы следующей командой: + +``` +distributed-computing\tasks\moiseev-vv\lab_2$ docker compose up --build +``` + +> До `$` - каталог относительно корня репозитория, чтобы понять, откуда запускается `docker compose`. + +Необходимо, чтобы в файле было: + +1. Два сервиса. + Каждый соответствует вашим программам. +2. Объявлена директива `build` для каждого сервиса. +3. Была работа с монтированием папок. +4. Были описаны зависимости одного сервиса от другого. + +## Оформление отчёта + +Правила именования папки с отчётом и исходными текстами на примере `ivanov_ivan_lab_1`. + +## Коммит результата + +Перед началом работы над задачей необходимо актуализировать свой форк, выполненный в работе №1. + +Как это сделать зависит от конкретного хранилища git-репозиториев. + +> TODO: Так как всё-таки?! + +Также необходимо не забыть добавить файл `.gitignore` в каталог с вашей работой. +Если вы этого не сделаете, на коммит "полезут" файлы сборки и прочие вещи, который быть в публичном репозитории не должны. + +> Для `dotnet` файл `.gitignore` создаётся при помощи команды `dotnet new gitignore`. + +Правила именования ветки: `фамилия_инициалы_lab_номер`, например, `moiseev_vv_lab_2`. + +Все файлы, которые вы использовали в первой лабораторной работе и которые вам понадобятся во второй пожалуйста продублируйте в папку второй лабораторной работы, а после сделайте новую ветку для второй л/р также от master: + +``` +> git checkout master +> git checkout -b moiseev-vv-lab-2 +> mkdir moiseev-vv-lab-2 +> cd moisev-vv-lab-2 <--- вот сюда скопировать, и эту же папку коммитить, чтобы не нарушать ранее выполненную л/р +``` + +## Правила оформления pull request + +См. [тут](http://student.git.athene.tech/Alexey/IIS_2023_1/src/branch/main/README.md). + +## Варианты + +### Варианты программы 1: + +0. Ищет в каталоге `/var/data` самый большой по объёму файл и перекладывает его в `/var/result/data.txt`. +1. Ищет в каталоге `/var/data` файл с наибольшим количеством строк и перекладывает его в `/var/result/data.txt`. +2. Формирует файл `/var/result/data.txt` из первых строк всех файлов каталога `/var/data`. +3. Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество строк в файлах из каталога `/var/data`. +4. Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество символов в именах файлов из каталога `/var/data`. +5. Ищет в каталоге `/var/data` файл с самым коротким названием и перекладывает его в `/var/result/data.txt`. +6. Берёт из каталога `/var/data` случайный файл и перекладывает его в `/var/result/data.txt`. + +### Варианты программы 2: + +0. Сохраняет произведение первого и последнего числа из файла `/var/data/data.txt` в `/var/result/result.txt`. +1. Ищет набольшее число из файла `/var/data/data.txt` и сохраняет его вторую степень в `/var/result/result.txt`. +2. Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет его третью степень в `/var/result/result.txt`. +3. Ищет набольшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности в `/var/result/result.txt`. +4. Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности в `/var/result/result.txt`. \ No newline at end of file