forked from Alexey/DAS_2024_1
Compare commits
5 Commits
vasina_eka
...
dolgov_dmi
| Author | SHA1 | Date | |
|---|---|---|---|
| 2f368ffb07 | |||
| ead06782ad | |||
| b2ac5eba9a | |||
| 0c0a47549a | |||
|
|
84e8cac198 |
2
dolgov_dmitriy_lab_2/.gitignore
vendored
Normal file
2
dolgov_dmitriy_lab_2/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
data
|
||||
result
|
||||
36
dolgov_dmitriy_lab_2/README.md
Normal file
36
dolgov_dmitriy_lab_2/README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# Лабораторная работа №2
|
||||
|
||||
## Выполнил: Долгов Дмитрий, группа ПИбд-42
|
||||
|
||||
### Были выбраны следующие варианты программ:
|
||||
|
||||
* _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt.
|
||||
* _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt.
|
||||
|
||||
Кроме того, для генерации файлов был реализован сервис file_generator
|
||||
|
||||
### Были использованы следующие технологии:
|
||||
|
||||
* 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).
|
||||
8
dolgov_dmitriy_lab_2/app1/Dockerfile
Normal file
8
dolgov_dmitriy_lab_2/app1/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
# Стандартный образ Python
|
||||
FROM python:3.9
|
||||
# Указываем рабочую директорию
|
||||
WORKDIR /app
|
||||
# Копируем в ней файл app1.py
|
||||
COPY app1.py .
|
||||
# Команда для запуска при старте контейнера
|
||||
CMD ["python", "app1.py"]
|
||||
27
dolgov_dmitriy_lab_2/app1/app1.py
Normal file
27
dolgov_dmitriy_lab_2/app1/app1.py
Normal file
@@ -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()
|
||||
8
dolgov_dmitriy_lab_2/app2/Dockerfile
Normal file
8
dolgov_dmitriy_lab_2/app2/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
# Стандартный образ Python
|
||||
FROM python:3.9
|
||||
# Указываем рабочую директорию
|
||||
WORKDIR /app
|
||||
# Копируем содержимое текущей директории в рабочую директорию
|
||||
COPY app2.py .
|
||||
# Запускаем приложение
|
||||
CMD ["python", "app2.py"]
|
||||
26
dolgov_dmitriy_lab_2/app2/app2.py
Normal file
26
dolgov_dmitriy_lab_2/app2/app2.py
Normal file
@@ -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()
|
||||
42
dolgov_dmitriy_lab_2/docker-compose.yml
Normal file
42
dolgov_dmitriy_lab_2/docker-compose.yml
Normal file
@@ -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"]
|
||||
7
dolgov_dmitriy_lab_2/file_generator/Dockerfile
Normal file
7
dolgov_dmitriy_lab_2/file_generator/Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM python:3.9
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY file_generator.py .
|
||||
|
||||
CMD [ "python", "file_generator.py" ]
|
||||
33
dolgov_dmitriy_lab_2/file_generator/file_generator.py
Normal file
33
dolgov_dmitriy_lab_2/file_generator/file_generator.py
Normal file
@@ -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()
|
||||
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
# Лабораторная работа №1 - Знакомство с docker и docker-compose
|
||||
|
||||
## Задание
|
||||
|
||||
Развернуть 3 сервиса в контейнерах docker через docker-compose.
|
||||
|
||||
Необходимые требования:
|
||||
|
||||
* Несколько контейнеров.
|
||||
* Хотя бы один volume.
|
||||
* Хотя бы один порт, проброшенный на хост.
|
||||
* Разворачивание системы должно пройти до конца.
|
||||
|
||||
## Запуск работы:
|
||||
|
||||
Работа программы начинается после ввода в терминале команды:
|
||||
```
|
||||
docker-compose up -d
|
||||
|
||||
```
|
||||
|
||||
## Описание программы:
|
||||
|
||||
Сначала задаем основную структуру ```services:```. В этом разделе определяются сервисы, которые будут работать вместе.
|
||||
|
||||
Сервисы:
|
||||
|
||||
### mediawiki
|
||||
|
||||
```
|
||||
mediawiki:
|
||||
image: mediawiki:1.35
|
||||
ports:
|
||||
- "8080:80"
|
||||
volumes:
|
||||
- ./mediawiki-images:/var/www/html/images
|
||||
|
||||
```
|
||||
Задаем образ сборки, указываем используемую версию:
|
||||
```
|
||||
image: mediawiki:1.35
|
||||
|
||||
```
|
||||
Указываем порт:
|
||||
```
|
||||
ports:
|
||||
- "8080:80"
|
||||
|
||||
```
|
||||
Указываем том для хранения данных:
|
||||
```
|
||||
volumes:
|
||||
- ./mediawiki-images:/var/www/html/images
|
||||
|
||||
```
|
||||
|
||||
### redmine
|
||||
|
||||
Для сервиса redmine код будет выглядеть аналогично сервису mediawiki:
|
||||
|
||||
```
|
||||
redmine: # определение сервиса redmine
|
||||
image: redmine:latest # образ redmine последней версии
|
||||
ports: # проброс порта
|
||||
- "8082:3000"
|
||||
volumes: # настройки тома
|
||||
- ./redmine/files:/usr/src/redmine/files
|
||||
|
||||
```
|
||||
|
||||
### wordpress
|
||||
|
||||
```
|
||||
wordpress:
|
||||
image: wordpress:latest
|
||||
ports:
|
||||
- "8081:80"
|
||||
environment:
|
||||
- WORDPRESS_DB_HOST=db_wp
|
||||
- WORDPRESS_DB_USER=admin
|
||||
- WORDPRESS_DB_PASSWORD=admin123
|
||||
- WORDPRESS_DB_NAME=wpdb
|
||||
volumes:
|
||||
- ./wordpress:/var/www/html
|
||||
depends_on:
|
||||
- db_wp
|
||||
|
||||
```
|
||||
Для сервиса wordpress добавятся переменные окружения
|
||||
```
|
||||
environment:
|
||||
- WORDPRESS_DB_HOST=db_wp
|
||||
- WORDPRESS_DB_USER=admin
|
||||
- WORDPRESS_DB_PASSWORD=admin123
|
||||
- WORDPRESS_DB_NAME=wpdb
|
||||
volumes:
|
||||
|
||||
```
|
||||
и зависимости
|
||||
```
|
||||
depends_on:
|
||||
- db_wp
|
||||
|
||||
```
|
||||
А также база данных
|
||||
|
||||
```
|
||||
db_wp:
|
||||
image: mysql:5.7
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=rootpassword
|
||||
- MYSQL_DATABASE=wpdb
|
||||
- MYSQL_USER=admin
|
||||
- MYSQL_PASSWORD=admin123
|
||||
volumes:
|
||||
- db_wp-data:/var/lib/mysql
|
||||
|
||||
```
|
||||
|
||||
# Скриншоты работы программы:
|
||||
|
||||
Запуск программы в терминале
|
||||

