diff --git a/alexandrov_dmitrii_lab_2/docker-compose.yml b/alexandrov_dmitrii_lab_2/docker-compose.yml new file mode 100644 index 0000000..e27dc59 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/docker-compose.yml @@ -0,0 +1,19 @@ +services: + worker-1: + build: + context: /worker-1 + dockerfile: Dockerfile + ports: + - 8081:8081 + volumes: + - .\var\data:/var/data + - .\var\result:/var/result + + worker-2: + build: + context: /worker-2 + dockerfile: Dockerfile + ports: + - 8082:8082 + volumes: + - .\var\result:/var/result \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/readme.md b/alexandrov_dmitrii_lab_2/readme.md new file mode 100644 index 0000000..0c5ff86 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/readme.md @@ -0,0 +1,37 @@ +## Задание +Развернуть два взаимосвязанных сервиса по варианту: + +Вариант 1: +* Сервис 1 ищет в каталоге /var/data файл с наибольшим количеством строк и перекладывает его в /var/result/data.txt. +* Сервис 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 \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/screens/requests.png b/alexandrov_dmitrii_lab_2/screens/requests.png new file mode 100644 index 0000000..195d596 Binary files /dev/null and b/alexandrov_dmitrii_lab_2/screens/requests.png differ diff --git a/alexandrov_dmitrii_lab_2/screens/res.png b/alexandrov_dmitrii_lab_2/screens/res.png new file mode 100644 index 0000000..5065643 Binary files /dev/null and b/alexandrov_dmitrii_lab_2/screens/res.png differ diff --git a/alexandrov_dmitrii_lab_2/var/data/file1.txt b/alexandrov_dmitrii_lab_2/var/data/file1.txt new file mode 100644 index 0000000..6b1dba8 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/var/data/file1.txt @@ -0,0 +1,3 @@ +10 +20 +15 \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/var/data/file2.txt b/alexandrov_dmitrii_lab_2/var/data/file2.txt new file mode 100644 index 0000000..d451ecb --- /dev/null +++ b/alexandrov_dmitrii_lab_2/var/data/file2.txt @@ -0,0 +1,5 @@ +30 +40 +35 +15 +10 \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/var/data/file3.txt b/alexandrov_dmitrii_lab_2/var/data/file3.txt new file mode 100644 index 0000000..b1f0442 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/var/data/file3.txt @@ -0,0 +1,4 @@ +20 +30 +25 +40 \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/var/result/data.txt b/alexandrov_dmitrii_lab_2/var/result/data.txt new file mode 100644 index 0000000..d451ecb --- /dev/null +++ b/alexandrov_dmitrii_lab_2/var/result/data.txt @@ -0,0 +1,5 @@ +30 +40 +35 +15 +10 \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/var/result/result.txt b/alexandrov_dmitrii_lab_2/var/result/result.txt new file mode 100644 index 0000000..f5624ae --- /dev/null +++ b/alexandrov_dmitrii_lab_2/var/result/result.txt @@ -0,0 +1 @@ +1600 \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/worker-1/Dockerfile b/alexandrov_dmitrii_lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..ca1f690 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-1/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.9 + +ENV LISTEN_PORT=8081 +EXPOSE 8081 + +RUN ["mkdir", "/work"] +RUN ["mkdir", "/var/data"] +RUN ["mkdir", "/var/result"] +RUN pip install Flask + +WORKDIR /work + +COPY template.html worker-1.py ./ + +CMD ["python", "worker-1.py"] diff --git a/alexandrov_dmitrii_lab_2/worker-1/template.html b/alexandrov_dmitrii_lab_2/worker-1/template.html new file mode 100644 index 0000000..5f093f0 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-1/template.html @@ -0,0 +1,12 @@ + + + + + Worker 1 + + +
+ +
+ + \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/worker-1/worker-1.py b/alexandrov_dmitrii_lab_2/worker-1/worker-1.py new file mode 100644 index 0000000..6b27e99 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-1/worker-1.py @@ -0,0 +1,29 @@ +from flask import Flask, redirect, render_template +import os + +app = Flask(__name__, template_folder='') + + +@app.route('/') +def home(): + return render_template("template.html") + + +@app.route('/do') +def do(): + data_dir = '/var/data' + result_file = '/var/result/data.txt' + text = [] + for filename in os.listdir(data_dir): + with open(os.path.join(data_dir, filename), 'r') as file: + txt = file.readlines() + if len(text) < len(txt): + text = txt + + with open(result_file, 'w') as result: + result.writelines(text) + + return redirect("/") + + +app.run(host='0.0.0.0', port=8081) diff --git a/alexandrov_dmitrii_lab_2/worker-2/Dockerfile b/alexandrov_dmitrii_lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..7d1718d --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-2/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.9 + +ENV LISTEN_PORT=8082 +EXPOSE 8082 + +RUN ["mkdir", "/work"] +RUN ["mkdir", "/var/result"] +RUN pip install Flask + +WORKDIR /work + +COPY template.html result.html worker-2.py ./ + +CMD ["python", "worker-2.py"] diff --git a/alexandrov_dmitrii_lab_2/worker-2/result.html b/alexandrov_dmitrii_lab_2/worker-2/result.html new file mode 100644 index 0000000..d98bf9e --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-2/result.html @@ -0,0 +1,10 @@ + + + + + Worker 2 + + +

Результат: {{res_num}}

+ + \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/worker-2/template.html b/alexandrov_dmitrii_lab_2/worker-2/template.html new file mode 100644 index 0000000..c223e2a --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-2/template.html @@ -0,0 +1,12 @@ + + + + + Worker 2 + + +
+ +
+ + \ No newline at end of file diff --git a/alexandrov_dmitrii_lab_2/worker-2/worker-2.py b/alexandrov_dmitrii_lab_2/worker-2/worker-2.py new file mode 100644 index 0000000..807ad84 --- /dev/null +++ b/alexandrov_dmitrii_lab_2/worker-2/worker-2.py @@ -0,0 +1,34 @@ +from flask import Flask, render_template +import re + +app = Flask(__name__, template_folder='') + + +@app.route('/') +def home(): + return render_template("template.html") + + +@app.route('/do') +def do(): + data_file = '/var/result/data.txt' + result_file = '/var/result/result.txt' + + numbers = [] + with open(data_file, 'r') as file: + txt = file.read() + numbers = map(int, re.findall(r'\d+', txt)) + + max_v = 0 + for val in numbers: + if max_v < val: + max_v = val + max_v = max_v * max_v + + with open(result_file, 'w') as result: + result.write(str(max_v)) + + return render_template("result.html", res_num=max_v) + + +app.run(host='0.0.0.0', port=8082)