All that's left is to update Readme.

This commit is contained in:
ElEgEv 2024-09-27 23:30:06 +04:00
parent 37996c249a
commit 83e7b192c7
11 changed files with 279 additions and 0 deletions

3
.gitignore vendored
View File

@ -7,3 +7,6 @@
/dozorova_alena_lab_2/ConsoleApp2/.vs
/dozorova_alena_lab_2/ConsoleApp2/bin
/dozorova_alena_lab_2/ConsoleApp2/obj
/vaksman_valerya_lab_2/result/
/vaksman_valerya_lab_2/data/
.vscode/

View File

@ -0,0 +1,4 @@
DB_HOST = db
DB_USER = wordpress
DB_PASSWORD = wordpress
DB_NAME = wordpress

View File

@ -0,0 +1,3 @@
result/
data/
.vscode/

View 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

View File

@ -0,0 +1,11 @@
# Официальный образ Python 3.10
FROM python:3.10-slim
# Установка рабочей директории
WORKDIR /app
# Копирование всех (в данном случае одного) файлов в контейнер
COPY First.py /app/
# Запуск программы
CMD ["python", "First.py"]

View 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("Указанная директория пустая :(")

View File

@ -0,0 +1,11 @@
# Официальный образ Python 3.10
FROM python:3.10-slim
# Установка рабочей директории
WORKDIR /app
# Копирование всех (в данном случае одного) файлов в контейнер
COPY Second.py /app/
# Запуск программы
CMD ["python", "Second.py"]

View File

@ -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}")

View File

@ -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

View File

@ -0,0 +1,11 @@
# Официальный образ Python 3.10
FROM python:3.10-slim
# Установка рабочей директории
WORKDIR /app
# Копирование всех (в данном случае одного) файлов в контейнер
COPY Generator.py /app/
# Запуск программы
CMD ["python", "Generator.py"]

View 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}")