diff --git a/kamyshov_danila_lab_2/README.md b/kamyshov_danila_lab_2/README.md
new file mode 100644
index 0000000..c39741c
--- /dev/null
+++ b/kamyshov_danila_lab_2/README.md
@@ -0,0 +1,84 @@
+# Лабораторная работа №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 для создания образов для обоих программ.
+
+
Worker-1 Dockerfile
+
+
+
+
Worker-2 Dockerfile
+
+
+- Содержимое в файлах в папке data
+
+
+
+
+
+
+
+
+
+- Описание docker-compose: запускает контейнеры, реализует build для создания образов на основе dockerfile и у второго контейнера описавыется зависимость depends_on от первого контейнера, чтобы сначала запустился первый контейнер, а за ним запустился второй. Также описываются volumes, для монтирование папок data и result в контейнеры.
+
+
docker-compose
+
+
+
+
Сборка и запуска контейнеров
+
+
+
+
Проверка в Docker Desktop контейнеров и образов
+
+
+
+
+
+
+
Смотрим консоль первого воркера
+
+
+
+
Смотрим консоль второго воркера
+
+
+
+
Смотрим результат работы контейнера, что в папке result создалось два файла data.txt и result.txt
+
+
+
+
Смотрим data.txt
+
+
+
+
Смотрим result.txt
+
+
+
+# Видео
+
+Видео с разбором лабораторной работы - https://drive.google.com/file/d/1LW_U75GK05_xYk9zd8RKpc-K6zeo4ZYJ/view?usp=sharing
diff --git a/kamyshov_danila_lab_2/data/awdafgergssdf.txt b/kamyshov_danila_lab_2/data/awdafgergssdf.txt
new file mode 100644
index 0000000..b744bf3
--- /dev/null
+++ b/kamyshov_danila_lab_2/data/awdafgergssdf.txt
@@ -0,0 +1,9 @@
+12
+45
+78
+23
+57
+80
+34
+67
+90
diff --git a/kamyshov_danila_lab_2/data/sdfwef.txt b/kamyshov_danila_lab_2/data/sdfwef.txt
new file mode 100644
index 0000000..1a683fd
--- /dev/null
+++ b/kamyshov_danila_lab_2/data/sdfwef.txt
@@ -0,0 +1,9 @@
+45
+78
+12
+98
+34
+67
+23
+56
+89
diff --git a/kamyshov_danila_lab_2/data/sgeagfdsfh.txt b/kamyshov_danila_lab_2/data/sgeagfdsfh.txt
new file mode 100644
index 0000000..8f7ffeb
--- /dev/null
+++ b/kamyshov_danila_lab_2/data/sgeagfdsfh.txt
@@ -0,0 +1,9 @@
+98
+65
+32
+87
+54
+21
+76
+43
+10
diff --git a/kamyshov_danila_lab_2/docker-compose.yml b/kamyshov_danila_lab_2/docker-compose.yml
new file mode 100644
index 0000000..1283698
--- /dev/null
+++ b/kamyshov_danila_lab_2/docker-compose.yml
@@ -0,0 +1,17 @@
+services:
+ worker-1:
+ build:
+ context: /worker-1
+ dockerfile: Dockerfile
+ volumes:
+ - D:\RVIP\kamyshov_danila_lab_2\data:/var/data
+ - D:\RVIP\kamyshov_danila_lab_2\result:/var/result
+ worker-2:
+ build:
+ context: /worker-2
+ dockerfile: Dockerfile
+ volumes:
+ - D:\RVIP\kamyshov_danila_lab_2\data:/var/data
+ - D:\RVIP\kamyshov_danila_lab_2\result:/var/result
+ depends_on:
+ - worker-1
\ No newline at end of file
diff --git a/kamyshov_danila_lab_2/screens/img1.png b/kamyshov_danila_lab_2/screens/img1.png
new file mode 100644
index 0000000..3fa8d45
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img1.png differ
diff --git a/kamyshov_danila_lab_2/screens/img10.png b/kamyshov_danila_lab_2/screens/img10.png
new file mode 100644
index 0000000..02ae3ec
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img10.png differ
diff --git a/kamyshov_danila_lab_2/screens/img11.png b/kamyshov_danila_lab_2/screens/img11.png
new file mode 100644
index 0000000..83577ec
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img11.png differ
diff --git a/kamyshov_danila_lab_2/screens/img12.png b/kamyshov_danila_lab_2/screens/img12.png
new file mode 100644
index 0000000..89d615d
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img12.png differ
diff --git a/kamyshov_danila_lab_2/screens/img13.png b/kamyshov_danila_lab_2/screens/img13.png
new file mode 100644
index 0000000..38dd263
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img13.png differ
diff --git a/kamyshov_danila_lab_2/screens/img14.png b/kamyshov_danila_lab_2/screens/img14.png
new file mode 100644
index 0000000..c241c45
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img14.png differ
diff --git a/kamyshov_danila_lab_2/screens/img15.png b/kamyshov_danila_lab_2/screens/img15.png
new file mode 100644
index 0000000..a18431b
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img15.png differ
diff --git a/kamyshov_danila_lab_2/screens/img2.png b/kamyshov_danila_lab_2/screens/img2.png
new file mode 100644
index 0000000..126af72
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img2.png differ
diff --git a/kamyshov_danila_lab_2/screens/img3.png b/kamyshov_danila_lab_2/screens/img3.png
new file mode 100644
index 0000000..31594e2
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img3.png differ
diff --git a/kamyshov_danila_lab_2/screens/img4.png b/kamyshov_danila_lab_2/screens/img4.png
new file mode 100644
index 0000000..3f744ac
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img4.png differ
diff --git a/kamyshov_danila_lab_2/screens/img5.png b/kamyshov_danila_lab_2/screens/img5.png
new file mode 100644
index 0000000..ff2dfdd
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img5.png differ
diff --git a/kamyshov_danila_lab_2/screens/img6.png b/kamyshov_danila_lab_2/screens/img6.png
new file mode 100644
index 0000000..82ea31e
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img6.png differ
diff --git a/kamyshov_danila_lab_2/screens/img7.png b/kamyshov_danila_lab_2/screens/img7.png
new file mode 100644
index 0000000..7b0f738
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img7.png differ
diff --git a/kamyshov_danila_lab_2/screens/img8.png b/kamyshov_danila_lab_2/screens/img8.png
new file mode 100644
index 0000000..f40bcc7
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img8.png differ
diff --git a/kamyshov_danila_lab_2/screens/img9.png b/kamyshov_danila_lab_2/screens/img9.png
new file mode 100644
index 0000000..de15232
Binary files /dev/null and b/kamyshov_danila_lab_2/screens/img9.png differ
diff --git a/kamyshov_danila_lab_2/worker-1/Dockerfile b/kamyshov_danila_lab_2/worker-1/Dockerfile
new file mode 100644
index 0000000..06c62f8
--- /dev/null
+++ b/kamyshov_danila_lab_2/worker-1/Dockerfile
@@ -0,0 +1,18 @@
+# Используем образ с 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"]
diff --git a/kamyshov_danila_lab_2/worker-1/src/FindShortestFileName.java b/kamyshov_danila_lab_2/worker-1/src/FindShortestFileName.java
new file mode 100644
index 0000000..7d57364
--- /dev/null
+++ b/kamyshov_danila_lab_2/worker-1/src/FindShortestFileName.java
@@ -0,0 +1,71 @@
+import java.io.IOException;
+import java.nio.file.*;
+import java.util.List;
+
+/**
+ * Программа для перемещения файла с самым коротким именем из одной директории в другую.
+ */
+public class FindShortestFileName {
+
+ /**
+ * Точка входа в программу.
+ */
+ public static void main(String[] args) {
+ // Указываем пути исходной и целевой директорий, а также путь результирующего файла
+ String sourceDirectory = "/var/data";
+ String destinationDirectory = "/var/result";
+ String resultFile = destinationDirectory + "/data.txt";
+
+ try {
+ // Получаем список файлов в исходной директории
+ List files = getFilesInDirectory(sourceDirectory);
+
+ if (!files.isEmpty()) {
+ // Находим файл с самым коротким именем
+ Path shortestFileName = findShortestFileName(files);
+
+ // Копируем найденный файл в целевую директорию
+ Files.copy(shortestFileName, Paths.get(resultFile), StandardCopyOption.REPLACE_EXISTING);
+
+ System.out.println("Файл " + shortestFileName.getFileName() + " был скопирован в " + resultFile);
+ } else {
+ System.out.println("В исходной директории нет файлов для копирования.");
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Получает список файлов в указанной директории.
+ *
+ * @param directory Путь к директории.
+ * @return Список файлов в директории.
+ * @throws IOException В случае ошибок при чтении директории.
+ */
+ private static List getFilesInDirectory(String directory) throws IOException {
+ try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(directory))) {
+ List fileList = new java.util.ArrayList<>();
+ for (Path entry : stream) {
+ fileList.add(entry);
+ }
+ return fileList;
+ }
+ }
+
+ /**
+ * Находит файл с самым коротким именем в списке.
+ *
+ * @param files Список файлов.
+ * @return Путь к файлу с самым коротким именем.
+ */
+ private static Path findShortestFileName(List files) {
+ Path shortestFile = files.get(0);
+ for (Path file : files) {
+ if (file.getFileName().toString().length() < shortestFile.getFileName().toString().length()) {
+ shortestFile = file;
+ }
+ }
+ return shortestFile;
+ }
+}
diff --git a/kamyshov_danila_lab_2/worker-1/worker-1.iml b/kamyshov_danila_lab_2/worker-1/worker-1.iml
new file mode 100644
index 0000000..d89d290
--- /dev/null
+++ b/kamyshov_danila_lab_2/worker-1/worker-1.iml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kamyshov_danila_lab_2/worker-2/Dockerfile b/kamyshov_danila_lab_2/worker-2/Dockerfile
new file mode 100644
index 0000000..8fca161
--- /dev/null
+++ b/kamyshov_danila_lab_2/worker-2/Dockerfile
@@ -0,0 +1,18 @@
+# Используем образ с 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"]
diff --git a/kamyshov_danila_lab_2/worker-2/src/FindingLargestNumberFile.java b/kamyshov_danila_lab_2/worker-2/src/FindingLargestNumberFile.java
new file mode 100644
index 0000000..e1007c6
--- /dev/null
+++ b/kamyshov_danila_lab_2/worker-2/src/FindingLargestNumberFile.java
@@ -0,0 +1,56 @@
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * Программа для поиска наибольшего числа в файле, вычисления его второй степени и сохранения результата в другом файле.
+ */
+public class FindingLargestNumberFile {
+
+ /**
+ * Точка входа в программу.
+ */
+ public static void main(String[] args) {
+ // Указываем пути к исходному и результативному файлам
+ String sourceFilePath = "/var/result/data.txt";
+ String resultFilePath = "/var/result/result.txt";
+
+ try (BufferedReader reader = new BufferedReader(new FileReader(sourceFilePath))) {
+ String line;
+ double largestNumber = Double.MIN_VALUE;
+
+ // Читаем файл построчно и находим наибольшее число
+ while ((line = reader.readLine()) != null) {
+ try {
+ double number = Double.parseDouble(line);
+ if (number > largestNumber) {
+ largestNumber = number;
+ }
+ } catch (NumberFormatException e) {
+ // Пропускаем строки, которые не могут быть преобразованы в числа
+ }
+ }
+
+ if (largestNumber != Double.MIN_VALUE) {
+ // Вычисляем вторую степень наибольшего числа
+ double square = Math.pow(largestNumber, 2);
+
+ // Записываем результат в новый файл
+ try (FileWriter writer = new FileWriter(resultFilePath)) {
+ writer.write(Double.toString(square));
+ }
+
+ // Выводим результаты на экран
+ System.out.println("Наибольшее число в файле: " + largestNumber);
+ System.out.println("Вторая степень наибольшего числа: " + square);
+ System.out.println("Результат сохранен в " + resultFilePath);
+ } else {
+ System.out.println("Файл не содержит чисел.");
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/kamyshov_danila_lab_2/worker-2/worker-2.iml b/kamyshov_danila_lab_2/worker-2/worker-2.iml
new file mode 100644
index 0000000..9facd37
--- /dev/null
+++ b/kamyshov_danila_lab_2/worker-2/worker-2.iml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file