diff --git a/kutygin_andrey_lab_1/.idea/workspace.xml b/kutygin_andrey_lab_1/.idea/workspace.xml
new file mode 100644
index 0000000..ea6c570
--- /dev/null
+++ b/kutygin_andrey_lab_1/.idea/workspace.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1704436409086
+
+
+ 1704436409086
+
+
+
+
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/.idea/.gitignore b/kutygin_andrey_lab_2/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/kutygin_andrey_lab_2/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/kutygin_andrey_lab_2/.idea/jpa-buddy.xml b/kutygin_andrey_lab_2/.idea/jpa-buddy.xml
new file mode 100644
index 0000000..966d5f5
--- /dev/null
+++ b/kutygin_andrey_lab_2/.idea/jpa-buddy.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/.idea/misc.xml b/kutygin_andrey_lab_2/.idea/misc.xml
new file mode 100644
index 0000000..cac8158
--- /dev/null
+++ b/kutygin_andrey_lab_2/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/.idea/modules.xml b/kutygin_andrey_lab_2/.idea/modules.xml
new file mode 100644
index 0000000..73acb93
--- /dev/null
+++ b/kutygin_andrey_lab_2/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/README.md b/kutygin_andrey_lab_2/README.md
new file mode 100644
index 0000000..50511aa
--- /dev/null
+++ b/kutygin_andrey_lab_2/README.md
@@ -0,0 +1,121 @@
+**Задание**
+***
+Цель: изучение техники создания простого распределённого приложения.
+
+**Задачи**
+***
+
+Согласно варианту (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 проверяются числа из каждого файла и выбирается самое большое
+
+**Firsttxt.txt:**
+1
+2
+3
+4
+5
+
+**Secondtxt.txt**
+1
+2
+3
+
+**Thirdtxt.txt**
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
+В /var/result/result.txt записывается число 100 - квадрат наибольшего числа - 10
+
+**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"]
+````
+
+FROM - выбор базового образа
+
+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 #том для папки результатов
+````
+
+Видео: https://disk.yandex.ru/d/jpeOKQ_PAO0c0Q
diff --git a/kutygin_andrey_lab_2/docker-compose.yml b/kutygin_andrey_lab_2/docker-compose.yml
new file mode 100644
index 0000000..2fd2818
--- /dev/null
+++ b/kutygin_andrey_lab_2/docker-compose.yml
@@ -0,0 +1,18 @@
+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 #том для папки результатов
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/kutygin_andrey_lab_2.iml b/kutygin_andrey_lab_2/kutygin_andrey_lab_2.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/kutygin_andrey_lab_2/kutygin_andrey_lab_2.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/var/data/Firsttxt.txt b/kutygin_andrey_lab_2/var/data/Firsttxt.txt
new file mode 100644
index 0000000..85954ea
--- /dev/null
+++ b/kutygin_andrey_lab_2/var/data/Firsttxt.txt
@@ -0,0 +1,5 @@
+1
+2
+3
+4
+5
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/var/data/Secondtxt.txt b/kutygin_andrey_lab_2/var/data/Secondtxt.txt
new file mode 100644
index 0000000..01e79c3
--- /dev/null
+++ b/kutygin_andrey_lab_2/var/data/Secondtxt.txt
@@ -0,0 +1,3 @@
+1
+2
+3
diff --git a/kutygin_andrey_lab_2/var/data/Thirdtxt.txt b/kutygin_andrey_lab_2/var/data/Thirdtxt.txt
new file mode 100644
index 0000000..0b669b6
--- /dev/null
+++ b/kutygin_andrey_lab_2/var/data/Thirdtxt.txt
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/var/result/data.txt b/kutygin_andrey_lab_2/var/result/data.txt
new file mode 100644
index 0000000..0b669b6
--- /dev/null
+++ b/kutygin_andrey_lab_2/var/result/data.txt
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/var/result/result.txt b/kutygin_andrey_lab_2/var/result/result.txt
new file mode 100644
index 0000000..e772e62
--- /dev/null
+++ b/kutygin_andrey_lab_2/var/result/result.txt
@@ -0,0 +1 @@
+100.0
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/worker_1/Dockerfile b/kutygin_andrey_lab_2/worker_1/Dockerfile
new file mode 100644
index 0000000..499807d
--- /dev/null
+++ b/kutygin_andrey_lab_2/worker_1/Dockerfile
@@ -0,0 +1,11 @@
+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"]
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/worker_1/src/Main.java b/kutygin_andrey_lab_2/worker_1/src/Main.java
new file mode 100644
index 0000000..2341fd7
--- /dev/null
+++ b/kutygin_andrey_lab_2/worker_1/src/Main.java
@@ -0,0 +1,40 @@
+import java.io.*;
+import java.nio.file.*;
+
+//Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt.
+public class Main {
+ private static Path findLargestFile(DirectoryStream stream) throws IOException {
+ long maxSize = 0;
+ Path largestFile = null;
+
+ for (Path file : stream) {
+ long size = Files.size(file);
+ if (size > maxSize) {
+ maxSize = size;
+ largestFile = file;
+ }
+ }
+
+ return largestFile;
+ }
+
+ public static void main(String[] args) {
+ Path dataDir = Path.of("/var/data");
+ Path resultDir = Path.of("/var/result");
+
+ try (DirectoryStream stream = Files.newDirectoryStream(dataDir)) {
+ Path largestFile = findLargestFile(stream);
+
+ if (largestFile != null) {
+ Files.createFile(resultDir.resolve("data.txt"));
+ Files.copy(largestFile, resultDir.resolve("data.txt"), StandardCopyOption.REPLACE_EXISTING);
+ System.out.println(largestFile.getFileName() + " перемещён");
+ } else {
+ System.out.println("Файл не найден");
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/worker_2/Dockerfile b/kutygin_andrey_lab_2/worker_2/Dockerfile
new file mode 100644
index 0000000..499807d
--- /dev/null
+++ b/kutygin_andrey_lab_2/worker_2/Dockerfile
@@ -0,0 +1,11 @@
+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"]
\ No newline at end of file
diff --git a/kutygin_andrey_lab_2/worker_2/src/Main.java b/kutygin_andrey_lab_2/worker_2/src/Main.java
new file mode 100644
index 0000000..9b7f2df
--- /dev/null
+++ b/kutygin_andrey_lab_2/worker_2/src/Main.java
@@ -0,0 +1,50 @@
+import java.io.*;
+import java.nio.file.*;
+import java.util.*;
+
+//Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt.
+public class Main {
+ public static void main(String[] args) {
+ Path dataFile = Path.of("/var/result/data.txt");
+ Path resultFile = Path.of("/var/result/result.txt");
+
+ try {
+ if (!Files.exists(dataFile)) {
+ System.out.println("Файл data.txt не существует");
+ return;
+ }
+
+ List numbers = readNumbersFromFile(dataFile);
+ int maxNumber = findMaxNumber(numbers);
+
+ try (BufferedWriter writer = Files.newBufferedWriter(resultFile)) {
+ writer.write(String.valueOf(Math.pow(maxNumber,2)));
+ }
+
+ System.out.println("квадрат наибольшего числа " + Math.pow(maxNumber,2));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private static List readNumbersFromFile(Path dataFile) throws IOException {
+ List numbers = new ArrayList<>();
+ try (BufferedReader reader = Files.newBufferedReader(dataFile)) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ numbers.add(Integer.parseInt(line));
+ }
+ }
+ return numbers;
+ }
+
+ private static int findMaxNumber(List numbers) {
+ int maxNumber = Integer.MIN_VALUE;
+ for (int number : numbers) {
+ if (number > maxNumber) {
+ maxNumber = number;
+ }
+ }
+ return maxNumber;
+ }
+}
\ No newline at end of file