savenkov-av-lab-1 #3
25
README.md
25
README.md
@ -1 +1,24 @@
|
||||
Ссылка на видео объяснение: https://www.youtube.com/watch?v=TDqBSLfmutg
|
||||
# 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
|
87
labs/lab_1.md
Normal file
87
labs/lab_1.md
Normal file
@ -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**
|
||||
Система для обучения, на которой построена <https://lms.ulstu.ru>.
|
||||
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! Преподаватель может оставлять комментарии-замечания, которые необходимо будет исправлять.
|
108
labs/lab_2.md
Normal file
108
labs/lab_2.md
Normal file
@ -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`.
|
1
labs/lab_3.md
Normal file
1
labs/lab_3.md
Normal file
@ -0,0 +1 @@
|
||||
To be done
|
1
labs/lab_4.md
Normal file
1
labs/lab_4.md
Normal file
@ -0,0 +1 @@
|
||||
To be done
|
1
labs/lab_5.md
Normal file
1
labs/lab_5.md
Normal file
@ -0,0 +1 @@
|
||||
To be done
|
1
labs/lab_6.md
Normal file
1
labs/lab_6.md
Normal file
@ -0,0 +1 @@
|
||||
To be done
|
1
labs/lab_7.md
Normal file
1
labs/lab_7.md
Normal file
@ -0,0 +1 @@
|
||||
To be done
|
1
labs/lab_8.md
Normal file
1
labs/lab_8.md
Normal file
@ -0,0 +1 @@
|
||||
To be done
|
BIN
labs/vanilla_labs.pdf
Normal file
BIN
labs/vanilla_labs.pdf
Normal file
Binary file not shown.
1
savenkov_lab_1/README.md
Normal file
1
savenkov_lab_1/README.md
Normal file
@ -0,0 +1 @@
|
||||
Ссылка на видео объяснение: https://www.youtube.com/watch?v=TDqBSLfmutg
|
Loading…
Reference in New Issue
Block a user