diff --git a/sergeev_evgenii_lab_2/README.md b/sergeev_evgenii_lab_2/README.md new file mode 100644 index 0000000..0f654c8 --- /dev/null +++ b/sergeev_evgenii_lab_2/README.md @@ -0,0 +1,42 @@ +## Задание +Развернуть два взаимосвязанных сервиса по варианту: + +Вариант № 4 для первой программы: +* Сервис формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data. +Вариант № 2 для второй программы: +* Сервис ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt. +## Выполнение +Были написаны два сервиса на языке python с использованием технологии flask. +Они выводят на страницу кнопки, при нажатии на которые происходит соответствующие действия по заданию + +Для сервисов прописаны файлы Dockerfile, описывающие создание контейнеров: +* Для обоих контейнеров выбирается Python 11 +* На оба контейнера пробрасываются порты, на которых работает приложение: 8081 для первого и 8082 для второго +* Внутри контейнеров создаются папки /work для файлов скриптов, папки /var/result, /var/data для обоих сервисов +* В оба контейнера устанавливается фреймворк Flask +* Выбирается рабочая директория /work и туда копируются файлы скриптов +* Командой запускаются сами скрипты + +Общий yml-файл настроен следующим образом: +* блок services, где перечислены разворачиваемые сервисы. +* для каждого сервиса прописан build, где обозначается его папка +* для каждого сервиса прописано пробрасывание портов на хостовую машину +* для каждого сервиса прописано отображение внутриконтейнерных папок на хостовые + +## Результат +Пример выполнения: + +Исходные данные: четыре файла в папке /var/data с разным по длине названием + +Ход работы: нажатие кнопок на странице первого сервиса, потом - второго +Созданные контейнеры: +![Контейнеры](images/containers.png) + +Страница первого задания: +![Страница первого задания](images/exercise1.png) + +Выходные данные при выполнении второго задания: +![Второе задание. Результат](images/exercise2.png) + +## Ссылка на видео +https://youtu.be/CEAAr0xolxM \ No newline at end of file diff --git a/sergeev_evgenii_lab_2/docker-compose.yml b/sergeev_evgenii_lab_2/docker-compose.yml new file mode 100644 index 0000000..d634e9f --- /dev/null +++ b/sergeev_evgenii_lab_2/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3' + +services: + service1: + build: + context: ./service1 + ports: + - "8081:8081" + volumes: + - .\var\data:/var/data + - .\var\result:/var/result + + service2: + build: + context: ./service2 + ports: + - "8082:8082" + volumes: + - ./var/result:/var/result \ No newline at end of file diff --git a/sergeev_evgenii_lab_2/images/containers.png b/sergeev_evgenii_lab_2/images/containers.png new file mode 100644 index 0000000..63af3d5 Binary files /dev/null and b/sergeev_evgenii_lab_2/images/containers.png differ diff --git a/sergeev_evgenii_lab_2/images/exercise1.png b/sergeev_evgenii_lab_2/images/exercise1.png new file mode 100644 index 0000000..b808539 Binary files /dev/null and b/sergeev_evgenii_lab_2/images/exercise1.png differ diff --git a/sergeev_evgenii_lab_2/images/exercise2.png b/sergeev_evgenii_lab_2/images/exercise2.png new file mode 100644 index 0000000..9c5e3ab Binary files /dev/null and b/sergeev_evgenii_lab_2/images/exercise2.png differ diff --git a/sergeev_evgenii_lab_2/service1/Dockerfile b/sergeev_evgenii_lab_2/service1/Dockerfile new file mode 100644 index 0000000..6379a70 --- /dev/null +++ b/sergeev_evgenii_lab_2/service1/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.11 + +ENV LISTEN_PORT=8081 +EXPOSE 8081 + +RUN ["mkdir", "/work"] +RUN ["mkdir", "/var/data"] +RUN ["mkdir", "/var/result"] +RUN pip install Flask + +WORKDIR /work + +COPY index.html service1.py ./ + +CMD ["python", "service1.py"] \ No newline at end of file diff --git a/sergeev_evgenii_lab_2/service1/index.html b/sergeev_evgenii_lab_2/service1/index.html new file mode 100644 index 0000000..c0b0956 --- /dev/null +++ b/sergeev_evgenii_lab_2/service1/index.html @@ -0,0 +1,12 @@ + + + + + Сервис № 1 + + +
+ +
+ + diff --git a/sergeev_evgenii_lab_2/service1/service1.py b/sergeev_evgenii_lab_2/service1/service1.py new file mode 100644 index 0000000..8a9e63f --- /dev/null +++ b/sergeev_evgenii_lab_2/service1/service1.py @@ -0,0 +1,39 @@ +from flask import Flask, redirect, render_template +import os + +app = Flask(__name__, template_folder='') + + +@app.route('/') +def home(): + return render_template("index.html") + + +@app.route('/ex') +def do(): + current_directory = os.getcwd() + directory_elements = current_directory.split(os.path.sep) # Разделяем по разделителю каталогов + cur_d = os.path.sep.join(directory_elements[:-1]) + data_dir = cur_d + '/var/data' + path_result_file = cur_d + '/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) diff --git a/sergeev_evgenii_lab_2/service2/Dockerfile b/sergeev_evgenii_lab_2/service2/Dockerfile new file mode 100644 index 0000000..339421e --- /dev/null +++ b/sergeev_evgenii_lab_2/service2/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.11 + +ENV LISTEN_PORT=8082 +EXPOSE 8082 + +RUN ["mkdir", "/work"] +RUN ["mkdir", "/var/result"] +RUN pip install Flask + +WORKDIR /work + +COPY index.html result.html service2.py ./ + +CMD ["python", "service2.py"] \ No newline at end of file diff --git a/sergeev_evgenii_lab_2/service2/index.html b/sergeev_evgenii_lab_2/service2/index.html new file mode 100644 index 0000000..8532127 --- /dev/null +++ b/sergeev_evgenii_lab_2/service2/index.html @@ -0,0 +1,12 @@ + + + + + Сервис № 2 + + +
+ +
+ + diff --git a/sergeev_evgenii_lab_2/service2/result.html b/sergeev_evgenii_lab_2/service2/result.html new file mode 100644 index 0000000..836015b --- /dev/null +++ b/sergeev_evgenii_lab_2/service2/result.html @@ -0,0 +1,10 @@ + + + + + Результат работы + + +

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

