diff --git a/README.md b/README.md index befb1c6..9277fb9 100644 --- a/README.md +++ b/README.md @@ -1 +1,24 @@ -Ссылка на видео объяснение: https://www.youtube.com/watch?v=TDqBSLfmutg \ No newline at end of file +# DAS_2023_1 + +ПРАВИЛА ИГРЫ при сдаче лабораторных работ по предмету "Распределенные вычисления и приложения". + +Всем Доброго времени суток! Настоятельно прошу прочитать этот файл от начала и до конца. + +0. Правила игры аналогичны правилам из репозитория [IIS_2023_1](http://student.git.athene.tech/Alexey/IIS_2023_1/src/branch/main/README.md). +1. Единственное отличие - это лабораторные работы. Вы можете выбрать лабораторные работы, подготовленные Валерией Вадимовной (вот [файл](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/vanilla_labs.pdf)) или подготовленные в файлах ```lab_1.md```, ```lab_2.md``` и так далее. Вторая группа лабораторных попроще, но если в рамках цикла л/р вы делаете будущий диплом, то логичнее выбрать первый вариант. +2. Если Вы выбираете первый вариант л/р, то пожалуйста отмечайте папку тегом ```zhelepov_lab_1_vanilla``` или не помечайте никак, если Вы выбрали второй цикл л/р. +3. Пожалуйста запишите работоспособность Вашей л/р в виде видео, ссылку на которое прикрепите к README-отчету (разместить видео можно на платформе VK Видео). Видео - это обязательный пункт. + +БОЛЬШОЕ СПАСИБО, что дочитали этот README до конца! И Удачи Вам в сдаче л/р и не только! + +Обратите внимание на пункт 2, вот список заданий от Валерии Вадимовны. +Или вот лабораторные работы, которые мы подготовили с Владиславом: + +1. [Знакомство с docker и docker-compose](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_1.md) +2. [Разработка простейшего распределённого приложения](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_2.md) +3. TBD +4. TBD +5. TBD +6. TBD +7. TBD +8. TBD \ No newline at end of file diff --git a/labs/lab_1.md b/labs/lab_1.md new file mode 100644 index 0000000..d2867c3 --- /dev/null +++ b/labs/lab_1.md @@ -0,0 +1,87 @@ +# Лабораторная работа №1 - Знакомство с docker и docker-compose + +**Цель**: изучение современных технологий контейнеризации. + +**Задачи**: + +1. Установить средство контейнеризации docker. +2. Изучить применение и принципы docker. +3. Изучить утилиту docker-compose и структуру файла docker-compose.yml. +4. Развернуть не менее 3х различных сервисов при помощи docker-compose. +5. Оформить отчёт в формате Markdown и создать Pull Request в git-репозитории. + +## Установка docker + +Для систем с графическим дисплеем рекомендуется устанавливать Docker Desktop, т.к. это средство позволяет максимально легко установить docker с графическим управлением в ОС. + +Если же установка Docker Desktop для Вашей системы не применима, можно установить отдельно docker engine и, например, расширение Docker для Visual Studio Code. + +## Принципы docker + +1. Переменные окружения для запуска приложений. +2. Монтирование директорий в linux и других подобный ОС. +3. Отличие контейнера от виртуальной машины. +4. Что такое образ (image) в docker, и в чём отличие от контейнера (container). +5. Что такое Docker Hub. +6. Что такое раздел/том (volume), и как это помогает обмениваться файлами между контейнерами или с хостом (host). +7. Зачем нужно отображение портов из контейнера в хост. + +## Изучение docker-compose + +В рамках этого пункта необходимо понять, что такое docker-compose и конфигурационный файл _docker-compose.yml_. + +Также в этом разделе изучите формат записи YAML, т.к. это **сильно** поможет в будущем. + +## Разворачивание сервисов + +Предлагается развернуть не менее 3х сервисов через docker-compose из списка ниже: + +1. **mediawiki** + Движок вики. +2. **redmine** + Система учёта багов, т.е. баг-трекер. +3. **wordpress** + Популярная система управления контентом. +4. **drupal** + Ещё одна популярная система управления контентом. +5. **moodle** + Система для обучения, на которой построена . +6. **gitea** + Сервис для хранения репозиториев git, на котором работает этот репозиторий. + +> Можно вбить в поисковый движок фразу "%service_name% docker-compose", и вы удивитесь, что, скорее всего, найдёте ответ. + +Требования и docker-compose: + +* Несколько контейнеров. +* Хотя бы один volume. +* Хотя бы один порт, проброшенный на хост. + +При этом разворачивание системы должно пройти до конца. +Например, должен быть создан администратор и система должна корректно функционировать. +Это необходимо будет предоставить в отчёте, поэтому не забывайте делать скриншоты. + +## Оформление отчёта + +Существует множество форматов для разметки текста. +Например, HTML или TeX. +Наряду с ними существует формат **Markdown**, который используется достаточно часто, особенно в репозиториях git, чтобы его изучить. + +Необходимо написать отчёт с примерами содержимого _docker-compose.yml_ и скриншотами по каждому выбранному сервису. + +После содержимого _docker-compose.yml_ в тексте отчёта необходимо написать, что за что там отвечает. +Например, _«определяется volume «db», который затем монтируется в директорию «/var/database» контейнера «database». Контейнер «database» запускается из образа «postgresql:latest» из Docker Hub»_ и т.д. +Можно также оставлять комментарии прямиком в yml-файле через `#`. + +Для оформления отчёта необходимо форкнуть (fork) к себе в профиль этот репозиторий. + +После клонирования созданного репозитория к себе на рабочий ПК необходимо создать и переключиться на ветку в формате `фамилия-инициалы-lab-номер`, например, `moiseev-vv-lab-1`. + +После этого отчёт и скриншоты необходимо положить в специальную папку в формате `/tasks/фамилия-инициалы/lab_номер`, например, `/tasks/moiseev-vv/lab_1`. +Пример уже есть в этом репозитории. + +После отправки вашей ветки в git-репозиторий (`git push`) необходимо оформить **Pull Request** из вашей ветки в main основного репозитория для того, что ваши изменения прошли ревью и были приняты. + +Лабораторная работа считается выполненной, если ваш PR будет влит в основную ветвь основного репозитория. + +Следите за вашим Pull Request! Преподаватель может оставлять комментарии-замечания, которые необходимо будет исправлять. \ No newline at end of file diff --git a/labs/lab_2.md b/labs/lab_2.md new file mode 100644 index 0000000..f13c79e --- /dev/null +++ b/labs/lab_2.md @@ -0,0 +1,108 @@ +# Лабораторная работа №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 diff --git a/labs/lab_3.md b/labs/lab_3.md new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/labs/lab_3.md @@ -0,0 +1 @@ +To be done \ No newline at end of file diff --git a/labs/lab_4.md b/labs/lab_4.md new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/labs/lab_4.md @@ -0,0 +1 @@ +To be done \ No newline at end of file diff --git a/labs/lab_5.md b/labs/lab_5.md new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/labs/lab_5.md @@ -0,0 +1 @@ +To be done \ No newline at end of file diff --git a/labs/lab_6.md b/labs/lab_6.md new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/labs/lab_6.md @@ -0,0 +1 @@ +To be done \ No newline at end of file diff --git a/labs/lab_7.md b/labs/lab_7.md new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/labs/lab_7.md @@ -0,0 +1 @@ +To be done \ No newline at end of file diff --git a/labs/lab_8.md b/labs/lab_8.md new file mode 100644 index 0000000..ee8cbf5 --- /dev/null +++ b/labs/lab_8.md @@ -0,0 +1 @@ +To be done \ No newline at end of file diff --git a/labs/vanilla_labs.pdf b/labs/vanilla_labs.pdf new file mode 100644 index 0000000..473fdc7 Binary files /dev/null and b/labs/vanilla_labs.pdf differ diff --git a/savenkov_lab_1/README.md b/savenkov_lab_1/README.md new file mode 100644 index 0000000..befb1c6 --- /dev/null +++ b/savenkov_lab_1/README.md @@ -0,0 +1 @@ +Ссылка на видео объяснение: https://www.youtube.com/watch?v=TDqBSLfmutg \ No newline at end of file