All that's left is to update README
This commit is contained in:
parent
37996c249a
commit
df1c52413b
182
.vscode/PythonImportHelper-v2-Completion.json
vendored
Normal file
182
.vscode/PythonImportHelper-v2-Completion.json
vendored
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"label": "os",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "os",
|
||||||
|
"description": "os",
|
||||||
|
"detail": "os",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "shutil",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "shutil",
|
||||||
|
"description": "shutil",
|
||||||
|
"detail": "shutil",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "random",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "random",
|
||||||
|
"description": "random",
|
||||||
|
"detail": "random",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "string",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "string",
|
||||||
|
"description": "string",
|
||||||
|
"detail": "string",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "count_lines",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"peekOfCode": "def count_lines(filepath):\n with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:\n return sum(1 for _ in f)\n# Старт поиска файла по условию (самое большое кол-во строк)\nmax_lines = 0\nmax_file = None\nfor filename in os.listdir(source_dir):\n file_path = os.path.join(source_dir, filename)\n if os.path.isfile(file_path):\n lines = count_lines(file_path)",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "source_dir",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"peekOfCode": "source_dir = '/var/data'\ndestination_file = '/var/result/data.txt'\n# Простая функция дл подсчёта строк в файле. Настроили для работы с кириллицей (utf-8)\ndef count_lines(filepath):\n with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:\n return sum(1 for _ in f)\n# Старт поиска файла по условию (самое большое кол-во строк)\nmax_lines = 0\nmax_file = None\nfor filename in os.listdir(source_dir):",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "destination_file",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"peekOfCode": "destination_file = '/var/result/data.txt'\n# Простая функция дл подсчёта строк в файле. Настроили для работы с кириллицей (utf-8)\ndef count_lines(filepath):\n with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:\n return sum(1 for _ in f)\n# Старт поиска файла по условию (самое большое кол-во строк)\nmax_lines = 0\nmax_file = None\nfor filename in os.listdir(source_dir):\n file_path = os.path.join(source_dir, filename)",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "max_lines",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"peekOfCode": "max_lines = 0\nmax_file = None\nfor filename in os.listdir(source_dir):\n file_path = os.path.join(source_dir, filename)\n if os.path.isfile(file_path):\n lines = count_lines(file_path)\n if lines > max_lines:\n max_lines = lines\n max_file = file_path\n# Копирование файла с самым большим кол-вом строчек в нужную директорию",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "max_file",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"peekOfCode": "max_file = None\nfor filename in os.listdir(source_dir):\n file_path = os.path.join(source_dir, filename)\n if os.path.isfile(file_path):\n lines = count_lines(file_path)\n if lines > max_lines:\n max_lines = lines\n max_file = file_path\n# Копирование файла с самым большим кол-вом строчек в нужную директорию\nif max_file:",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_one.First",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "input_file",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"peekOfCode": "input_file = './var/data/data.txt'\noutput_file = './var/result/result.txt'\n# Поиск наименьшего числа в файле\nwith open(input_file, 'r') as f:\n numbers = [float(line.strip()) for line in f if line.strip()]\n# Искомое min число\nmin_number = min(numbers)\ncubed_number = min_number ** 3\n# Сохранение\nwith open(output_file, 'w') as f:",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "output_file",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"peekOfCode": "output_file = './var/result/result.txt'\n# Поиск наименьшего числа в файле\nwith open(input_file, 'r') as f:\n numbers = [float(line.strip()) for line in f if line.strip()]\n# Искомое min число\nmin_number = min(numbers)\ncubed_number = min_number ** 3\n# Сохранение\nwith open(output_file, 'w') as f:\n f.write(str(cubed_number))",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "min_number",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"peekOfCode": "min_number = min(numbers)\ncubed_number = min_number ** 3\n# Сохранение\nwith open(output_file, 'w') as f:\n f.write(str(cubed_number))\nprint(f\"Наименьшее число: {min_number}\\nЕго третья степень: {cubed_number}\\nРезультат сохранён в {output_file}\")",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "cubed_number",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"description": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"peekOfCode": "cubed_number = min_number ** 3\n# Сохранение\nwith open(output_file, 'w') as f:\n f.write(str(cubed_number))\nprint(f\"Наименьшее число: {min_number}\\nЕго третья степень: {cubed_number}\\nРезультат сохранён в {output_file}\")",
|
||||||
|
"detail": "vaksman_valerya_lab_2.app_two.Second",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "generate_random_file",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"description": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"peekOfCode": "def generate_random_file(filename):\n # Рандомное кол-во строк в файле\n num_lines = random.randint(1, 100)\n with open(filename, 'w') as f:\n for _ in range(num_lines):\n # Для полного швепса выбираем случайное число\n random_number = random.randint(0, 1000)\n f.write(f\"{random_number}\\n\")\n# Запускаем генерацию нашего набора файлов\nfor i in range(num_files):",
|
||||||
|
"detail": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "output_dir",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"description": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"peekOfCode": "output_dir = './var/data'\n# Проверка на наличие таковой\nos.makedirs(output_dir, exist_ok=True)\n# Генерируем случайное кол-во файлов (1-15)\nnum_files = random.randint(1, 15)\n# Случайное по всем статьям заполнение файла\ndef generate_random_file(filename):\n # Рандомное кол-во строк в файле\n num_lines = random.randint(1, 100)\n with open(filename, 'w') as f:",
|
||||||
|
"detail": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "num_files",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"description": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"peekOfCode": "num_files = random.randint(1, 15)\n# Случайное по всем статьям заполнение файла\ndef generate_random_file(filename):\n # Рандомное кол-во строк в файле\n num_lines = random.randint(1, 100)\n with open(filename, 'w') as f:\n for _ in range(num_lines):\n # Для полного швепса выбираем случайное число\n random_number = random.randint(0, 1000)\n f.write(f\"{random_number}\\n\")",
|
||||||
|
"detail": "vaksman_valerya_lab_2.file_generator.Generator",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "find_shortest_filename",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "zhimolostnova_anna_lab_2.first_app.app",
|
||||||
|
"description": "zhimolostnova_anna_lab_2.first_app.app",
|
||||||
|
"peekOfCode": "def find_shortest_filename(source_dir, result_file):\n # Существует ли папка result? Если нет, то создается\n result_dir = os.path.dirname(result_file)\n if not os.path.exists(result_dir):\n os.makedirs(result_dir)\n print(f\"Created directory {result_dir}\")\n # Поиск файлов в исходной директории\n files = [f for f in os.listdir(source_dir) if os.path.isfile(os.path.join(source_dir, f))]\n if not files:\n print(f\"No files found in {source_dir}\")",
|
||||||
|
"detail": "zhimolostnova_anna_lab_2.first_app.app",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "generate_random_filename",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "zhimolostnova_anna_lab_2.generator.generate_files",
|
||||||
|
"description": "zhimolostnova_anna_lab_2.generator.generate_files",
|
||||||
|
"peekOfCode": "def generate_random_filename(length):\n return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length)) + '.txt'\ndef generate_data_files(directory, num_files, min_lines, max_lines):\n # Создание директории, если таковой не существует\n if not os.path.exists(directory):\n os.makedirs(directory)\n # Проверка, пустая ли директория\n if os.listdir(directory):\n print(f\"{directory} is not empty, skipping file generation.\")\n return",
|
||||||
|
"detail": "zhimolostnova_anna_lab_2.generator.generate_files",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "generate_data_files",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "zhimolostnova_anna_lab_2.generator.generate_files",
|
||||||
|
"description": "zhimolostnova_anna_lab_2.generator.generate_files",
|
||||||
|
"peekOfCode": "def generate_data_files(directory, num_files, min_lines, max_lines):\n # Создание директории, если таковой не существует\n if not os.path.exists(directory):\n os.makedirs(directory)\n # Проверка, пустая ли директория\n if os.listdir(directory):\n print(f\"{directory} is not empty, skipping file generation.\")\n return\n # Генерация файлов\n for _ in range(num_files):",
|
||||||
|
"detail": "zhimolostnova_anna_lab_2.generator.generate_files",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "find_smallest_number_and_cube",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "zhimolostnova_anna_lab_2.second_app.app",
|
||||||
|
"description": "zhimolostnova_anna_lab_2.second_app.app",
|
||||||
|
"peekOfCode": "def find_smallest_number_and_cube(input_file, output_file):\n # Проверка, существует ли файл data.txt\n if not os.path.exists(input_file):\n print(f\"File {input_file} does not exist.\")\n return\n # Чтение чисел из файла\n with open(input_file, 'r') as f:\n numbers = [int(line.strip()) for line in f.readlines()]\n if numbers:\n smallest_number = min(numbers)",
|
||||||
|
"detail": "zhimolostnova_anna_lab_2.second_app.app",
|
||||||
|
"documentation": {}
|
||||||
|
}
|
||||||
|
]
|
4
vaksman_valerya_lab_2/.env
Normal file
4
vaksman_valerya_lab_2/.env
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
DB_HOST = db
|
||||||
|
DB_USER = wordpress
|
||||||
|
DB_PASSWORD = wordpress
|
||||||
|
DB_NAME = wordpress
|
3
vaksman_valerya_lab_2/.gitignote
Normal file
3
vaksman_valerya_lab_2/.gitignote
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
result/
|
||||||
|
data/
|
||||||
|
.vscode/
|
129
vaksman_valerya_lab_2/README.md
Normal file
129
vaksman_valerya_lab_2/README.md
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
# Лабораторная работа №2 - Знакомство с docker и docker-compose
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
Разверните 3 сервиса на выбор в контейнерах docker с помощью docker-compose, учитывая следующие требования:
|
||||||
|
|
||||||
|
* Несколько контейнеров.
|
||||||
|
* Хотя бы один volume.
|
||||||
|
* Хотя бы один порт, проброшенный на хост.
|
||||||
|
* Разворачивание системы должно пройти до конца.
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
|
||||||
|
Введение в терминале команды:
|
||||||
|
```
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
# Выбранные сервисы
|
||||||
|
|
||||||
|
1. ```db``` - самая новая версия БД MaraiDB
|
||||||
|
|
||||||
|
2. ```phpmyadmin``` - система управления базой данных
|
||||||
|
|
||||||
|
3. ```mediawiki``` - движок вики
|
||||||
|
|
||||||
|
4. ```wordpress``` - платформа для управления контентом
|
||||||
|
|
||||||
|
|
||||||
|
## Описание работы:
|
||||||
|
|
||||||
|
Были развёрнуты следующие сервисы:
|
||||||
|
|
||||||
|
### phpmyadmin
|
||||||
|
|
||||||
|
```
|
||||||
|
phpmyadmin:
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
image: phpmyadmin
|
||||||
|
hostname: php_my_admin
|
||||||
|
container_name: php_my_admin
|
||||||
|
volumes: # см. конец файла
|
||||||
|
- php_my_admin_data:/var/www/html
|
||||||
|
ports:
|
||||||
|
- 8080:80
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
PMA_ARBITRARY: 1
|
||||||
|
TZ: "Europe/Moscow"
|
||||||
|
PMA_HOST: ${DB_HOST}
|
||||||
|
PMA_USER : ${DB_USER}
|
||||||
|
PMA_PASSWORD : ${DB_PASSWORD}
|
||||||
|
```
|
||||||
|
|
||||||
|
Этот код представляет собой часть файла конфигурации ```Docker Compose```, который используется для управления многоконтейнерными приложениями в Docker.
|
||||||
|
|
||||||
|
#### Объяснение работы кода:
|
||||||
|
|
||||||
|
Эта строка отвечает за образ сброки:
|
||||||
|
```
|
||||||
|
image: phpmyadmin
|
||||||
|
```
|
||||||
|
Задание имени контейнера:
|
||||||
|
```
|
||||||
|
container_name: php_my_admin
|
||||||
|
```
|
||||||
|
Проброс портов:
|
||||||
|
```
|
||||||
|
ports:
|
||||||
|
- 8080:80
|
||||||
|
```
|
||||||
|
Тома для хранения данных:
|
||||||
|
```
|
||||||
|
volumes:
|
||||||
|
- .php_my_admin_data:/var/www/html
|
||||||
|
|
||||||
|
```
|
||||||
|
Переменные окружения для Drupal
|
||||||
|
```
|
||||||
|
environment:
|
||||||
|
PMA_ARBITRARY: 1
|
||||||
|
TZ: "Europe/Moscow"
|
||||||
|
PMA_HOST: ${DB_HOST}
|
||||||
|
PMA_USER : ${DB_USER}
|
||||||
|
PMA_PASSWORD : ${DB_PASSWORD}
|
||||||
|
|
||||||
|
```
|
||||||
|
Аналогично со другими сервисами:
|
||||||
|
|
||||||
|
### mediawiki
|
||||||
|
|
||||||
|
```
|
||||||
|
image: mediawiki:latest # образ MediaWiki
|
||||||
|
container_name: mediawiki_app
|
||||||
|
volumes: # см. конец файла
|
||||||
|
- ./mediawiki_data:/var/www/html/mediawiki
|
||||||
|
ports:
|
||||||
|
- "8088:80"
|
||||||
|
restart: always
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wordpress
|
||||||
|
|
||||||
|
```
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
image: wordpress:latest
|
||||||
|
hostname: wp_app
|
||||||
|
container_name: wp_app
|
||||||
|
volumes: # см. конец файла
|
||||||
|
- wordpress_data:/var/www/html
|
||||||
|
ports:
|
||||||
|
- "8000:80"
|
||||||
|
restart: always
|
||||||
|
user: www-data
|
||||||
|
environment: # секция настроек для подключения wordpress к БД
|
||||||
|
TZ: "Europe/Moscow"
|
||||||
|
WORDPRESS_DB_HOST: ${DB_HOST}
|
||||||
|
WORDPRESS_DB_USER: ${DB_USER}
|
||||||
|
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
|
||||||
|
WORDPRESS_DB_NAME: ${DB_NAME}
|
||||||
|
```
|
||||||
|
# Скриншот работы
|
||||||
|
Панель консоли
|
||||||
|
![](1.png "")
|
||||||
|
|
||||||
|
# ВК
|
||||||
|
https://vk.com/video256017065_456239870?list=ln-qWUdZke5z53x940ZHv
|
11
vaksman_valerya_lab_2/app_one/Dockerfile
Normal file
11
vaksman_valerya_lab_2/app_one/Dockerfile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Официальный образ Python 3.10
|
||||||
|
FROM python:3.10-slim
|
||||||
|
|
||||||
|
# Установка рабочей директории
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Копирование всех (в данном случае одного) файлов в контейнер
|
||||||
|
COPY First.py /app/
|
||||||
|
|
||||||
|
# Запуск программы
|
||||||
|
CMD ["python", "First.py"]
|
31
vaksman_valerya_lab_2/app_one/First.py
Normal file
31
vaksman_valerya_lab_2/app_one/First.py
Normal file
@ -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("Указанная директория пустая :(")
|
11
vaksman_valerya_lab_2/app_two/Dockerfile
Normal file
11
vaksman_valerya_lab_2/app_two/Dockerfile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Официальный образ Python 3.10
|
||||||
|
FROM python:3.10-slim
|
||||||
|
|
||||||
|
# Установка рабочей директории
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Копирование всех (в данном случае одного) файлов в контейнер
|
||||||
|
COPY Second.py /app/
|
||||||
|
|
||||||
|
# Запуск программы
|
||||||
|
CMD ["python", "Second.py"]
|
18
vaksman_valerya_lab_2/app_two/Second.py
Normal file
18
vaksman_valerya_lab_2/app_two/Second.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Пути к директориии c файлами для поиска и сохранения
|
||||||
|
input_file = './var/data/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}")
|
25
vaksman_valerya_lab_2/docker-compose.yaml
Normal file
25
vaksman_valerya_lab_2/docker-compose.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
services:
|
||||||
|
# Сервис файлового генератора
|
||||||
|
generator:
|
||||||
|
build:
|
||||||
|
context: ./file_generator # Путь к директории с Dockerfile
|
||||||
|
|
||||||
|
# Сервис первой программы
|
||||||
|
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
|
11
vaksman_valerya_lab_2/file_generator/Dockerfile
Normal file
11
vaksman_valerya_lab_2/file_generator/Dockerfile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Официальный образ Python 3.10
|
||||||
|
FROM python:3.10-slim
|
||||||
|
|
||||||
|
# Установка рабочей директории
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Копирование всех (в данном случае одного) файлов в контейнер
|
||||||
|
COPY Generator.py /app/
|
||||||
|
|
||||||
|
# Запуск программы
|
||||||
|
CMD ["python", "Generator.py"]
|
31
vaksman_valerya_lab_2/file_generator/Generator.py
Normal file
31
vaksman_valerya_lab_2/file_generator/Generator.py
Normal file
@ -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}")
|
Loading…
Reference in New Issue
Block a user