# Лабораторная работа №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) ![](images/files.jpg "") ### 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 Создание контейнеров: ![](images/downloading.jpg "") *** ## *Результат:* ![](images/result-dockerhub.jpg "") ![](images/result-files.jpg "")