|
||||
|
||||
# Видеозапись работы программмы
|
||||
https://vk.com/video174596752_456239390
|
||||
@@ -1,44 +0,0 @@
|
||||
services:
|
||||
mediawiki: # определение сервиса mediawiki
|
||||
image: mediawiki:1.35 # образ MediaWiki версии 1.35
|
||||
ports: # проброс порта
|
||||
- "8080:80"
|
||||
volumes: # настройки тома
|
||||
- ./mediawiki-images:/var/www/html/images
|
||||
|
||||
wordpress: # определение сервиса wordpress
|
||||
image: wordpress:latest # образ wordpress последней версии
|
||||
ports: # проброс порта
|
||||
- "8081:80"
|
||||
environment: # переменные окружения
|
||||
- WORDPRESS_DB_HOST=db_wp
|
||||
- WORDPRESS_DB_USER=admin
|
||||
- WORDPRESS_DB_PASSWORD=admin123
|
||||
- WORDPRESS_DB_NAME=wpdb
|
||||
volumes: # настройки тома
|
||||
- ./wordpress:/var/www/html
|
||||
depends_on: # зависимости
|
||||
- db_wp
|
||||
|
||||
db_wp: # бд для wordpress
|
||||
image: mysql:5.7 # используем mysql версии 5.7
|
||||
environment: # переменные окружения
|
||||
- MYSQL_ROOT_PASSWORD=rootpassword
|
||||
- MYSQL_DATABASE=wpdb
|
||||
- MYSQL_USER=admin
|
||||
- MYSQL_PASSWORD=admin123
|
||||
volumes: # настройки тома
|
||||
- db_wp-data:/var/lib/mysql
|
||||
|
||||
redmine: # определение сервиса redmine
|
||||
image: redmine:latest # образ redmine последней версии
|
||||
ports: # проброс порта
|
||||
- "8082:3000"
|
||||
volumes: # настройки тома
|
||||
- ./redmine/files:/usr/src/redmine/files
|
||||
|
||||
# определение томов, используемых для хранения данных
|
||||
volumes:
|
||||
mediawiki-data:
|
||||
db_wp-data:
|
||||
redmine-data:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
Reference in New Issue
Block a user