DAS_2023_1/martysheva_tamara_lab_2/README.md

3.8 KiB
Raw Blame History

Лабораторная работа №2 - Разработка простейшего распределённого приложения

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

Задачи:

  • Согласно варианту (0 и 1) разработать два приложения такие, что результат первого является исходными данными для второго.
  • Изучить файлы сборки образов docker и разработать их для созданных приложений.
  • Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
  • Правильно закоммитить результат без лишних файлов.
  • Оформить pull request по правилам и отправить его на проверку.

Ход работы:

Разворачивание сервисов:

Были разработаны два приложения на ЯП java:

  • worker1 - ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt.
  • worker2 - ищет набольшее число из файла /var/result/data.txt и сохраняет его вторую степень в /var/result/result.txt.

Исходные файлы

Исходные файлы содержать различные числа и отсортированы по размеру.

В /var/result/data.txt должны скопироваться числа из наибольшего файла - 3.txt

В /var/result/result.txt должно записаться число 15 625 - квадрат максимального числа (125)

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"] #запуск java-приложения

docker-compose.yml

Был создан файл docker-compose.yml для разворачивания сервисов:

version: "3" #формат конфигурации Docker Compose версии 3
services: #определение сервисов
  worker1:
    build:
      context: /worker1 #путь к контексту сборки
      dockerfile: Dockerfile #имя докерфайла
    volumes:
      - .\var\data:/var/data #том для папки файлов
      - .\var\result:/var/result #том для папки результатов
  worker2:
    depends_on: #зависимость: worker2 не будет запущен, пока worker1 не завершит свой запуск
      - worker1
    build:
      context: /worker2 #путь к контексту сборки
      dockerfile: Dockerfile #имя докерфайла
    volumes:
      - .\var\result:/var/data #том для папки файлов
      - .\var\result:/var/result #том для папки результатов

docker-compose up -d

Создание контейнеров:


Результат: