Merge pull request 'bondarenko_max_lab_2' (#231) from bondarenko_max_lab_2 into main
Reviewed-on: #231
This commit is contained in:
commit
cdd0a7b7c9
2
bondarenko_max_lab_2/.gitignore
vendored
Normal file
2
bondarenko_max_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
node_modules/
|
||||||
|
*.log
|
55
bondarenko_max_lab_2/README.md
Normal file
55
bondarenko_max_lab_2/README.md
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Лабораторная работа 2 - Разработка простейшего распределённого приложения
|
||||||
|
### ПИбд-42 || Бондаренко Максим
|
||||||
|
|
||||||
|
# Описание работы
|
||||||
|
|
||||||
|
> Задача:
|
||||||
|
В данной лабораторной работе изучить способы создания и развертывания простого распределённого приложения.
|
||||||
|
|
||||||
|
### Первая программа лабораторной работы.
|
||||||
|
```
|
||||||
|
Вариант - 2: Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data.
|
||||||
|
Для реализации программы я буду использовать JavaScript с Node.js
|
||||||
|
```
|
||||||
|
|
||||||
|
### Вторая программа лабораторной работы.
|
||||||
|
```
|
||||||
|
Вариант - 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
|
||||||
|
Для реализации программы я буду использовать JavaScript с Node.js
|
||||||
|
```
|
||||||
|
|
||||||
|
> Инструкция по запуску
|
||||||
|
1. Запуск Docker - Desktop
|
||||||
|
2. Открыть консоль в папке с docker-compose.yml
|
||||||
|
3. Ввести команду:
|
||||||
|
```
|
||||||
|
docker-compose up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
> Docker-compose.yml
|
||||||
|
```
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
app1:
|
||||||
|
build:
|
||||||
|
context: ./app-1
|
||||||
|
volumes:
|
||||||
|
- ./data:/var/data # Монтируем локальную папку data в /var/data
|
||||||
|
- ./result:/var/result # Монтируем локальную папку result в /var/result
|
||||||
|
container_name: app1
|
||||||
|
|
||||||
|
app2:
|
||||||
|
build:
|
||||||
|
context: ./app-2
|
||||||
|
depends_on:
|
||||||
|
- app1
|
||||||
|
volumes:
|
||||||
|
- ./result:/var/result # Монтируем ту же папку result
|
||||||
|
container_name: app2
|
||||||
|
```
|
||||||
|
#### В результате в папке result создаётся два текстовых документа:
|
||||||
|
1. data - результат работы первого проекта
|
||||||
|
2. result - результат работы второго проекта
|
||||||
|
|
||||||
|
> Видео демонстрация работы
|
||||||
|
https://cloud.mail.ru/public/FyyE/LTkRXBQXN
|
14
bondarenko_max_lab_2/app-1/Dockerfile
Normal file
14
bondarenko_max_lab_2/app-1/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Образ с Node.js версии 18
|
||||||
|
FROM node:18
|
||||||
|
|
||||||
|
# Создание директории
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Добавление кода в контейнер из index.js
|
||||||
|
COPY index.js .
|
||||||
|
|
||||||
|
# Установка рабочей папки для вводных данных и результата
|
||||||
|
RUN mkdir -p /var/data /var/result
|
||||||
|
|
||||||
|
# Запуск index.js с помощью среды выполнения Node.js
|
||||||
|
CMD ["node", "index.js"]
|
33
bondarenko_max_lab_2/app-1/index.js
Normal file
33
bondarenko_max_lab_2/app-1/index.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Первая программа лабораторной работы.
|
||||||
|
// Вариант - 2: Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data.
|
||||||
|
// Для реализации программы я буду использовать JavaScript с Node.js
|
||||||
|
|
||||||
|
// Импорт модулей
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
// Добавляем пути к папкам
|
||||||
|
const dataDir = '/var/data';
|
||||||
|
const resultFile = '/var/result/data.txt';
|
||||||
|
|
||||||
|
// Функция для извлечения первых строк всех файлов в data и записи резултата в result
|
||||||
|
const gatherFirstLines = () => {
|
||||||
|
// Обёртываю в try/catch
|
||||||
|
try {
|
||||||
|
const files = fs.readdirSync(dataDir); // Считывание название файлов из data
|
||||||
|
// Проходимся по файлам
|
||||||
|
// Добовляем первые строчки
|
||||||
|
const firstLines = files.map((file) => {
|
||||||
|
const filePath = path.join(dataDir, file);
|
||||||
|
const content = fs.readFileSync(filePath, 'utf-8');
|
||||||
|
return content.split('\n')[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.writeFileSync(resultFile, firstLines.join('\n')); // Записываем первые строки в `data.txt`
|
||||||
|
console.log('First lines have been successfully written to', resultFile); // Логирую в терминал результат
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error processing files:', error); // Перехватываю ошибку
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
gatherFirstLines(); // Вызываю функцию
|
14
bondarenko_max_lab_2/app-2/Dockerfile
Normal file
14
bondarenko_max_lab_2/app-2/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Образ с Node.js версии 18
|
||||||
|
FROM node:18
|
||||||
|
|
||||||
|
# Создание директории
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Добавление кода в контейнер из index.js
|
||||||
|
COPY index.js .
|
||||||
|
|
||||||
|
# Установка рабочей папки для вводных данных и результата
|
||||||
|
RUN mkdir -p /var/data /var/result
|
||||||
|
|
||||||
|
# Запуск index.js с помощью среды выполнения Node.js
|
||||||
|
CMD ["node", "index.js"]
|
30
bondarenko_max_lab_2/app-2/index.js
Normal file
30
bondarenko_max_lab_2/app-2/index.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Вторая программа лабораторной работы.
|
||||||
|
// Вариант - 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
|
||||||
|
// Для реализации программы я буду использовать JavaScript с Node.js
|
||||||
|
|
||||||
|
// Импорт модулей
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
// Добавляем пути к папкам
|
||||||
|
const dataFile = '/var/result/data.txt';
|
||||||
|
const resultFile = '/var/result/result.txt';
|
||||||
|
|
||||||
|
// Функция для запаси наименьшего числа в кубе из data в result
|
||||||
|
const calculateMinCubed = () => {
|
||||||
|
// Обёртываю в try/catch
|
||||||
|
try {
|
||||||
|
const content = fs.readFileSync(dataFile, 'utf-8'); // Открытие файла с кодировкой UTF-8
|
||||||
|
const numbers = content.split('\n').map(Number).filter(Boolean); // Преобразую в числа
|
||||||
|
|
||||||
|
const minNumber = Math.min(...numbers); // Ищу минимальное число
|
||||||
|
const result = Math.pow(minNumber, 3); // Возвожу в 3-тью степень
|
||||||
|
|
||||||
|
fs.writeFileSync(resultFile, result.toString()); // Записываю результат в файл
|
||||||
|
console.log(`Cubed minimum number (${minNumber}^3) saved to`, resultFile); // Логирую в терминал результат
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error processing file:', error); // Перехватываю ошибку
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
calculateMinCubed(); // Вызываю функцию
|
10
bondarenko_max_lab_2/data/file1.txt
Normal file
10
bondarenko_max_lab_2/data/file1.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
25
|
||||||
|
91
|
||||||
|
77
|
||||||
|
63
|
||||||
|
45
|
||||||
|
25
|
||||||
|
21
|
||||||
|
89
|
||||||
|
6
|
||||||
|
18
|
10
bondarenko_max_lab_2/data/file2.txt
Normal file
10
bondarenko_max_lab_2/data/file2.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
98
|
||||||
|
62
|
||||||
|
45
|
||||||
|
77
|
||||||
|
65
|
||||||
|
45
|
||||||
|
61
|
||||||
|
62
|
||||||
|
10
|
||||||
|
76
|
10
bondarenko_max_lab_2/data/file3.txt
Normal file
10
bondarenko_max_lab_2/data/file3.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
37
|
||||||
|
54
|
||||||
|
100
|
||||||
|
34
|
||||||
|
1
|
||||||
|
77
|
||||||
|
55
|
||||||
|
10
|
||||||
|
30
|
||||||
|
28
|
18
bondarenko_max_lab_2/docker-compose.yml
Normal file
18
bondarenko_max_lab_2/docker-compose.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
app1:
|
||||||
|
build:
|
||||||
|
context: ./app-1
|
||||||
|
volumes:
|
||||||
|
- ./data:/var/data # Монтируем локальную папку data в /var/data
|
||||||
|
- ./result:/var/result # Монтируем локальную папку result в /var/result
|
||||||
|
container_name: app1
|
||||||
|
|
||||||
|
app2:
|
||||||
|
build:
|
||||||
|
context: ./app-2
|
||||||
|
depends_on:
|
||||||
|
- app1
|
||||||
|
volumes:
|
||||||
|
- ./result:/var/result # Монтируем ту же папку result
|
||||||
|
container_name: app2
|
Loading…
Reference in New Issue
Block a user