# Лабораторная работа №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 ## Структура проекта ![](/screens/Screenshot_1.png) # Работа программы - Создание двух директорий: worker-1 и worker-2 для реализаций двух программ. - Описание Dockerfile для создания образов для обоих программ. ## Docker файл для первого сервиса ```yml # Используем образ с 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 файл для второго сервиса ```yml # Используем образ с 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 ```yml 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 ``` ## Исходные файлы ![](/screens/Screenshot_5.png) ## После запуска контейнера создаются файлы `data.txt` и `result.txt`: ![](/screens/Screenshot_2.png) - `data.txt` ![](/screens/Screenshot_3.png) - `result.txt` ![](/screens/Screenshot_4.png) # Запушенный контейнер ![](/screens/Screenshot_6.png) # Ссылка на видео https://drive.google.com/file/d/1kPXcYOX0bRmjzBbg8GBWp0JfFWb2rUGm/view?usp=sharing