diff --git a/rogashova_ekaterina_lab_2/.gitignore b/rogashova_ekaterina_lab_2/.gitignore new file mode 100644 index 0000000..4f1f6fc --- /dev/null +++ b/rogashova_ekaterina_lab_2/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.pyc +*.pyo +*.log +.DS_Store \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/data/name.txt b/rogashova_ekaterina_lab_2/data/name.txt new file mode 100644 index 0000000..7fd5724 --- /dev/null +++ b/rogashova_ekaterina_lab_2/data/name.txt @@ -0,0 +1 @@ +1 67 11 45 \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/data/namename.txt b/rogashova_ekaterina_lab_2/data/namename.txt new file mode 100644 index 0000000..7e92570 --- /dev/null +++ b/rogashova_ekaterina_lab_2/data/namename.txt @@ -0,0 +1 @@ +1 2 3 4 5 \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/docker-compose.yml b/rogashova_ekaterina_lab_2/docker-compose.yml new file mode 100644 index 0000000..5687f7f --- /dev/null +++ b/rogashova_ekaterina_lab_2/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3.8' + +services: + findfile: + build: + context: ./worker-1 + volumes: + - ./data:/var/data + - ./result:/var/result + + findnumber: + build: + context: ./worker-2 + volumes: + - ./result:/var/result + depends_on: + - findfile \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/readme.md b/rogashova_ekaterina_lab_2/readme.md new file mode 100644 index 0000000..9e32c6f --- /dev/null +++ b/rogashova_ekaterina_lab_2/readme.md @@ -0,0 +1,30 @@ +# Лабораторная работа №2 + +#### Вариант 1 сервиса: 5. Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt. + +#### Вариант 2 сервиса: 1. Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt. + +## Ход работы: +1. Создаем необходимые директории с файлами - программами на языке Python, которые выполняют необходимые действия по варианту. +Программа 1: +Принимает каталог в качестве входных данных и находит файл с самым коротким названием в этом катологе. Затем перемещает его в другой каталог. +Программа 2: +Принимает на вход файл с целыми числами, находит наибольшее и возводит его в квадрат. Результат выводит в новый файл. +2. Создаем файл docker-compose.yml. +Здесь происходит настройка зависимостей между сервисами, гарантируя, что 2 программа запустится только после 1. Он также настраивает монтирование папок, чтобы программы имели доступ к каталогам и файлам. +3. Также в папку с каждой программой необходимо добавить Dockerfile. Dockerfile — это текстовый файл, который содержит инструкции по сборке образа Docker. Он используется для создания настраиваемых образов Docker, которые могут запускать ваши приложения в изолированной и воспроизводимой среде. + +## Как запустить это? + +Для запуска данной конфигурации Docker Compose выполните следующие шаги: + +1. Открыть терминал и перейти в директорию, где находится docker-compose.yml. +2. Выполнить команду +Выполнить команду: +``` +docker compose up --build +``` +3. Дождаться, пока Docker Compose запустит все контейнеры. + +## Видео +Работоспособность представлена на [видео](https://vk.com/video204968285_456240925). \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/worker-1/Dockerfile b/rogashova_ekaterina_lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..0e6d262 --- /dev/null +++ b/rogashova_ekaterina_lab_2/worker-1/Dockerfile @@ -0,0 +1,11 @@ +# Используем базовый образ с Python +FROM python:3.9-slim + +# Устанавливаем рабочую директорию +WORKDIR /app + +# Копируем файл с кодом программы в контейнер +COPY findfile.py . + +# Запускаем приложение +CMD ["python", "findfile.py"] \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/worker-1/findfile.py b/rogashova_ekaterina_lab_2/worker-1/findfile.py new file mode 100644 index 0000000..d8706ed --- /dev/null +++ b/rogashova_ekaterina_lab_2/worker-1/findfile.py @@ -0,0 +1,23 @@ +import os +import shutil + +def find_shortest_file(directory): + shortest_file = None + shortest_file_length = float('inf') + for file in os.listdir(directory): + file_path = os.path.join(directory, file) + if os.path.isfile(file_path) and len(file) < shortest_file_length: + shortest_file = file_path + shortest_file_length = len(file) + return shortest_file + +def move_file(source, destination): + shutil.move(source, destination) + +directory = "/var/data" + +shortest_file = find_shortest_file(directory) + +if shortest_file is not None: + destination = "/var/result/data.txt" + move_file(shortest_file, destination) diff --git a/rogashova_ekaterina_lab_2/worker-2/Dockerfile b/rogashova_ekaterina_lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..46651e0 --- /dev/null +++ b/rogashova_ekaterina_lab_2/worker-2/Dockerfile @@ -0,0 +1,11 @@ +# Используем базовый образ с Python +FROM python:3.9-slim + +# Устанавливаем рабочую директорию +WORKDIR /app + +# Копируем файл с кодом программы в контейнер +COPY findnumber.py . + +# Запускаем приложение +CMD ["python", "findnumber.py"] \ No newline at end of file diff --git a/rogashova_ekaterina_lab_2/worker-2/findnumber.py b/rogashova_ekaterina_lab_2/worker-2/findnumber.py new file mode 100644 index 0000000..e0fbd0f --- /dev/null +++ b/rogashova_ekaterina_lab_2/worker-2/findnumber.py @@ -0,0 +1,29 @@ +import os + +def find_max_number(file_path): + max_number = float('-inf') + with open(file_path, "r") as f: + # Читаем все строки из файла + content = f.read() + # Разделяем строки по пробелам для получения списка чисел + numbers = map(int, content.split()) + for number in numbers: + if number > max_number: + max_number = number + return max_number + +def save_result(result, file_path): + with open(file_path, "w") as f: + f.write(str(result)) + +def print_result(result): + print("Квадрат наибольшего числа:", result) + +file_path = "/var/result/data.txt" + +max_number = find_max_number(file_path) + +result_file_path = "/var/result/result.txt" +save_result(max_number ** 2, result_file_path) + +print_result(max_number ** 2)