rogashova_ekaterina_lab_2 #85
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