From 84e8cac1981d041f84a58b5680b2534e75b36940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D0=B8=D1=88=D0=B8=D0=BD=D0=B0=29?= <Аришина)@DESKTOP-OUE59OV> Date: Mon, 7 Oct 2024 14:09:04 +0400 Subject: [PATCH 1/5] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D1=80=D0=B0=D0=B4=D0=BE?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dolgov_dmitriy_lab_2/.gitignore | 2 + dolgov_dmitriy_lab_2/README.md | 34 +++++++++++++++ dolgov_dmitriy_lab_2/app1/Dockerfile | 8 ++++ dolgov_dmitriy_lab_2/app1/app1.py | 27 ++++++++++++ dolgov_dmitriy_lab_2/app2/Dockerfile | 8 ++++ dolgov_dmitriy_lab_2/app2/app2.py | 26 ++++++++++++ dolgov_dmitriy_lab_2/docker-compose.yml | 42 +++++++++++++++++++ .../file_generator/Dockerfile | 7 ++++ .../file_generator/file_generator.py | 33 +++++++++++++++ 9 files changed, 187 insertions(+) create mode 100644 dolgov_dmitriy_lab_2/.gitignore create mode 100644 dolgov_dmitriy_lab_2/README.md create mode 100644 dolgov_dmitriy_lab_2/app1/Dockerfile create mode 100644 dolgov_dmitriy_lab_2/app1/app1.py create mode 100644 dolgov_dmitriy_lab_2/app2/Dockerfile create mode 100644 dolgov_dmitriy_lab_2/app2/app2.py create mode 100644 dolgov_dmitriy_lab_2/docker-compose.yml create mode 100644 dolgov_dmitriy_lab_2/file_generator/Dockerfile create mode 100644 dolgov_dmitriy_lab_2/file_generator/file_generator.py 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() + + From 0c0a47549a6c67552abad982b9fa3f8aa19b3236 Mon Sep 17 00:00:00 2001 From: devil_1nc Date: Mon, 7 Oct 2024 14:11:37 +0400 Subject: [PATCH 2/5] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dolgov=5Fdmitriy=5Flab=5F2/README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dolgov_dmitriy_lab_2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dolgov_dmitriy_lab_2/README.md b/dolgov_dmitriy_lab_2/README.md index d1702a5..b142dee 100644 --- a/dolgov_dmitriy_lab_2/README.md +++ b/dolgov_dmitriy_lab_2/README.md @@ -6,6 +6,7 @@ * _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt. * _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt. +* Кроме того, для генерации файлов был реализован сервис file_generator ### Были использованы следующие технологии: From b2ac5eba9a664a6bba3f7d30c1a5dce5ae206ca4 Mon Sep 17 00:00:00 2001 From: devil_1nc Date: Mon, 7 Oct 2024 14:12:19 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dolgov=5Fdmitriy=5Flab=5F2/README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dolgov_dmitriy_lab_2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dolgov_dmitriy_lab_2/README.md b/dolgov_dmitriy_lab_2/README.md index b142dee..aa50aa4 100644 --- a/dolgov_dmitriy_lab_2/README.md +++ b/dolgov_dmitriy_lab_2/README.md @@ -6,7 +6,7 @@ * _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt. * _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt. -* Кроме того, для генерации файлов был реализован сервис file_generator +Кроме того, для генерации файлов был реализован сервис file_generator ### Были использованы следующие технологии: From ead06782ad5d54b3f637cd1890d61a5406e8cd48 Mon Sep 17 00:00:00 2001 From: devil_1nc Date: Mon, 7 Oct 2024 14:12:39 +0400 Subject: [PATCH 4/5] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dolgov=5Fdmitriy=5Flab=5F2/README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dolgov_dmitriy_lab_2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dolgov_dmitriy_lab_2/README.md b/dolgov_dmitriy_lab_2/README.md index aa50aa4..bb8bf4b 100644 --- a/dolgov_dmitriy_lab_2/README.md +++ b/dolgov_dmitriy_lab_2/README.md @@ -6,6 +6,7 @@ * _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt. * _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt. + Кроме того, для генерации файлов был реализован сервис file_generator ### Были использованы следующие технологии: From 2f368ffb07acf6e676e3ebb14a9328166777bcf8 Mon Sep 17 00:00:00 2001 From: devil_1nc Date: Mon, 7 Oct 2024 15:31:54 +0400 Subject: [PATCH 5/5] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dolgov=5Fdmitriy=5Flab=5F2/README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dolgov_dmitriy_lab_2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dolgov_dmitriy_lab_2/README.md b/dolgov_dmitriy_lab_2/README.md index bb8bf4b..9cbcefe 100644 --- a/dolgov_dmitriy_lab_2/README.md +++ b/dolgov_dmitriy_lab_2/README.md @@ -1,4 +1,4 @@ -# Лабораторная работа №1 +# Лабораторная работа №2 ## Выполнил: Долгов Дмитрий, группа ПИбд-42