belyaeva lab2 ready #112
81
belyaeva_ekaterina_lab_2/README.md
Normal file
81
belyaeva_ekaterina_lab_2/README.md
Normal file
@ -0,0 +1,81 @@
|
||||
# Лабораторная работа №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)
|
18
belyaeva_ekaterina_lab_2/docker-compose.yml
Normal file
18
belyaeva_ekaterina_lab_2/docker-compose.yml
Normal file
@ -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 #том для папки результатов
|
BIN
belyaeva_ekaterina_lab_2/lab2.mp4
Normal file
BIN
belyaeva_ekaterina_lab_2/lab2.mp4
Normal file
Binary file not shown.
7
belyaeva_ekaterina_lab_2/var/data/txt1.txt
Normal file
7
belyaeva_ekaterina_lab_2/var/data/txt1.txt
Normal file
@ -0,0 +1,7 @@
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
4
belyaeva_ekaterina_lab_2/var/data/txt2.txt
Normal file
4
belyaeva_ekaterina_lab_2/var/data/txt2.txt
Normal file
@ -0,0 +1,4 @@
|
||||
10
|
||||
20
|
||||
30
|
||||
40
|
5
belyaeva_ekaterina_lab_2/var/data/txt3.txt
Normal file
5
belyaeva_ekaterina_lab_2/var/data/txt3.txt
Normal file
@ -0,0 +1,5 @@
|
||||
5
|
||||
10
|
||||
15
|
||||
20
|
||||
25
|
3
belyaeva_ekaterina_lab_2/var/result/data.txt
Normal file
3
belyaeva_ekaterina_lab_2/var/result/data.txt
Normal file
@ -0,0 +1,3 @@
|
||||
1
|
||||
10
|
||||
5
|
1
belyaeva_ekaterina_lab_2/var/result/result.txt
Normal file
1
belyaeva_ekaterina_lab_2/var/result/result.txt
Normal file
@ -0,0 +1 @@
|
||||
100
|
12
belyaeva_ekaterina_lab_2/worker-1/Dockerfile
Normal file
12
belyaeva_ekaterina_lab_2/worker-1/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
||||
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"]
|
62
belyaeva_ekaterina_lab_2/worker-1/src/Main.java
Normal file
62
belyaeva_ekaterina_lab_2/worker-1/src/Main.java
Normal file
@ -0,0 +1,62 @@
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
String directoryPath = "/var/data";
|
||||
String resultFilePath = "/var/result/data.txt";
|
||||
|
||||
File directory = new File(directoryPath);
|
||||
File resultFile = new File(resultFilePath);
|
||||
|
||||
try {
|
||||
// Создаем новый файл-результат или перезаписываем существующий
|
||||
resultFile.createNewFile();
|
||||
|
||||
// Получаем список всех файлов в указанном каталоге
|
||||
File[] files = directory.listFiles();
|
||||
|
||||
// Проверяем, что каталог существует и содержит файлы
|
||||
if (directory.exists() && files != null) {
|
||||
// Создаем объект для записи данных в файл-результат
|
||||
FileWriter fileWriter = new FileWriter(resultFile);
|
||||
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
|
||||
|
||||
// Проходимся по всем файлам в каталоге
|
||||
for (File file : files) {
|
||||
// Проверяем, что текущий объект - файл
|
||||
if (file.isFile()) {
|
||||
// Создаем объект для чтения данных из файла
|
||||
FileReader fileReader = new FileReader(file);
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||
|
||||
// Читаем строку из файла и записываем ее в файл-результат
|
||||
String line = bufferedReader.readLine();
|
||||
if (line != null) {
|
||||
bufferedWriter.write(line);
|
||||
bufferedWriter.newLine();
|
||||
}
|
||||
|
||||
// Закрываем объекты чтения данных из файла
|
||||
bufferedReader.close();
|
||||
fileReader.close();
|
||||
}
|
||||
}
|
||||
|
||||
// Закрываем объект для записи данных в файл-результат
|
||||
bufferedWriter.close();
|
||||
fileWriter.close();
|
||||
|
||||
System.out.println("Файл /var/result/data.txt успешно создан.");
|
||||
} else {
|
||||
System.out.println("Указанный каталог не существует или не содержит файлы.");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.out.println("Ошибка при создании файла: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
12
belyaeva_ekaterina_lab_2/worker-2/Dockerfile
Normal file
12
belyaeva_ekaterina_lab_2/worker-2/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
||||
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"]
|
68
belyaeva_ekaterina_lab_2/worker-2/src/Main.java
Normal file
68
belyaeva_ekaterina_lab_2/worker-2/src/Main.java
Normal file
@ -0,0 +1,68 @@
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.lang.Math;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
String filePath = "/var/data/data.txt";
|
||||
String resultPath = "/var/result/result.txt";
|
||||
|
||||
try {
|
||||
// Чтение чисел из файла
|
||||
List<Integer> numbers = readNumbersFromFile(filePath);
|
||||
|
||||
// Поиск наибольшего числа
|
||||
int maxNumber = findMaxNumber(numbers);
|
||||
|
||||
// Вычисление второй степени
|
||||
int squaredNumber = (int) Math.pow(maxNumber, 2);
|
||||
|
||||
// Сохранение результата в файл
|
||||
saveResultToFile(resultPath, squaredNumber);
|
||||
|
||||
System.out.println("Наибольшее число: " + maxNumber);
|
||||
System.out.println("Квадрат наибольшего числа: " + squaredNumber);
|
||||
System.out.println("Результат сохранен в файле " + resultPath);
|
||||
} catch (IOException e) {
|
||||
System.out.println("Произошла ошибка при чтении/записи файла.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// Метод для чтения чисел из файла
|
||||
private static List<Integer> readNumbersFromFile(String filePath) throws IOException {
|
||||
List<Integer> numbers = new ArrayList<>();
|
||||
|
||||
BufferedReader reader = new BufferedReader(new FileReader(filePath));
|
||||
String line;
|
||||
|
||||
while ((line = reader.readLine()) != null) {
|
||||
int number = Integer.parseInt(line.trim());
|
||||
numbers.add(number);
|
||||
}
|
||||
|
||||
reader.close();
|
||||
|
||||
return numbers;
|
||||
}
|
||||
|
||||
// Метод для поиска наибольшего числа в списке
|
||||
private static int findMaxNumber(List<Integer> numbers) {
|
||||
int maxNumber = Integer.MIN_VALUE;
|
||||
|
||||
for (int number : numbers) {
|
||||
if (number > maxNumber) {
|
||||
maxNumber = number;
|
||||
}
|
||||
}
|
||||
|
||||
return maxNumber;
|
||||
}
|
||||
|
||||
// Метод для сохранения результата в файл
|
||||
private static void saveResultToFile(String filePath, int result) throws IOException {
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));
|
||||
writer.write(String.valueOf(result));
|
||||
writer.close();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user