122 lines
3.8 KiB
Markdown
122 lines
3.8 KiB
Markdown
|
**Задание**
|
|||
|
***
|
|||
|
Цель: изучение техники создания простого распределённого приложения.
|
|||
|
|
|||
|
**Задачи**
|
|||
|
***
|
|||
|
|
|||
|
Согласно варианту (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
|