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

4.0 KiB
Raw Blame History

Лабораторная работа №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