Merge pull request 'mashkova_margarita_lab_2 ready' (#54) from mashkova_margarita_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/54
This commit is contained in:
commit
33c9790fef
98
mashkova_margarita_lab_2/README.md
Normal file
98
mashkova_margarita_lab_2/README.md
Normal file
@ -0,0 +1,98 @@
|
||||
# Лабораторная работа №2
|
||||
## ПИбд-42 Машкова Маргарита
|
||||
## Задание
|
||||
1. Согласно варианту разработать два приложения такие, что результат первого является исходными данными для второго.
|
||||
2. Изучить файлы сборки образов docker и разработать их для созданных приложений.
|
||||
3. Собрать файл `docker-compose.yml` для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
|
||||
|
||||
> Docker Compose использует файл docker-compose.yml для создания и запуска всех сервисов, определенных в конфигурации,
|
||||
> с помощью одной команды.
|
||||
|
||||
- Содержимое исходных файлов - целые числа.
|
||||
- Результат выполнения программы 2 необходимо дополнительно вывести на экран.
|
||||
|
||||
### Функциональность приложений:
|
||||
- `worker-1` - Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество символов в именах файлов
|
||||
из каталога `/var/data`.
|
||||
- `worker-2` - Ищет наименьшее число из файла `/var/result/data.txt` и сохраняет его третью степень
|
||||
в `/var/result/result.txt`.
|
||||
|
||||
## Запуск программы
|
||||
В директории с файлом `docker-compose.yml` выполнить команду:
|
||||
```
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Описание работы программы
|
||||
|
||||
### Dockerfile сервиса `worker-1`:
|
||||
```
|
||||
# Использование образа java
|
||||
FROM openjdk:17
|
||||
# Создание директорий
|
||||
RUN mkdir /var/data
|
||||
RUN mkdir /var/result
|
||||
# Рабочая директория
|
||||
WORKDIR /app
|
||||
# Копирование исходных файлов
|
||||
COPY src/Main.java /app/Main.java
|
||||
# Компиляция
|
||||
RUN javac Main.java
|
||||
# Запуск
|
||||
CMD ["java", "Main"]
|
||||
```
|
||||
Dockerfile сервиса `worker-2` аналогичен.
|
||||
|
||||
### Полный файл конфигурации `docker-compose.yml`:
|
||||
```
|
||||
version: '3'
|
||||
services:
|
||||
worker-1:
|
||||
build:
|
||||
context: /worker-1
|
||||
dockerfile: Dockerfile
|
||||
container_name: worker-1
|
||||
volumes: # Монтирование
|
||||
- .\data:/var/data
|
||||
- .\result:/var/result
|
||||
worker-2:
|
||||
build:
|
||||
context: /worker-2
|
||||
dockerfile: Dockerfile
|
||||
container_name: worker-2
|
||||
depends_on: # Зависимость сервисов
|
||||
- worker-1
|
||||
volumes: # Монтирование
|
||||
- .\data:/var/data
|
||||
- .\result:/var/result
|
||||
```
|
||||
|
||||
## Запуск сервисов
|
||||
|
||||
### Содержимое файлов:
|
||||
Т.к. первой программе важно не содержимое файлов, а количество символов в их названиях, то файлы в директории `/data`
|
||||
пустые.
|
||||
|
||||
Названия файлов и количество символов в названии:
|
||||
> - digits.txt (10)
|
||||
> - integers.txt (12)
|
||||
> - numbers.txt (11)
|
||||
|
||||
Содержимое файлов каталога `/result`:
|
||||
> - data.txt: <br>10<br> 12<br> 11
|
||||
> - result.txt: 1000
|
||||
|
||||
### Результат выполнения команды `docker-compose up -d`:
|
||||
![Вывод в консоли](build_images.png)
|
||||
|
||||
### Созданные образы:
|
||||
![Созданные образы](images.png)
|
||||
|
||||
### Созданные контейнеры:
|
||||
![Созданные контейнеры](containers.png)
|
||||
|
||||
### Результаты выполнения программ:
|
||||
![results](results.png)
|
||||
|
||||
Ссылка на видео:
|
||||
https://youtu.be/8AG78ip0Bew
|
BIN
mashkova_margarita_lab_2/build_images.png
Normal file
BIN
mashkova_margarita_lab_2/build_images.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.3 KiB |
BIN
mashkova_margarita_lab_2/containers.png
Normal file
BIN
mashkova_margarita_lab_2/containers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
0
mashkova_margarita_lab_2/data/digits.txt
Normal file
0
mashkova_margarita_lab_2/data/digits.txt
Normal file
0
mashkova_margarita_lab_2/data/integers.txt
Normal file
0
mashkova_margarita_lab_2/data/integers.txt
Normal file
0
mashkova_margarita_lab_2/data/numbers.txt
Normal file
0
mashkova_margarita_lab_2/data/numbers.txt
Normal file
20
mashkova_margarita_lab_2/docker-compose.yml
Normal file
20
mashkova_margarita_lab_2/docker-compose.yml
Normal file
@ -0,0 +1,20 @@
|
||||
version: '3'
|
||||
services:
|
||||
worker-1:
|
||||
build:
|
||||
context: /worker-1
|
||||
dockerfile: Dockerfile
|
||||
container_name: worker-1
|
||||
volumes: # Монтирование
|
||||
- .\data:/var/data
|
||||
- .\result:/var/result
|
||||
worker-2:
|
||||
build:
|
||||
context: /worker-2
|
||||
dockerfile: Dockerfile
|
||||
container_name: worker-2
|
||||
depends_on: # Зависимость сервисов
|
||||
- worker-1
|
||||
volumes: # Монтирование
|
||||
- .\data:/var/data
|
||||
- .\result:/var/result
|
BIN
mashkova_margarita_lab_2/images.png
Normal file
BIN
mashkova_margarita_lab_2/images.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
3
mashkova_margarita_lab_2/result/data.txt
Normal file
3
mashkova_margarita_lab_2/result/data.txt
Normal file
@ -0,0 +1,3 @@
|
||||
10
|
||||
12
|
||||
11
|
1
mashkova_margarita_lab_2/result/result.txt
Normal file
1
mashkova_margarita_lab_2/result/result.txt
Normal file
@ -0,0 +1 @@
|
||||
1000
|
BIN
mashkova_margarita_lab_2/results.png
Normal file
BIN
mashkova_margarita_lab_2/results.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
13
mashkova_margarita_lab_2/worker-1/Dockerfile
Normal file
13
mashkova_margarita_lab_2/worker-1/Dockerfile
Normal file
@ -0,0 +1,13 @@
|
||||
# Использование образа java
|
||||
FROM openjdk:17
|
||||
# Создание директорий
|
||||
RUN mkdir /var/data
|
||||
RUN mkdir /var/result
|
||||
# Рабочая директория
|
||||
WORKDIR /app
|
||||
# Копирование исходных файлов
|
||||
COPY src/Main.java /app/Main.java
|
||||
# Компиляция
|
||||
RUN javac Main.java
|
||||
# Запуск
|
||||
CMD ["java", "Main"]
|
22
mashkova_margarita_lab_2/worker-1/src/Main.java
Normal file
22
mashkova_margarita_lab_2/worker-1/src/Main.java
Normal file
@ -0,0 +1,22 @@
|
||||
import java.io.*;
|
||||
|
||||
// Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество символов в именах файлов из каталога `/var/data`.
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
File folder = new File("/var/data");
|
||||
File[] files = folder.listFiles();
|
||||
// Запись в файл /var/result/data.txt количества символов в именах файлов из каталога /var/data построчно
|
||||
try {
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter("/var/result/data.txt"));
|
||||
for (File file : files) {
|
||||
if (file.isFile()) {
|
||||
writer.write(file.getName().length() + "\n");
|
||||
}
|
||||
}
|
||||
writer.close();
|
||||
System.out.println("Данные успешно записаны в файл /var/result/data.txt. Программа 1 выполнилась.");
|
||||
} catch (IOException e) {
|
||||
System.out.println("Ошибка при записи в файл /var/result/data.txt: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
13
mashkova_margarita_lab_2/worker-2/Dockerfile
Normal file
13
mashkova_margarita_lab_2/worker-2/Dockerfile
Normal file
@ -0,0 +1,13 @@
|
||||
# Использование образа java
|
||||
FROM openjdk:17
|
||||
# Создание директорий
|
||||
RUN mkdir /var/data
|
||||
RUN mkdir /var/result
|
||||
# Рабочая директория
|
||||
WORKDIR /app
|
||||
# Копирование исходных файлов
|
||||
COPY src/Main.java /app/Main.java
|
||||
# Компиляция
|
||||
RUN javac Main.java
|
||||
# Запуск
|
||||
CMD ["java", "Main"]
|
48
mashkova_margarita_lab_2/worker-2/src/Main.java
Normal file
48
mashkova_margarita_lab_2/worker-2/src/Main.java
Normal file
@ -0,0 +1,48 @@
|
||||
import java.io.*;
|
||||
|
||||
// Ищет наименьшее число из файла `/var/result/data.txt` и сохраняет его 3 степень в `/var/result/result.txt`
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
int min = Integer.MAX_VALUE;
|
||||
int len = 0;
|
||||
|
||||
// Чтение файла /var/result/data.txt и поиск наименьшего числа
|
||||
try {
|
||||
System.out.println("Содержимое файла /var/result/data.txt:");
|
||||
BufferedReader reader = new BufferedReader(new FileReader("/var/result/data.txt"));
|
||||
String line = reader.readLine();
|
||||
while (line != null) {
|
||||
try {
|
||||
len = Integer.parseInt(line);
|
||||
System.out.println(len);
|
||||
if (len < min){
|
||||
min = len;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
len = -1;
|
||||
}
|
||||
line = reader.readLine();
|
||||
}
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
System.out.println("Ошибка при чтении файла /var/result/data.txt: " + e.getMessage());
|
||||
}
|
||||
|
||||
// Возведение наименьше числа в 3 степень
|
||||
int min3 = (int)Math.pow(min, 3);
|
||||
|
||||
// Вывод результата на экран
|
||||
String res = String.format("Наименьшее значение в файле /var/result/data.txt, возведенное в 3 степень: %d", min3);
|
||||
System.out.println(res);
|
||||
|
||||
// Запись результата в /var/result/result.txt
|
||||
try {
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter("/var/result/result.txt"));
|
||||
writer.write(Integer.toString(min3));
|
||||
writer.close();
|
||||
System.out.println("Данные успешно записаны в файл /var/result/result.txt. Программа 2 выполнилась.");
|
||||
} catch (IOException e) {
|
||||
System.out.println("Ошибка при записи в файл /var/result/result.txt: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user