+
This commit is contained in:
parent
36c429cb4f
commit
ea990fd848
@ -0,0 +1,38 @@
|
||||
## Задание
|
||||
Развернуть два взаимосвязанных сервиса по варианту:
|
||||
|
||||
Вариант № 4 для первой программы:
|
||||
* Сервис формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data.
|
||||
Вариант № 2 для второй программы:
|
||||
* Сервис ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
|
||||
## Выполнение
|
||||
Были написаны два сервиса на языке python с использованием технологии flask.
|
||||
Они выводят на страницу кнопки, при нажатии на которые происходит соответствующие действия по заданию
|
||||
|
||||
Для сервисов прописаны файлы Dockerfile, описывающие создание контейнеров:
|
||||
* Для обоих контейнеров выбирается Python 9.
|
||||
* Оба контейнера проявляют порты, на которых работает приложение: 8081 для первого и 8082 для второго.
|
||||
* В контейнерах создаются папки /work для файлов скриптов, папки /var/result для обоих сервисов и /var/data для первого скрипта.
|
||||
* В оба контейнера устанавливается пакет Flask.
|
||||
* Выбирается рабочая директория /work и туда копируются файлы скриптов.
|
||||
* Командой запускаются сами скрипты.
|
||||
|
||||
Общий yaml-файл развёртки был настроен следующим образом:
|
||||
* блок services, где перечислены разворачиваемые сервисы.
|
||||
* для каждого сервиса прописан build, где объявляется его папка и докерфайл создания.
|
||||
* для каждого сервиса прописано отображение портов на такие же хоста.
|
||||
* для каждого сервиса прописано монтирование нужных папок хостовой системы как соответствующих папок внутри контейнеров.
|
||||
|
||||
## Результат
|
||||
Пример выполнения:
|
||||
|
||||
Исходные данные: три файла в папке /var/data, средний файл имеет наибольшее количество строк и наибольшее число 40.
|
||||
|
||||
Ход работы: нажатие кнопок на странице первого сервиса, потом - второго.
|
||||
Запросы:
|
||||
![Запросы](screens/requests.png)
|
||||
Выходные данные: средний файл, перенесённый в /var/result/data.txt, файл result.txt там же с результатом вычислений - числом 1600. Результат выведен на страницу второго сервиса:
|
||||
![Результат](screens/res.png)
|
||||
|
||||
## Ссылка на видео
|
||||
https://drive.google.com/file/d/1ZI1FeQ8BqPR-e_dKnUlNW7V5A39ZlTYu/view?usp=drive_link
|
0
sergeev_evgenii_lab_2/docker-compose.yml
Normal file
0
sergeev_evgenii_lab_2/docker-compose.yml
Normal file
4
sergeev_evgenii_lab_2/service1/Dockerfile
Normal file
4
sergeev_evgenii_lab_2/service1/Dockerfile
Normal file
@ -0,0 +1,4 @@
|
||||
FROM ubuntu:latest
|
||||
LABEL authors="User"
|
||||
|
||||
ENTRYPOINT ["top", "-b"]
|
12
sergeev_evgenii_lab_2/service1/index.html
Normal file
12
sergeev_evgenii_lab_2/service1/index.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Сервис № 1</title>
|
||||
</head>
|
||||
<body>
|
||||
<form action="http://localhost:8081/ex">
|
||||
<input type="submit" value="Выполнить 1ое задание"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
36
sergeev_evgenii_lab_2/service1/service1.py
Normal file
36
sergeev_evgenii_lab_2/service1/service1.py
Normal file
@ -0,0 +1,36 @@
|
||||
from flask import Flask, redirect, render_template
|
||||
import os
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def home():
|
||||
return render_template("index.html")
|
||||
|
||||
|
||||
@app.route('/ex')
|
||||
def do():
|
||||
data_dir = '/var/data'
|
||||
path_result_file = '/var/result/data.txt'
|
||||
|
||||
try:
|
||||
# Получаем список файлов в указанном каталоге
|
||||
files = os.listdir(data_dir)
|
||||
|
||||
# Формируем путь к каждому файлу и считаем количество символов в именах
|
||||
characters_count_list = [len(file) for file in files]
|
||||
|
||||
# Пишем результат в файл data.txt
|
||||
with open(path_result_file, 'w') as result_file:
|
||||
for count in characters_count_list:
|
||||
result_file.write(f'{count}\n')
|
||||
|
||||
print(f'Файл успешно создан.')
|
||||
except Exception as e:
|
||||
print(f'Произошла ошибка: {e}')
|
||||
|
||||
return redirect("/")
|
||||
|
||||
|
||||
app.run(host='0.0.0.0', port=8081)
|
4
sergeev_evgenii_lab_2/service2/Dockerfile
Normal file
4
sergeev_evgenii_lab_2/service2/Dockerfile
Normal file
@ -0,0 +1,4 @@
|
||||
FROM ubuntu:latest
|
||||
LABEL authors="User"
|
||||
|
||||
ENTRYPOINT ["top", "-b"]
|
12
sergeev_evgenii_lab_2/service2/index.html
Normal file
12
sergeev_evgenii_lab_2/service2/index.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Сервис № 2</title>
|
||||
</head>
|
||||
<body>
|
||||
<form action="http://localhost:8082/ex">
|
||||
<input type="submit" value="Выполнить 2ое задание"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
10
sergeev_evgenii_lab_2/service2/result.html
Normal file
10
sergeev_evgenii_lab_2/service2/result.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Результат работы</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Результат: {{num}}</h2>
|
||||
</body>
|
||||
</html>
|
0
sergeev_evgenii_lab_2/service2/service2.py
Normal file
0
sergeev_evgenii_lab_2/service2/service2.py
Normal file
Loading…
Reference in New Issue
Block a user