From 82ecad71f468df3c97b24efdd704fc62871fb2db Mon Sep 17 00:00:00 2001 From: just1valery Date: Tue, 1 Oct 2024 19:42:31 +0400 Subject: [PATCH] =?UTF-8?q?is=20ready=20(=D1=83=D1=80=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vaksman_valeria_lab_2/.env | 4 + vaksman_valeria_lab_2/.gitignote | 3 + vaksman_valeria_lab_2/README.md | 43 ++++++++ vaksman_valeria_lab_2/app_one/Dockerfile | 11 +++ vaksman_valeria_lab_2/app_one/First.py | 31 ++++++ vaksman_valeria_lab_2/app_two/Dockerfile | 11 +++ vaksman_valeria_lab_2/app_two/Second.py | 18 ++++ vaksman_valeria_lab_2/data/random_file_1.txt | 8 ++ vaksman_valeria_lab_2/data/random_file_10.txt | 72 ++++++++++++++ vaksman_valeria_lab_2/data/random_file_2.txt | 75 ++++++++++++++ vaksman_valeria_lab_2/data/random_file_3.txt | 97 +++++++++++++++++++ vaksman_valeria_lab_2/data/random_file_4.txt | 83 ++++++++++++++++ vaksman_valeria_lab_2/data/random_file_5.txt | 95 ++++++++++++++++++ vaksman_valeria_lab_2/data/random_file_6.txt | 37 +++++++ vaksman_valeria_lab_2/data/random_file_7.txt | 72 ++++++++++++++ vaksman_valeria_lab_2/data/random_file_8.txt | 65 +++++++++++++ vaksman_valeria_lab_2/data/random_file_9.txt | 65 +++++++++++++ vaksman_valeria_lab_2/docker-compose.yaml | 27 ++++++ .../file_generator/Dockerfile | 11 +++ .../file_generator/Generator.py | 31 ++++++ vaksman_valeria_lab_2/result/data.txt | 97 +++++++++++++++++++ vaksman_valeria_lab_2/result/result.txt | 1 + 22 files changed, 957 insertions(+) create mode 100644 vaksman_valeria_lab_2/.env create mode 100644 vaksman_valeria_lab_2/.gitignote create mode 100644 vaksman_valeria_lab_2/README.md create mode 100644 vaksman_valeria_lab_2/app_one/Dockerfile create mode 100644 vaksman_valeria_lab_2/app_one/First.py create mode 100644 vaksman_valeria_lab_2/app_two/Dockerfile create mode 100644 vaksman_valeria_lab_2/app_two/Second.py create mode 100644 vaksman_valeria_lab_2/data/random_file_1.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_10.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_2.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_3.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_4.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_5.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_6.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_7.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_8.txt create mode 100644 vaksman_valeria_lab_2/data/random_file_9.txt create mode 100644 vaksman_valeria_lab_2/docker-compose.yaml create mode 100644 vaksman_valeria_lab_2/file_generator/Dockerfile create mode 100644 vaksman_valeria_lab_2/file_generator/Generator.py create mode 100644 vaksman_valeria_lab_2/result/data.txt create mode 100644 vaksman_valeria_lab_2/result/result.txt diff --git a/vaksman_valeria_lab_2/.env b/vaksman_valeria_lab_2/.env new file mode 100644 index 0000000..c03a118 --- /dev/null +++ b/vaksman_valeria_lab_2/.env @@ -0,0 +1,4 @@ +DB_HOST = db +DB_USER = wordpress +DB_PASSWORD = wordpress +DB_NAME = wordpress \ No newline at end of file diff --git a/vaksman_valeria_lab_2/.gitignote b/vaksman_valeria_lab_2/.gitignote new file mode 100644 index 0000000..bc0685a --- /dev/null +++ b/vaksman_valeria_lab_2/.gitignote @@ -0,0 +1,3 @@ +result/ +data/ +.vscode/ \ No newline at end of file diff --git a/vaksman_valeria_lab_2/README.md b/vaksman_valeria_lab_2/README.md new file mode 100644 index 0000000..e16529b --- /dev/null +++ b/vaksman_valeria_lab_2/README.md @@ -0,0 +1,43 @@ +# Лабораторная работа №2 - Разработка простейшего распределённого приложения + +## Задание + +* Разработать два приложения такие, что результат первого является исходными данными для второго. +* Собрать файл ```docker-compose.yml``` для запуска приложений. + +Изучить файлы сборки образов ```docker``` и разработать их для созданных приложений и правильно закоммитить решение + +### Варианты задания: + 1. ```app_one``` - Ищет в каталоге ```/var/data``` файл с наибольшим количеством строк и перекладывает его в ```/var/result/data.txt.``` + + 2. ```app_two``` - Ищет наименьшее число из файла ```/var/data/data.txt``` и сохраняет его третью степень в ```/var/result/result.txt.``` + + +## Запуск + +## Запуск работы + +1. Убедиться, что установлены необходимые технологии: + - Docker: Платформа для контейнеризации приложений. + - Docker Compose: Инструмент для запуска многоконтейнерных приложений на основе `docker-compose.yaml`. Обычно поставляется вместе с Docker. Чтобы проверить, установлена ли утилита, нужно запустить команду: +```bash + docker-compose --version +``` + +2. В директории, где находится файл `docker-compose.yaml`, выполнить следующую команду для запуска всех сервисов: +```bash + docker-compose up --build +``` +Эта команда сначала выполнит сборку, а затем запустит контейнеры. + +3. После успешного запуска можно перейти в каталог проекта и увидеть папку data со сгенерированными файлами и папку result, в которой два текстовых файла: + - data.txt - файл, полученный после выполнения первой программы. + - result.txt -файл, полученный после выполнения второй программы. + +## Описание работы: + +Для разработки приложений был выбран язык программирования - ```python``` +Построчное описание docker-compose.yaml и других файлов выполнено в самих файлах. + +# Вк видео +https://vk.com/video256017065_456239871?list=ln-0dkZ8lxZS2VXpSR3TP \ No newline at end of file diff --git a/vaksman_valeria_lab_2/app_one/Dockerfile b/vaksman_valeria_lab_2/app_one/Dockerfile new file mode 100644 index 0000000..37963ad --- /dev/null +++ b/vaksman_valeria_lab_2/app_one/Dockerfile @@ -0,0 +1,11 @@ +# Официальный образ Python 3.10 +FROM python:3.10-slim + +# Установка рабочей директории +WORKDIR /app + +# Копирование всех (в данном случае одного) файлов в контейнер +COPY First.py /app/ + +# Запуск программы +CMD ["python", "First.py"] \ No newline at end of file diff --git a/vaksman_valeria_lab_2/app_one/First.py b/vaksman_valeria_lab_2/app_one/First.py new file mode 100644 index 0000000..ee66932 --- /dev/null +++ b/vaksman_valeria_lab_2/app_one/First.py @@ -0,0 +1,31 @@ +import os +import shutil + +# Пути к директориии для поиска и файла для сохранения +source_dir = '/var/data' +destination_file = '/var/result/data.txt' + +# Простая функция дл подсчёта строк в файле. Настроили для работы с кириллицей (utf-8) +def count_lines(filepath): + with open(filepath, 'r', encoding='utf-8', errors='ignore') as f: + return sum(1 for _ in f) + +# Старт поиска файла по условию (самое большое кол-во строк) +max_lines = 0 +max_file = None + +for filename in os.listdir(source_dir): + file_path = os.path.join(source_dir, filename) + + if os.path.isfile(file_path): + lines = count_lines(file_path) + if lines > max_lines: + max_lines = lines + max_file = file_path + +# Копирование файла с самым большим кол-вом строчек в нужную директорию +if max_file: + shutil.copy(max_file, destination_file) + print(f"{max_file} с кол-вом строк {max_lines} был перемещен в {destination_file}") +else: + print("Указанная директория пустая :(") \ No newline at end of file diff --git a/vaksman_valeria_lab_2/app_two/Dockerfile b/vaksman_valeria_lab_2/app_two/Dockerfile new file mode 100644 index 0000000..1c75dc7 --- /dev/null +++ b/vaksman_valeria_lab_2/app_two/Dockerfile @@ -0,0 +1,11 @@ +# Официальный образ Python 3.10 +FROM python:3.10-slim + +# Установка рабочей директории +WORKDIR /app + +# Копирование всех (в данном случае одного) файлов в контейнер +COPY Second.py /app/ + +# Запуск программы +CMD ["python", "Second.py"] \ No newline at end of file diff --git a/vaksman_valeria_lab_2/app_two/Second.py b/vaksman_valeria_lab_2/app_two/Second.py new file mode 100644 index 0000000..f018ab3 --- /dev/null +++ b/vaksman_valeria_lab_2/app_two/Second.py @@ -0,0 +1,18 @@ +# Пути к директориии c файлами для поиска и сохранения +input_file = '/var/result/data.txt' +output_file = '/var/result/result.txt' + +# Поиск наименьшего числа в файле +with open(input_file, 'r') as f: + numbers = [float(line.strip()) for line in f if line.strip()] + +# Искомое min число +min_number = min(numbers) + +cubed_number = min_number ** 3 + +# Сохранение +with open(output_file, 'w') as f: + f.write(str(cubed_number)) + +print(f"Наименьшее число: {min_number}\nЕго третья степень: {cubed_number}\nРезультат сохранён в {output_file}") diff --git a/vaksman_valeria_lab_2/data/random_file_1.txt b/vaksman_valeria_lab_2/data/random_file_1.txt new file mode 100644 index 0000000..ece9a63 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_1.txt @@ -0,0 +1,8 @@ +278 +940 +336 +99 +360 +451 +836 +359 diff --git a/vaksman_valeria_lab_2/data/random_file_10.txt b/vaksman_valeria_lab_2/data/random_file_10.txt new file mode 100644 index 0000000..1d19341 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_10.txt @@ -0,0 +1,72 @@ +240 +468 +64 +586 +648 +230 +203 +295 +979 +621 +528 +718 +107 +822 +323 +691 +446 +667 +994 +645 +985 +604 +664 +465 +541 +747 +163 +329 +993 +374 +968 +512 +739 +774 +928 +433 +560 +610 +336 +194 +572 +735 +775 +617 +712 +412 +324 +40 +837 +15 +100 +28 +682 +498 +628 +832 +889 +964 +941 +167 +777 +400 +413 +361 +326 +796 +68 +154 +355 +866 +161 +76 diff --git a/vaksman_valeria_lab_2/data/random_file_2.txt b/vaksman_valeria_lab_2/data/random_file_2.txt new file mode 100644 index 0000000..dbac60f --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_2.txt @@ -0,0 +1,75 @@ +116 +224 +318 +215 +419 +465 +431 +319 +838 +430 +366 +906 +166 +69 +576 +173 +879 +177 +43 +586 +34 +990 +794 +474 +961 +980 +771 +170 +262 +294 +294 +718 +802 +745 +464 +411 +626 +702 +809 +917 +580 +368 +101 +674 +564 +335 +581 +437 +907 +546 +545 +545 +237 +205 +263 +503 +759 +199 +915 +835 +765 +784 +562 +834 +921 +784 +242 +547 +988 +477 +823 +640 +440 +475 +151 diff --git a/vaksman_valeria_lab_2/data/random_file_3.txt b/vaksman_valeria_lab_2/data/random_file_3.txt new file mode 100644 index 0000000..7c9bc18 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_3.txt @@ -0,0 +1,97 @@ +157 +634 +716 +273 +113 +861 +144 +182 +379 +619 +766 +375 +857 +836 +380 +752 +328 +460 +560 +369 +900 +258 +78 +847 +275 +802 +903 +892 +211 +294 +68 +590 +193 +913 +164 +855 +583 +983 +696 +330 +327 +798 +442 +669 +211 +677 +225 +633 +784 +961 +246 +683 +184 +247 +315 +9 +876 +260 +743 +200 +813 +578 +465 +429 +738 +783 +695 +206 +658 +701 +612 +689 +66 +971 +334 +371 +638 +549 +720 +497 +569 +945 +701 +415 +200 +422 +977 +931 +854 +638 +583 +870 +938 +53 +349 +572 +414 diff --git a/vaksman_valeria_lab_2/data/random_file_4.txt b/vaksman_valeria_lab_2/data/random_file_4.txt new file mode 100644 index 0000000..69da733 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_4.txt @@ -0,0 +1,83 @@ +830 +7 +232 +405 +514 +173 +739 +974 +156 +469 +232 +226 +988 +957 +272 +491 +721 +703 +751 +797 +379 +866 +119 +697 +846 +634 +840 +483 +660 +258 +48 +399 +807 +344 +370 +373 +304 +520 +464 +80 +258 +57 +172 +343 +693 +342 +893 +702 +794 +313 +767 +466 +966 +433 +842 +845 +836 +676 +560 +398 +442 +531 +548 +896 +488 +573 +662 +427 +840 +962 +460 +108 +146 +862 +651 +559 +755 +536 +14 +702 +709 +379 +231 diff --git a/vaksman_valeria_lab_2/data/random_file_5.txt b/vaksman_valeria_lab_2/data/random_file_5.txt new file mode 100644 index 0000000..c8b785c --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_5.txt @@ -0,0 +1,95 @@ +278 +58 +817 +997 +915 +183 +750 +625 +302 +228 +819 +357 +797 +672 +990 +207 +477 +872 +40 +792 +45 +405 +669 +375 +137 +807 +876 +84 +726 +813 +629 +301 +331 +143 +598 +429 +827 +173 +850 +548 +19 +907 +185 +392 +257 +349 +480 +314 +510 +239 +420 +994 +880 +492 +366 +540 +96 +283 +331 +604 +38 +93 +844 +197 +780 +159 +338 +932 +661 +936 +573 +602 +319 +512 +472 +419 +374 +144 +872 +76 +634 +535 +365 +247 +169 +5 +934 +483 +252 +807 +533 +387 +323 +791 +701 diff --git a/vaksman_valeria_lab_2/data/random_file_6.txt b/vaksman_valeria_lab_2/data/random_file_6.txt new file mode 100644 index 0000000..a972818 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_6.txt @@ -0,0 +1,37 @@ +149 +821 +575 +117 +846 +682 +74 +706 +415 +736 +910 +392 +31 +210 +425 +565 +645 +396 +774 +16 +882 +260 +668 +997 +94 +286 +170 +506 +494 +634 +635 +319 +943 +885 +555 +662 +727 diff --git a/vaksman_valeria_lab_2/data/random_file_7.txt b/vaksman_valeria_lab_2/data/random_file_7.txt new file mode 100644 index 0000000..1da3076 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_7.txt @@ -0,0 +1,72 @@ +91 +433 +212 +692 +903 +322 +360 +926 +952 +428 +142 +775 +939 +979 +241 +298 +697 +951 +688 +613 +801 +653 +543 +815 +356 +170 +25 +620 +57 +102 +483 +317 +982 +531 +15 +286 +948 +494 +102 +537 +871 +741 +412 +135 +543 +228 +158 +9 +852 +432 +598 +997 +367 +139 +783 +475 +73 +761 +466 +520 +605 +444 +353 +473 +8 +925 +977 +634 +769 +905 +115 +213 diff --git a/vaksman_valeria_lab_2/data/random_file_8.txt b/vaksman_valeria_lab_2/data/random_file_8.txt new file mode 100644 index 0000000..7770788 --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_8.txt @@ -0,0 +1,65 @@ +764 +559 +169 +642 +513 +341 +376 +904 +912 +313 +522 +226 +467 +172 +952 +315 +359 +612 +695 +487 +564 +697 +681 +31 +186 +222 +212 +631 +177 +46 +443 +252 +262 +662 +480 +750 +560 +148 +342 +119 +659 +82 +846 +84 +726 +182 +286 +648 +252 +826 +848 +351 +98 +619 +630 +503 +507 +527 +662 +961 +403 +752 +756 +938 +16 diff --git a/vaksman_valeria_lab_2/data/random_file_9.txt b/vaksman_valeria_lab_2/data/random_file_9.txt new file mode 100644 index 0000000..c41013c --- /dev/null +++ b/vaksman_valeria_lab_2/data/random_file_9.txt @@ -0,0 +1,65 @@ +498 +783 +418 +943 +427 +460 +545 +38 +892 +345 +552 +605 +591 +958 +903 +927 +38 +950 +774 +596 +314 +177 +499 +706 +440 +943 +451 +13 +306 +126 +831 +311 +834 +304 +186 +265 +456 +21 +320 +746 +570 +708 +172 +702 +320 +532 +491 +334 +757 +505 +83 +167 +312 +511 +723 +92 +885 +904 +608 +542 +579 +679 +615 +993 +60 diff --git a/vaksman_valeria_lab_2/docker-compose.yaml b/vaksman_valeria_lab_2/docker-compose.yaml new file mode 100644 index 0000000..55d667c --- /dev/null +++ b/vaksman_valeria_lab_2/docker-compose.yaml @@ -0,0 +1,27 @@ +services: + # Сервис файлового генератора + generator: + build: + context: ./file_generator # Путь к директории с Dockerfile + volumes: + - ./data:/var/data # Монтирование локальной папки data в /var/data, то есть в контейнере + + # Сервис первой программы + app_one: + depends_on: # повесили ожидание запуска генератора файлов + - generator + build: + context: ./app_one/ # Путь к директории с Dockerfile + volumes: + - ./data:/var/data + - ./result:/var/result + + # Сервис второй программы + app_two: + depends_on: # повесили ожидание запуска первой программы + - app_one + build: + context: ./app_two/ # Путь к директории с Dockerfile + volumes: + - ./data:/var/data + - ./result:/var/result \ No newline at end of file diff --git a/vaksman_valeria_lab_2/file_generator/Dockerfile b/vaksman_valeria_lab_2/file_generator/Dockerfile new file mode 100644 index 0000000..04de305 --- /dev/null +++ b/vaksman_valeria_lab_2/file_generator/Dockerfile @@ -0,0 +1,11 @@ +# Официальный образ Python 3.10 +FROM python:3.10-slim + +# Установка рабочей директории +WORKDIR /app + +# Копирование всех (в данном случае одного) файлов в контейнер +COPY Generator.py /app/ + +# Запуск программы +CMD ["python", "Generator.py"] \ No newline at end of file diff --git a/vaksman_valeria_lab_2/file_generator/Generator.py b/vaksman_valeria_lab_2/file_generator/Generator.py new file mode 100644 index 0000000..56bf987 --- /dev/null +++ b/vaksman_valeria_lab_2/file_generator/Generator.py @@ -0,0 +1,31 @@ +import os +import random + +# Директория для генерации файлов +output_dir = '/var/data' + +# Проверка на наличие таковой +os.makedirs(output_dir, exist_ok=True) + +# Генерируем случайное кол-во файлов (1-15) +num_files = random.randint(1, 15) + +# Случайное по всем статьям заполнение файла +def generate_random_file(filename): + + # Рандомное кол-во строк в файле + num_lines = random.randint(1, 100) + + with open(filename, 'w') as f: + for _ in range(num_lines): + # Для полного швепса выбираем случайное число + random_number = random.randint(0, 1000) + f.write(f"{random_number}\n") + +# Запускаем генерацию нашего набора файлов +for i in range(num_files): + filename = os.path.join(output_dir, f'random_file_{i + 1}.txt') + generate_random_file(filename) + print(f"Генерация файла {filename}.") + +print(f"Общее кол-во сгенерированных файлов: {num_files}") diff --git a/vaksman_valeria_lab_2/result/data.txt b/vaksman_valeria_lab_2/result/data.txt new file mode 100644 index 0000000..7c9bc18 --- /dev/null +++ b/vaksman_valeria_lab_2/result/data.txt @@ -0,0 +1,97 @@ +157 +634 +716 +273 +113 +861 +144 +182 +379 +619 +766 +375 +857 +836 +380 +752 +328 +460 +560 +369 +900 +258 +78 +847 +275 +802 +903 +892 +211 +294 +68 +590 +193 +913 +164 +855 +583 +983 +696 +330 +327 +798 +442 +669 +211 +677 +225 +633 +784 +961 +246 +683 +184 +247 +315 +9 +876 +260 +743 +200 +813 +578 +465 +429 +738 +783 +695 +206 +658 +701 +612 +689 +66 +971 +334 +371 +638 +549 +720 +497 +569 +945 +701 +415 +200 +422 +977 +931 +854 +638 +583 +870 +938 +53 +349 +572 +414 diff --git a/vaksman_valeria_lab_2/result/result.txt b/vaksman_valeria_lab_2/result/result.txt new file mode 100644 index 0000000..0d0f040 --- /dev/null +++ b/vaksman_valeria_lab_2/result/result.txt @@ -0,0 +1 @@ +729.0 \ No newline at end of file