DAS_2023_1/kutygin_andrey_lab_2/README.md

122 lines
3.8 KiB
Markdown
Raw Permalink Normal View History

2024-01-16 12:09:03 +04:00
**Задание**
***
Цель: изучение техники создания простого распределённого приложения.
**Задачи**
***
Согласно варианту (0 и 1) разработать два приложения такие, что результат первого является исходными данными для второго.
Изучить файлы сборки образов docker и разработать их для созданных приложений.
Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
Правильно закоммитить результат без лишних файлов.
Оформить pull request по правилам и отправить его на проверку.
**Ход работы**
***
**Разворачивание сервисов:**
***
Были разработаны два приложения на java:
worker-1 - Формирует файл /var/result/data.txt из файла, где было найдено самое большое число /var/data.
worker-2 - Ищет набольшее число из файла /var/result/data.txt и сохраняет его вторую степень в /var/result/result.txt.
**Исходные файлы**
Исходные файлы содержат целые числа.
В /var/result/data.txt проверяются числа из каждого файла и выбирается самое большое
**Firsttxt.txt:**
1
2
3
4
5
**Secondtxt.txt**
1
2
3
**Thirdtxt.txt**
1
2
3
4
5
6
7
8
9
10
В /var/result/result.txt записывается число 100 - квадрат наибольшего числа - 10
**Dockerfile**
Для данной работы были созданы идентичные докер-файлы в обоих проектах.
````
FROM openjdk:17
RUN mkdir /var/data
RUN mkdir /var/result
WORKDIR /app
COPY src /app/src
RUN javac /app/src/Main.java
CMD ["java", "-cp", "/app/src", "Main"]
````
FROM - выбор базового образа
RUN - создание директории внутри контейнера
WORKDIR - установка рабочей директории для последующих команд
COPY - копирование содержимого директории внутрь контейнера
RUN - компиляция исходного кода Main.java внутри контейнера
CMD - определение команды, которая выполняется при запуске контейнера. В данном случае происходит запуск программы на java и указывается пусть до Main.java
**docker-compose.yml**
````
version: "3" #формат конфигурации Docker Compose версии 3
services: #определение сервисов
worker1:
build:
context: /worker-1 #путь к контексту сборки
dockerfile: Dockerfile #имя докерфайла
volumes:
- .\var\data:/var/data #том для папки файлов
- .\var\result:/var/result #том для папки результатов
worker2:
- depends_on: #зависимость: worker2 не будет запущен, пока worker1 не завершит свой запуск
worker1
build:
context: /worker-2 #путь к контексту сборки
- dockerfile: Dockerfile #имя докерфайла
- volumes:
- .\var\result:/var/data #том для папки файлов
- .\var\result:/var/result #том для папки результатов
````
Видео: https://disk.yandex.ru/d/jpeOKQ_PAO0c0Q