DAS_2023_1/kutygin_andrey_lab_2/README.md

3.8 KiB
Raw Permalink Blame History

Задание


Цель: изучение техники создания простого распределённого приложения.

Задачи


Согласно варианту (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