Merge pull request 'dolgov_dmitriy_lab_2' (#48) from dolgov_dmitriy_lab_2 into main
Reviewed-on: #48
This commit is contained in:
commit
85b809333b
2
dolgov_dmitriy_lab_2/.gitignore
vendored
Normal file
2
dolgov_dmitriy_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
data
|
||||
result
|
36
dolgov_dmitriy_lab_2/README.md
Normal file
36
dolgov_dmitriy_lab_2/README.md
Normal file
@ -0,0 +1,36 @@
|
||||
# Лабораторная работа №2
|
||||
|
||||
## Выполнил: Долгов Дмитрий, группа ПИбд-42
|
||||
|
||||
### Были выбраны следующие варианты программ:
|
||||
|
||||
* _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt.
|
||||
* _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt.
|
||||
|
||||
Кроме того, для генерации файлов был реализован сервис file_generator
|
||||
|
||||
### Были использованы следующие технологии:
|
||||
|
||||
* git
|
||||
* docker
|
||||
* docker-compose
|
||||
* язык программирования Python
|
||||
|
||||
### Для запуска лабораторной работы, находясь в папке `dolgov_dmitriy_lab_2`, необходимо выполнить следующую команду:
|
||||
|
||||
```
|
||||
docker-compose up --build
|
||||
```
|
||||
Таким образом, запустятся все сервисы, необходимые для выполнения лабораторной работы.
|
||||
|
||||
## Результат запуска:
|
||||
```
|
||||
app2-1 | Наибольшее числовое значение: 29.0
|
||||
app2-1 | Результат: 841.0
|
||||
app1-1 | Файл file_3.txt успешно перемещен в /var/result/data.txt
|
||||
app2-1 exited with code 0
|
||||
app1-1 exited with code 0
|
||||
```
|
||||
## Видео с результатом запуска:
|
||||
|
||||
Видео можно посмотреть по данной [ссылке](https://drive.google.com/file/d/1Iw6BR0lRvh4382QsIEfr5E68-09aKX9C/view?usp=drive_link).
|
8
dolgov_dmitriy_lab_2/app1/Dockerfile
Normal file
8
dolgov_dmitriy_lab_2/app1/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
||||
# Стандартный образ Python
|
||||
FROM python:3.9
|
||||
# Указываем рабочую директорию
|
||||
WORKDIR /app
|
||||
# Копируем в ней файл app1.py
|
||||
COPY app1.py .
|
||||
# Команда для запуска при старте контейнера
|
||||
CMD ["python", "app1.py"]
|
27
dolgov_dmitriy_lab_2/app1/app1.py
Normal file
27
dolgov_dmitriy_lab_2/app1/app1.py
Normal file
@ -0,0 +1,27 @@
|
||||
import os
|
||||
import random
|
||||
import shutil
|
||||
|
||||
def move_random_file():
|
||||
src_dir = "/var/data"
|
||||
dst_file = "/var/result/data.txt"
|
||||
|
||||
# Получаем список всех файлов в src_dir
|
||||
files = os.listdir(src_dir)
|
||||
|
||||
if files:
|
||||
# Выбираем случайный файл
|
||||
random_file = random.choice(files)
|
||||
|
||||
# Проверяем, что файл существует
|
||||
if os.path.exists(os.path.join(src_dir, random_file)):
|
||||
# Перемещаем файл в целевое место
|
||||
shutil.move(os.path.join(src_dir, random_file), dst_file)
|
||||
print(f"Файл {random_file} успешно перемещен в {dst_file}")
|
||||
else:
|
||||
print(f"Ошибка: Файл {random_file} не найден в {src_dir}")
|
||||
else:
|
||||
print("Папка пуста")
|
||||
|
||||
if __name__ == "__main__":
|
||||
move_random_file()
|
8
dolgov_dmitriy_lab_2/app2/Dockerfile
Normal file
8
dolgov_dmitriy_lab_2/app2/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
||||
# Стандартный образ Python
|
||||
FROM python:3.9
|
||||
# Указываем рабочую директорию
|
||||
WORKDIR /app
|
||||
# Копируем содержимое текущей директории в рабочую директорию
|
||||
COPY app2.py .
|
||||
# Запускаем приложение
|
||||
CMD ["python", "app2.py"]
|
26
dolgov_dmitriy_lab_2/app2/app2.py
Normal file
26
dolgov_dmitriy_lab_2/app2/app2.py
Normal file
@ -0,0 +1,26 @@
|
||||
import os
|
||||
from math import sqrt
|
||||
|
||||
def find_largest_number_and_square():
|
||||
input_file = "/var/data/data.txt"
|
||||
output_file = "/var/result/result.txt"
|
||||
|
||||
try:
|
||||
with open(input_file, 'r') as f:
|
||||
numbers = [float(num.strip()) for num in f]
|
||||
|
||||
largest_num = max(numbers)
|
||||
squared_num = largest_num ** 2
|
||||
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(str(squared_num))
|
||||
|
||||
print(f"Наибольшее числовое значение: {largest_num}")
|
||||
print(f"Результат: {squared_num}")
|
||||
except FileNotFoundError:
|
||||
print(f"Ошибка: Файл {input_file} не найден")
|
||||
except ValueError:
|
||||
print("Ошибка: В файле содержатся некорректные данные")
|
||||
|
||||
if __name__ == "__main__":
|
||||
find_largest_number_and_square()
|
42
dolgov_dmitriy_lab_2/docker-compose.yml
Normal file
42
dolgov_dmitriy_lab_2/docker-compose.yml
Normal file
@ -0,0 +1,42 @@
|
||||
# Сервисы, которые будут запускаться
|
||||
services:
|
||||
# Сервис генерации файлов
|
||||
file_generator:
|
||||
build:
|
||||
# Директория с Dockerfile и скриптом генератора
|
||||
context: ./file_generator
|
||||
dockerfile: Dockerfile
|
||||
# Монтирование локальной папки data в /var/data в контейнере
|
||||
volumes:
|
||||
- ./data:/var/data
|
||||
- ./result:/var/result
|
||||
# Запуск команды, которая генерирует файл в папке /var/data
|
||||
command: ["python", "file_generator.py"]
|
||||
|
||||
# Первая программа, которая перемещает рандомный файл из одной папки в другую
|
||||
app1:
|
||||
build:
|
||||
# Директория с Dockerfile для первого приложения
|
||||
context: ./app1
|
||||
dockerfile: Dockerfile
|
||||
# Монтирование локальной папки result в /var/result в контейнере
|
||||
volumes:
|
||||
- ./result:/var/result
|
||||
- ./data:/var/data
|
||||
# Указывает, что первый сервис зависит от завершения работы генератора
|
||||
depends_on:
|
||||
- file_generator
|
||||
# Запуск скрипта
|
||||
command: ["python", "app1.py"]
|
||||
|
||||
# Вторая программа, которая считает квадрат максимального числа в файле (пояснения аналогичны первой)
|
||||
app2:
|
||||
build:
|
||||
context: ./app2
|
||||
dockerfile: Dockerfile
|
||||
volumes:
|
||||
- ./result:/var/result
|
||||
- ./data:/var/data
|
||||
depends_on:
|
||||
- file_generator
|
||||
command: ["python", "app2.py"]
|
7
dolgov_dmitriy_lab_2/file_generator/Dockerfile
Normal file
7
dolgov_dmitriy_lab_2/file_generator/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
||||
FROM python:3.9
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY file_generator.py .
|
||||
|
||||
CMD [ "python", "file_generator.py" ]
|
33
dolgov_dmitriy_lab_2/file_generator/file_generator.py
Normal file
33
dolgov_dmitriy_lab_2/file_generator/file_generator.py
Normal file
@ -0,0 +1,33 @@
|
||||
import os
|
||||
import random
|
||||
|
||||
def generate_files(count):
|
||||
directory = "/var/data/"
|
||||
if not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
for _ in range(count):
|
||||
file_name = f"{directory}file_{random.randint(1, 10)}.txt"
|
||||
|
||||
with open(file_name, 'w') as f:
|
||||
for _ in range(random.randint(1, 100)):
|
||||
f.write(f"{random.randint(1, 100)}\n")
|
||||
|
||||
print(f"Сгенерирован файл {file_name}")
|
||||
|
||||
|
||||
def generate_data():
|
||||
|
||||
file_name = "/var/data/data.txt"
|
||||
|
||||
with open(file_name, 'w') as f:
|
||||
for _ in range(random.randint(10, 100)):
|
||||
f.write(f"{random.randint(1, 30)}\n")
|
||||
print(f"Сгенерирован файл {file_name}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_files(10)
|
||||
generate_data()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user