DAS_2023_1/belyaeva_ekaterina_lab_2/README.md
2024-01-11 20:08:33 +04:00

81 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №2
## Задание
Цель: изучение техники создания простого распределённого приложения.
Задачи:
- Согласно варианту (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 копируются числа из первых строк каждого файла - 1, 10, 5
В /var/result/result.txt записывается число 100 - квадрат наибольшего числа - 10
Содержимое всех файлов показано в видео.
### Dockerfile
Для лр были созданы идентичные докер-файлы в обоих проектах:
```
FROM openjdk:17
LABEL authors="tauri"
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 - выбор базового образа
- LABEL - метка, что автор - tauri
- 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 #том для папки результатов
```
Работоспособность и то, что контейнеры были успешно развернуты показано в видео: [lab2.mp4](lab2.mp4)