diff --git a/podkorytova_yulia_lab_2/README.md b/podkorytova_yulia_lab_2/README.md new file mode 100644 index 0000000..5717a61 --- /dev/null +++ b/podkorytova_yulia_lab_2/README.md @@ -0,0 +1,90 @@ +# Лабораторная работа 2. Разработка простейшего распределённого приложения +### Задание на лабораторную работу +1. Согласно варианту разработать два приложения такие, что результат первого является исходными данными для второго. +2. Изучить файлы сборки образов docker и разработать их для созданных приложений. +3. Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы. + +**Программа 1:** +Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt. + +**Программы 2:** +Ищет наименьшее число из файла /var/result/data.txt и сохраняет количество таких чисел из последовательности в /var/result/result.txt. + +*** +### Как запустить лабораторную работу +Для сборки и запуска программ необходимо перейти в директорию с файлом `docker-compose.yaml` и выполнить команду: +``` +docker compose up --build +``` +*** +### Описание работы +Содержимое `Dockerfile` для сервиса `worker-1`: +``` +# использование образа java +FROM openjdk:17 + +# создание директорий для файлов +RUN mkdir /var/data +RUN mkdir /var/result + +# установка рабочей директории проекта +WORKDIR /app + +# копирование исходных файлов +COPY src /app/src + +# компиляция +RUN javac /app/src/App1.java + +# запуск java-приложения +CMD ["java", "-cp", "/app/src", "App1"] +``` +Аналогично был составлен `Dockerfile` для сервиса `worker-2`. + +Файл `docker-compose.yml` содержит: +- 2 сервиса (worker-1, worker-2); +- директиву build для каждого сервиса; +- монтирование папок; +- зависимость одного сервиса от другого. +``` +version: '3' + +services: + worker-1: # название 1 сервиса + build: # директива build для сборки образа + context: /worker-1 + dockerfile: Dockerfile + volumes: # монтирование папок + - .\data:/var/data + - .\result:/var/result + + worker-2: # название 2 сервиса + build: # директива build для сборки образа + context: /worker-2 + dockerfile: Dockerfile + depends_on: # зависимость сервисов + - worker-1 + volumes: # монтирование папок + - .\data:/var/data + - .\result:/var/result +``` + +*** +### Скриншоты +***Исходные файлы*** +![](images/files.jpg) + +***Результаты сборки и запуска программ в консоли*** +![](images/console.jpg) + +***Dockerhub*** +![](images/dockerhub.jpg) + +***Результат выполнения программы 2, выведенный на экран*** +![](images/result.jpg) + +***Файлы `data.txt` и `result.txt`*** +![](images/files_res.jpg) + +### Ссылка на видео: +https://drive.google.com/file/d/13WUxSGgQjvusT40UQc1C3ZOVk4-PX9oH/view?usp=sharing \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/data/file1.txt b/podkorytova_yulia_lab_2/data/file1.txt new file mode 100644 index 0000000..d7bc13a --- /dev/null +++ b/podkorytova_yulia_lab_2/data/file1.txt @@ -0,0 +1,8 @@ +84 +6 +56 +4 +32 +47 +4 +62 \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/data/file_two.txt b/podkorytova_yulia_lab_2/data/file_two.txt new file mode 100644 index 0000000..d98b0f2 --- /dev/null +++ b/podkorytova_yulia_lab_2/data/file_two.txt @@ -0,0 +1,6 @@ +1 +65 +93 +91 +20 +62 \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/data/file_with_numbers.txt b/podkorytova_yulia_lab_2/data/file_with_numbers.txt new file mode 100644 index 0000000..c3c50ff --- /dev/null +++ b/podkorytova_yulia_lab_2/data/file_with_numbers.txt @@ -0,0 +1,6 @@ +43 +60 +31 +13 +2 +87 \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/docker-compose.yml b/podkorytova_yulia_lab_2/docker-compose.yml new file mode 100644 index 0000000..6561e20 --- /dev/null +++ b/podkorytova_yulia_lab_2/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' + +services: + worker-1: # название 1 сервиса + build: # директива build для сборки образа + context: /worker-1 + dockerfile: Dockerfile + volumes: # монтирование папок + - .\data:/var/data + - .\result:/var/result + + worker-2: # название 2 сервиса + build: # директива build для сборки образа + context: /worker-2 + dockerfile: Dockerfile + depends_on: # зависимость сервисов + - worker-1 + volumes: # монтирование папок + - .\data:/var/data + - .\result:/var/result \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/images/console.JPG b/podkorytova_yulia_lab_2/images/console.JPG new file mode 100644 index 0000000..3601a4f Binary files /dev/null and b/podkorytova_yulia_lab_2/images/console.JPG differ diff --git a/podkorytova_yulia_lab_2/images/dockerhub.JPG b/podkorytova_yulia_lab_2/images/dockerhub.JPG new file mode 100644 index 0000000..62ea581 Binary files /dev/null and b/podkorytova_yulia_lab_2/images/dockerhub.JPG differ diff --git a/podkorytova_yulia_lab_2/images/files.JPG b/podkorytova_yulia_lab_2/images/files.JPG new file mode 100644 index 0000000..6dca07b Binary files /dev/null and b/podkorytova_yulia_lab_2/images/files.JPG differ diff --git a/podkorytova_yulia_lab_2/images/files_res.JPG b/podkorytova_yulia_lab_2/images/files_res.JPG new file mode 100644 index 0000000..0ac9fd8 Binary files /dev/null and b/podkorytova_yulia_lab_2/images/files_res.JPG differ diff --git a/podkorytova_yulia_lab_2/images/result.JPG b/podkorytova_yulia_lab_2/images/result.JPG new file mode 100644 index 0000000..0bfea2c Binary files /dev/null and b/podkorytova_yulia_lab_2/images/result.JPG differ diff --git a/podkorytova_yulia_lab_2/result/data.txt b/podkorytova_yulia_lab_2/result/data.txt new file mode 100644 index 0000000..d7bc13a --- /dev/null +++ b/podkorytova_yulia_lab_2/result/data.txt @@ -0,0 +1,8 @@ +84 +6 +56 +4 +32 +47 +4 +62 \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/result/result.txt b/podkorytova_yulia_lab_2/result/result.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/podkorytova_yulia_lab_2/result/result.txt @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/worker-1/Dockerfile b/podkorytova_yulia_lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..79281ff --- /dev/null +++ b/podkorytova_yulia_lab_2/worker-1/Dockerfile @@ -0,0 +1,18 @@ +# использование образа java +FROM openjdk:17 + +# создание директорий для файлов +RUN mkdir /var/data +RUN mkdir /var/result + +# установка рабочей директории проекта +WORKDIR /app + +# копирование исходных файлов +COPY src /app/src + +# компиляция +RUN javac /app/src/App1.java + +# запуск java-приложения +CMD ["java", "-cp", "/app/src", "App1"] \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/worker-1/src/App1.java b/podkorytova_yulia_lab_2/worker-1/src/App1.java new file mode 100644 index 0000000..54890f9 --- /dev/null +++ b/podkorytova_yulia_lab_2/worker-1/src/App1.java @@ -0,0 +1,32 @@ +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; + +public class App1 { + public static void main(String[] args) { + File dataDirectory = new File("/var/data"); + File[] files = dataDirectory.listFiles(); + + if (files.length > 0) { + File shortestFileName = files[0]; + for (File file : files) { + if (file.getName().length() < shortestFileName.getName().length()) { + shortestFileName = file; + } + } + + Path sourcePath = shortestFileName.toPath(); + Path destinationPath = new File("/var/result/data.txt").toPath(); + try { + Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING); + System.out.println("Файл успешно перемещен."); + } catch (IOException e) { + System.out.println("Ошибка при перемещении файла: " + e.getMessage()); + } + } else { + System.out.println("Каталог /var/data пустой."); + } + } +} \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/worker-2/Dockerfile b/podkorytova_yulia_lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..2e766f7 --- /dev/null +++ b/podkorytova_yulia_lab_2/worker-2/Dockerfile @@ -0,0 +1,18 @@ +# использование образа java +FROM openjdk:17 + +# создание директорий для файлов +RUN mkdir /var/data +RUN mkdir /var/result + +# установка рабочей директории проекта +WORKDIR /app + +# копирование исходных файлов +COPY src /app/src + +# компиляция +RUN javac /app/src/App2.java + +# запуск java-приложения +CMD ["java", "-cp", "/app/src", "App2"] \ No newline at end of file diff --git a/podkorytova_yulia_lab_2/worker-2/src/App2.java b/podkorytova_yulia_lab_2/worker-2/src/App2.java new file mode 100644 index 0000000..4fb4349 --- /dev/null +++ b/podkorytova_yulia_lab_2/worker-2/src/App2.java @@ -0,0 +1,34 @@ +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; + +public class App2 { + public static void main(String[] args) { + String inputFile = "/var/result/data.txt"; + String outputFile = "/var/result/result.txt"; + + try (BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + FileWriter writer = new FileWriter(outputFile)) { + + String line; + int smallestNumber = Integer.MAX_VALUE; + int count = 0; + + while ((line = reader.readLine()) != null) { + int number = Integer.parseInt(line); + if (number < smallestNumber) { + smallestNumber = number; + count = 1; + } else if (number == smallestNumber) { + count++; + } + } + + writer.write(String.valueOf(count)); + System.out.println("Количество чисел, равных наименьшему значению: " + count); + } catch (IOException e) { + System.out.println("Ошибка при обработке файла: " + e.getMessage()); + } + } +} \ No newline at end of file