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