forked from Alexey/DAS_2024_1
Merge pull request 'rogashova_ekaterina_lab_2' (#85) from rogashova_ekaterina_lab_2 into main
Reviewed-on: Alexey/DAS_2024_1#85
This commit is contained in:
commit
4a37f55328
5
rogashova_ekaterina_lab_2/.gitignore
vendored
Normal file
5
rogashova_ekaterina_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.log
|
||||
.DS_Store
|
1
rogashova_ekaterina_lab_2/data/name.txt
Normal file
1
rogashova_ekaterina_lab_2/data/name.txt
Normal file
@ -0,0 +1 @@
|
||||
1 67 11 45
|
1
rogashova_ekaterina_lab_2/data/namename.txt
Normal file
1
rogashova_ekaterina_lab_2/data/namename.txt
Normal file
@ -0,0 +1 @@
|
||||
1 2 3 4 5
|
17
rogashova_ekaterina_lab_2/docker-compose.yml
Normal file
17
rogashova_ekaterina_lab_2/docker-compose.yml
Normal 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
|
30
rogashova_ekaterina_lab_2/readme.md
Normal file
30
rogashova_ekaterina_lab_2/readme.md
Normal 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).
|
11
rogashova_ekaterina_lab_2/worker-1/Dockerfile
Normal file
11
rogashova_ekaterina_lab_2/worker-1/Dockerfile
Normal file
@ -0,0 +1,11 @@
|
||||
# Используем базовый образ с Python
|
||||
FROM python:3.9-slim
|
||||
|
||||
# Устанавливаем рабочую директорию
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем файл с кодом программы в контейнер
|
||||
COPY findfile.py .
|
||||
|
||||
# Запускаем приложение
|
||||
CMD ["python", "findfile.py"]
|
23
rogashova_ekaterina_lab_2/worker-1/findfile.py
Normal file
23
rogashova_ekaterina_lab_2/worker-1/findfile.py
Normal 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)
|
11
rogashova_ekaterina_lab_2/worker-2/Dockerfile
Normal file
11
rogashova_ekaterina_lab_2/worker-2/Dockerfile
Normal file
@ -0,0 +1,11 @@
|
||||
# Используем базовый образ с Python
|
||||
FROM python:3.9-slim
|
||||
|
||||
# Устанавливаем рабочую директорию
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем файл с кодом программы в контейнер
|
||||
COPY findnumber.py .
|
||||
|
||||
# Запускаем приложение
|
||||
CMD ["python", "findnumber.py"]
|
29
rogashova_ekaterina_lab_2/worker-2/findnumber.py
Normal file
29
rogashova_ekaterina_lab_2/worker-2/findnumber.py
Normal 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)
|
Loading…
Reference in New Issue
Block a user