diff --git a/dolgov_dmitriy_lab_2/.gitignore b/dolgov_dmitriy_lab_2/.gitignore new file mode 100644 index 0000000..d8adfc8 --- /dev/null +++ b/dolgov_dmitriy_lab_2/.gitignore @@ -0,0 +1,2 @@ +data +result \ No newline at end of file diff --git a/dolgov_dmitriy_lab_2/README.md b/dolgov_dmitriy_lab_2/README.md new file mode 100644 index 0000000..d1702a5 --- /dev/null +++ b/dolgov_dmitriy_lab_2/README.md @@ -0,0 +1,34 @@ +# Лабораторная работа №1 + +## Выполнил: Долгов Дмитрий, группа ПИбд-42 + +### Были выбраны следующие варианты программ: + +* _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt. +* _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt. + +### Были использованы следующие технологии: + +* 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). \ No newline at end of file diff --git a/dolgov_dmitriy_lab_2/app1/Dockerfile b/dolgov_dmitriy_lab_2/app1/Dockerfile new file mode 100644 index 0000000..47eb0be --- /dev/null +++ b/dolgov_dmitriy_lab_2/app1/Dockerfile @@ -0,0 +1,8 @@ +# Стандартный образ Python +FROM python:3.9 +# Указываем рабочую директорию +WORKDIR /app +# Копируем в ней файл app1.py +COPY app1.py . +# Команда для запуска при старте контейнера +CMD ["python", "app1.py"] \ No newline at end of file diff --git a/dolgov_dmitriy_lab_2/app1/app1.py b/dolgov_dmitriy_lab_2/app1/app1.py new file mode 100644 index 0000000..f2cfb03 --- /dev/null +++ b/dolgov_dmitriy_lab_2/app1/app1.py @@ -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() \ No newline at end of file diff --git a/dolgov_dmitriy_lab_2/app2/Dockerfile b/dolgov_dmitriy_lab_2/app2/Dockerfile new file mode 100644 index 0000000..fb7a142 --- /dev/null +++ b/dolgov_dmitriy_lab_2/app2/Dockerfile @@ -0,0 +1,8 @@ +# Стандартный образ Python +FROM python:3.9 +# Указываем рабочую директорию +WORKDIR /app +# Копируем содержимое текущей директории в рабочую директорию +COPY app2.py . +# Запускаем приложение +CMD ["python", "app2.py"] \ No newline at end of file diff --git a/dolgov_dmitriy_lab_2/app2/app2.py b/dolgov_dmitriy_lab_2/app2/app2.py new file mode 100644 index 0000000..b456867 --- /dev/null +++ b/dolgov_dmitriy_lab_2/app2/app2.py @@ -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() diff --git a/dolgov_dmitriy_lab_2/docker-compose.yml b/dolgov_dmitriy_lab_2/docker-compose.yml new file mode 100644 index 0000000..e97dd11 --- /dev/null +++ b/dolgov_dmitriy_lab_2/docker-compose.yml @@ -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"] diff --git a/dolgov_dmitriy_lab_2/file_generator/Dockerfile b/dolgov_dmitriy_lab_2/file_generator/Dockerfile new file mode 100644 index 0000000..de3e22e --- /dev/null +++ b/dolgov_dmitriy_lab_2/file_generator/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.9 + +WORKDIR /app + +COPY file_generator.py . + +CMD [ "python", "file_generator.py" ] \ No newline at end of file diff --git a/dolgov_dmitriy_lab_2/file_generator/file_generator.py b/dolgov_dmitriy_lab_2/file_generator/file_generator.py new file mode 100644 index 0000000..e760ec0 --- /dev/null +++ b/dolgov_dmitriy_lab_2/file_generator/file_generator.py @@ -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() + +