+ + diff --git a/sergeev_evgenii_lab_2/service2/service2.py b/sergeev_evgenii_lab_2/service2/service2.py new file mode 100644 index 0000000..f6fde43 --- /dev/null +++ b/sergeev_evgenii_lab_2/service2/service2.py @@ -0,0 +1,43 @@ +import os +from flask import Flask, render_template + +app = Flask(__name__, template_folder='') + + +@app.route('/') +def home(): + return render_template("index.html") + + +@app.route('/ex') +def do(): + current_directory = os.getcwd() + directory_elements = current_directory.split(os.path.sep) # Разделяем по разделителю каталогов + cur_d = os.path.sep.join(directory_elements[:-1]) + path_data_file = cur_d + '/var/result/data.txt' + path_result_file = cur_d + '/var/result/result.txt' + + min_number = 0 + try: + # Чтение чисел из файла + with open(path_data_file, 'r') as file: + numbers = [float(line.strip()) for line in file] + + # Поиск минимального числа + min_number = min(numbers) + + # Возведение минимального числа в третью степень + result = min_number ** 3 + + # Запись результата в файл + with open(path_result_file, 'w') as result_file: + result_file.write(str(result)) + + print(f'Наименьшее число из файла {path_data_file} в третьей степени сохранено в {path_result_file}.') + except Exception as e: + print(f'Произошла ошибка: {e}') + + return render_template("result.html", num=min_number) + + +app.run(host='0.0.0.0', port=8082) diff --git a/sergeev_evgenii_lab_2/var/data/1 b/sergeev_evgenii_lab_2/var/data/1 new file mode 100644 index 0000000..e69de29 diff --git a/sergeev_evgenii_lab_2/var/data/123 b/sergeev_evgenii_lab_2/var/data/123 new file mode 100644 index 0000000..e69de29 diff --git a/sergeev_evgenii_lab_2/var/data/tutmnogobukv b/sergeev_evgenii_lab_2/var/data/tutmnogobukv new file mode 100644 index 0000000..e69de29 diff --git a/sergeev_evgenii_lab_2/var/data/zdestozhe.txt b/sergeev_evgenii_lab_2/var/data/zdestozhe.txt new file mode 100644 index 0000000..e69de29