DAS_2023_1/simonov_nikita_lab_2
2024-01-21 19:17:15 +04:00
..
.idea simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
data simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
result simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
screens simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
worker-1 simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
worker-2 simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
docker-compose.yml simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00
README.md simonov nikita lab 2 ready 2024-01-21 19:17:15 +04:00

Лабораторная работа №2

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

Задачи:

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

Разработка двух приложений

Вариант первого приложения(worker-1): 5 - Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt Вариант второго приложения(worker-2): 1 - Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt

Структура проекта

Работа программы

  • Создание двух директорий: worker-1 и worker-2 для реализаций двух программ.
  • Описание Dockerfile для создания образов для обоих программ.

Docker файл для первого сервиса

# Используем образ с Java
FROM openjdk:21

# Создаем директории для данных и результата внутри контейнера
RUN mkdir /var/data
RUN mkdir /var/result

# Создаем директорию приложения внутри контейнера
WORKDIR /app

# Копируем исходные файлы вашего Java-приложения внутрь контейнера
COPY src /app/src

# Компилируем Java-код
RUN javac /app/src/FindShortestFileName.java

# Запускаем Java-приложение
CMD ["java", "-cp", "/app/src", "FindShortestFileName"]

Docker файл для второго сервиса

# Используем образ с Java
FROM openjdk:21

  # Создаем директории для данных и результата внутри контейнера
RUN mkdir /var/data
RUN mkdir /var/result

  # Создаем директорию приложения внутри контейнера
WORKDIR /app

  # Копируем исходные файлы вашего Java-приложения внутрь контейнера
COPY src /app/src

Компилируем Java-код
RUN javac /app/src/FindingLargestNumberFile.java

  # Запускаем Java-приложение
CMD ["java", "-cp", "/app/src", "FindingLargestNumberFile"]

Docker-compose

services:
  worker-1:
    build:
      context: /worker-1
      dockerfile: Dockerfile
    volumes:
      - D:\рил\simonov_nikita_lab_2\data:/var/data
      - D:\рил\simonov_nikita_lab_2\result:/var/result
  worker-2:
    build:
      context: /worker-2
      dockerfile: Dockerfile
    volumes:
      - D:\рил\simonov_nikita_lab_2\data:/var/data
      - D:\рил\simonov_nikita_lab_2\result:/var/result
    depends_on:
      - worker-1

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

После запуска контейнера создаются файлы data.txt и result.txt:

  • data.txt

  • result.txt

Запушенный контейнер

Ссылка на видео

https://drive.google.com/file/d/1kPXcYOX0bRmjzBbg8GBWp0JfFWb2rUGm/view?usp=sharing