rogashova_ekaterina_lab_2 #85

Merged
Alexey merged 1 commits from rogashova_ekaterina_lab_2 into main 2024-10-26 12:14:15 +04:00
9 changed files with 128 additions and 0 deletions

5
rogashova_ekaterina_lab_2/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
__pycache__/
*.pyc
*.pyo
*.log
.DS_Store

View File

@ -0,0 +1 @@
1 67 11 45

View File

@ -0,0 +1 @@
1 2 3 4 5

View File

@ -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

View File

@ -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).

View File

@ -0,0 +1,11 @@
# Используем базовый образ с Python
FROM python:3.9-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем файл с кодом программы в контейнер
COPY findfile.py .
# Запускаем приложение
CMD ["python", "findfile.py"]

View File

@ -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)

View File

@ -0,0 +1,11 @@
# Используем базовый образ с Python
FROM python:3.9-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем файл с кодом программы в контейнер
COPY findnumber.py .
# Запускаем приложение
CMD ["python", "findnumber.py"]

View File

@ -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)