forked from Alexey/DAS_2024_1
Compare commits
21 Commits
tsukanova_
...
vaksman_va
| Author | SHA1 | Date | |
|---|---|---|---|
| 82ecad71f4 | |||
| 8a96320fd5 | |||
| bd25930973 | |||
| 37996c249a | |||
| 9456d4fe01 | |||
| c14e105db5 | |||
| 4d1e900721 | |||
| 7184d6d728 | |||
|
|
6e7055efa4 | ||
|
|
9e40adc53c | ||
|
|
4a36528cc7 | ||
|
|
21cdd4971d | ||
| bdb5cc07ed | |||
| e761e33201 | |||
|
|
ceee500b95 | ||
| 2be2c71b69 | |||
|
|
aa8180ba49 | ||
|
|
ba7480cb4f | ||
| 520337f92d | |||
| 06d1d8cdd4 | |||
|
|
1adaac9281 |
2
bazunov_andrew_lab_1/.gitignore
vendored
Normal file
2
bazunov_andrew_lab_1/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
ollama
|
||||
./ollama
|
||||
33
bazunov_andrew_lab_1/README.md
Normal file
33
bazunov_andrew_lab_1/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Распределенные вычисления и приложения Л1
|
||||
## _Автор Базунов Андрей Игревич ПИбд-42_
|
||||
|
||||
В качестве сервисов были выбраны:
|
||||
- 1.Ollama (_Сервис для использования LLMs моделей_)
|
||||
- 2.Open Web Ui (_Сервис для удобного общения с моделью из сервиса Ollama_)
|
||||
- 3.Gitea (_Гит сервис_)
|
||||
|
||||
# Docker
|
||||
|
||||
>Перед исполнением вполняем установку docker и проверяем версию
|
||||
|
||||
```sh
|
||||
docker-compose --version
|
||||
```
|
||||
|
||||
>Далее производим настройку файла docker-compose.yaml и запускаем контейнер
|
||||
|
||||
```sh
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
>Для завершения работы контейнера используем команду
|
||||
```sh
|
||||
docker-compose down
|
||||
```
|
||||
---
|
||||
> Замечание: после запуска контейнера, необходимо перейти в контейнер **ollamа** и выполнить установку модели [gemma2](https://ollama.com/library/gemma2:2b)
|
||||
> ```sh
|
||||
> docker-compose exec ollama ollama run ollama run gemma2:2b
|
||||
> ```
|
||||
---
|
||||
Далее можно использовать веб сервис Open Web Ui по адресу **localhost:8080** для общения с моделью и Gitea по адресу **localhost:3000** - [демонстрация работы](https://vk.com/video/@viltskaa?z=video236673313_456239574%2Fpl_236673313_-2)
|
||||
61
bazunov_andrew_lab_1/docker-compose.yml
Normal file
61
bazunov_andrew_lab_1/docker-compose.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
services:
|
||||
gitea: # Имя сервиса
|
||||
image: gitea/gitea:latest # Имя образа
|
||||
container_name: gitea # Имя контейнера, может быть произовольным
|
||||
ports:
|
||||
- "3000:3000" # Проброс порта Gitea на хост
|
||||
volumes: # хранилище
|
||||
- data:/data
|
||||
environment: # переменные окружения
|
||||
USER_UID: 1000
|
||||
USER_GID: 1000
|
||||
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama
|
||||
restart: always
|
||||
ports:
|
||||
- 7869:11434
|
||||
pull_policy: always
|
||||
tty: true
|
||||
volumes:
|
||||
- .:/code
|
||||
- ./ollama/ollama:/root/.ollama # Директория для данных Ollama
|
||||
environment:
|
||||
- OLLAMA_KEEP_ALIVE=24h
|
||||
- OLLAMA_HOST=0.0.0.0 # Указываем хост для API Ollama
|
||||
networks:
|
||||
- ollama-docker
|
||||
command: ["serve"] # Запускаем Ollama в режиме сервера
|
||||
|
||||
ollama-webui:
|
||||
image: ghcr.io/open-webui/open-webui:main # Образ Open Web UI
|
||||
container_name: ollama-webui
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./ollama/ollama-webui:/app/backend/data
|
||||
ports:
|
||||
- 8080:8080 # Порт для веб-интерфейса
|
||||
environment: # https://docs.openwebui.com/getting-started/env-configuration#default_models
|
||||
- OLLAMA_BASE_URLS=http://host.docker.internal:7869
|
||||
- ENV=dev
|
||||
- WEBUI_AUTH=False
|
||||
- WEBUI_NAME=Viltskaa AI
|
||||
- WEBUI_URL=http://localhost:8080
|
||||
- WEBUI_SECRET_KEY=t0p-s3cr3t
|
||||
depends_on:
|
||||
- ollama
|
||||
extra_hosts:
|
||||
- host.docker.internal:host-gateway
|
||||
networks:
|
||||
- ollama-docker
|
||||
|
||||
networks:
|
||||
ollama-docker:
|
||||
external: false
|
||||
|
||||
volumes:
|
||||
ollama:
|
||||
driver: local
|
||||
data:
|
||||
driver: local
|
||||
38
borschevskaya_anna_lab_2/.gitignore
vendored
Normal file
38
borschevskaya_anna_lab_2/.gitignore
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
43
borschevskaya_anna_lab_2/README.md
Normal file
43
borschevskaya_anna_lab_2/README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Отчет. Лабораторная работа 2
|
||||
|
||||
В рамках лабораторной работы №2 были написаны два сервиса, работающих с текстовыми файлами.
|
||||
Для первого сервиса был выбран вариант задания №5:
|
||||
```
|
||||
Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt.
|
||||
```
|
||||
А для второго - №2:
|
||||
```
|
||||
Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
|
||||
```
|
||||
## Описание
|
||||
Сначала сервис first перемещает данные из файла с самым коротким названием, находящегося в указанной примонтированной директории, в выходную папку.
|
||||
Доступ к выходной папке имеет второй сервис, который выводит наименьшее число из помещенного первым сервисом файла
|
||||
в третьей степени в выходной файл.
|
||||
Выходной файл расположен в примонтированной директории и доступен на машине, где запускаются сервисы.
|
||||
|
||||
В Dockerfile используется многоэтапная сборка с использованием нескольких базовых образов на каждом этапе.
|
||||
Описание значения каждой строки есть в Dockerfile в сервисе first.
|
||||
|
||||
В файле docker-compose.yml приведено описание новых строк, связанных с подключением примонтированных томов.
|
||||
Стоит отметить, что для "общения" сервисов используется общий том common, который монтируется в контейнер по пути /var/result. Это позволяет сохранять результаты
|
||||
работы первого сервиса для использования вторым сервисом.
|
||||
## Как запустить
|
||||
Для того, чтобы запустить сервисы, необходимо выполнить следующие действия:
|
||||
1. Установить и запустить Docker Engine или Docker Desktop
|
||||
2. Через консоль перейти в папку, в которой расположен файл docker-compose.yml
|
||||
3. Выполнить команду:
|
||||
```
|
||||
docker compose up --build
|
||||
```
|
||||
В случае успешного запуска всех контейнеров в консоли будет выведено следующее сообщение:
|
||||
```
|
||||
✔ Network borschevskaya_anna_lab_2_default Created 0.1s
|
||||
✔ Container borschevskaya_anna_lab_2-first-1 Created 0.1s
|
||||
✔ Container borschevskaya_anna_lab_2-second-1 Created 0.1s
|
||||
Attaching to borschevskaya_anna_lab_2-first-1, borschevskaya_anna_lab_2-second-1
|
||||
```
|
||||
Далее, в консоль каждого сервиса будут выведены сообщения о том, как прошла обработка файлов.
|
||||
В случае отсутствия заданных значений переменных окружения INPUT_PATH и OUTPUT_PATH и
|
||||
в иных исключительных ситуация будет выведена информация об этом.
|
||||
## Видео-отчет
|
||||
Работоспособность лабораторной работы можно оценить в следующем [видео](https://disk.yandex.ru/i/LFxdyRUFQDwXEQ).
|
||||
22
borschevskaya_anna_lab_2/docker-compose.yml
Normal file
22
borschevskaya_anna_lab_2/docker-compose.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
services:
|
||||
first:
|
||||
build: ./first # директория, в которой нужно искать Dockerfile для сборки первого сервиса
|
||||
environment:
|
||||
INPUT_PATH: /var/data/ # директория с входными данными для обработки файлов
|
||||
OUTPUT_PATH: /var/result/ # директория с выходными данными обработки
|
||||
volumes:
|
||||
- ./volumes/input:/var/data # монтируется локальная папка с входными данными в папку внутри контейнера
|
||||
- common:/var/result # монтируется общий для двух сервисов том, в который first сложит результаты обработки по варианту
|
||||
second:
|
||||
build: ./second # директория, в которой нужно искать Dockerfile для сборки второго сервиса
|
||||
depends_on: # сервис second зависит от сервиса first и будет запущен после него
|
||||
- first
|
||||
environment:
|
||||
INPUT_PATH: /var/result/
|
||||
OUTPUT_PATH: /var/data/
|
||||
volumes:
|
||||
- ./volumes/output:/var/data
|
||||
- common:/var/result # монтируется общий для двух сервисов том, из которого second получит результаты обработки first сервиса и выполнит свою логику
|
||||
|
||||
volumes:
|
||||
common:
|
||||
25
borschevskaya_anna_lab_2/first/Dockerfile
Normal file
25
borschevskaya_anna_lab_2/first/Dockerfile
Normal file
@@ -0,0 +1,25 @@
|
||||
# Используем образ Maven для сборки
|
||||
FROM maven:3.8-eclipse-temurin-21-alpine AS build
|
||||
|
||||
# Устанавливаем рабочую директорию
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем только pom.xml и загружаем зависимости
|
||||
# Так зависимости закэшируются в Docker при изменении кода закэшированные слои с зависимостями будут подгружаться быстрее
|
||||
COPY pom.xml .
|
||||
RUN mvn dependency:go-offline
|
||||
|
||||
# Копируем остальные исходные файлы
|
||||
COPY src ./src
|
||||
|
||||
# Собираем весь проект
|
||||
RUN mvn clean package -DskipTests
|
||||
|
||||
# Используем официальный образ JDK для запуска собранного jar-файла
|
||||
FROM eclipse-temurin:21-jdk-alpine
|
||||
|
||||
# Копируем jar-файл из предыдущего этапа
|
||||
COPY --from=build /app/target/*.jar /app.jar
|
||||
|
||||
# Указываем команду для запуска приложения
|
||||
CMD ["java", "-jar", "app.jar"]
|
||||
37
borschevskaya_anna_lab_2/first/pom.xml
Normal file
37
borschevskaya_anna_lab_2/first/pom.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>ru.first</groupId>
|
||||
<artifactId>first</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>21</maven.compiler.source>
|
||||
<maven.compiler.target>21</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<!-- Build an executable JAR -->
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
<mainClass>ru.first.Main</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,50 @@
|
||||
package ru.first;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
|
||||
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
||||
import static java.util.Objects.isNull;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static final String INPUT_PATH = System.getenv("INPUT_PATH");
|
||||
public static final String OUTPUT_PATH = System.getenv("OUTPUT_PATH");
|
||||
public static final String RESULT_FILE_NAME = "data.txt";
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
if (isNull(INPUT_PATH) || INPUT_PATH.isEmpty() || isNull(OUTPUT_PATH) || OUTPUT_PATH.isEmpty()) {
|
||||
System.out.printf("Отсутствуют переменные окружения INPUT_PATH = '%s' или OUTPUT_PATH = '%s'%n",
|
||||
INPUT_PATH, OUTPUT_PATH);
|
||||
return;
|
||||
}
|
||||
var inputPathDir = Path.of(INPUT_PATH);
|
||||
if (!Files.exists(inputPathDir)) {
|
||||
Files.createDirectory(inputPathDir);
|
||||
}
|
||||
var inputDirectory = new File(INPUT_PATH);
|
||||
var allDirFiles = inputDirectory.listFiles();
|
||||
if (isNull(allDirFiles) || allDirFiles.length == 0) {
|
||||
System.out.println("Директория пуста");
|
||||
return;
|
||||
}
|
||||
var dirFiles = Arrays.stream(allDirFiles).filter(File::isFile).toList();
|
||||
if (dirFiles.isEmpty()) {
|
||||
System.out.println("В указанной директории нет подходящих для обработки файлов");
|
||||
return;
|
||||
}
|
||||
|
||||
var shortestName = dirFiles.stream().min(Comparator.comparing(file -> file.getName().length())).get();
|
||||
|
||||
var outputPathDir = Path.of(OUTPUT_PATH);
|
||||
if (!Files.exists(outputPathDir)) {
|
||||
Files.createDirectory(outputPathDir);
|
||||
}
|
||||
var resultFilePath = Path.of(OUTPUT_PATH + File.separator + RESULT_FILE_NAME);
|
||||
Files.move(Path.of(INPUT_PATH + File.separator + shortestName.getName()), resultFilePath, REPLACE_EXISTING);
|
||||
}
|
||||
}
|
||||
16
borschevskaya_anna_lab_2/second/Dockerfile
Normal file
16
borschevskaya_anna_lab_2/second/Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
||||
FROM maven:3.8-eclipse-temurin-21-alpine AS build
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY pom.xml .
|
||||
RUN mvn dependency:go-offline
|
||||
|
||||
COPY src ./src
|
||||
|
||||
RUN mvn clean package -DskipTests
|
||||
|
||||
FROM eclipse-temurin:21-jdk-alpine
|
||||
|
||||
COPY --from=build /app/target/*.jar /app.jar
|
||||
|
||||
CMD ["java", "-jar", "app.jar"]
|
||||
36
borschevskaya_anna_lab_2/second/pom.xml
Normal file
36
borschevskaya_anna_lab_2/second/pom.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>ru.second</groupId>
|
||||
<artifactId>second</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>21</maven.compiler.source>
|
||||
<maven.compiler.target>21</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
<mainClass>ru.second.Main</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,51 @@
|
||||
package ru.second;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.nio.file.Files;
|
||||
|
||||
import static java.util.Objects.isNull;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static final String INPUT_PATH = System.getenv("INPUT_PATH");
|
||||
public static final String INPUT_FILE_NAME = "data.txt";
|
||||
|
||||
public static final String OUTPUT_PATH = System.getenv("OUTPUT_PATH");
|
||||
public static final String RESULT_FILE_NAME = "result.txt";
|
||||
|
||||
public static void main(String[] args) {
|
||||
if (isNull(INPUT_PATH) || INPUT_PATH.isEmpty() || isNull(OUTPUT_PATH) || OUTPUT_PATH.isEmpty()) {
|
||||
System.out.printf("Отсутствуют переменные окружения INPUT_PATH = '%s' или OUTPUT_PATH = '%s'%n",
|
||||
INPUT_PATH, OUTPUT_PATH);
|
||||
return;
|
||||
}
|
||||
|
||||
var inputFile = new File(INPUT_PATH + File.separator + INPUT_FILE_NAME);
|
||||
if (!inputFile.exists()) {
|
||||
System.out.println("Входной файл не существует");
|
||||
return;
|
||||
}
|
||||
|
||||
try (var stream = Files.lines(inputFile.toPath());
|
||||
var writer = new FileWriter(OUTPUT_PATH + File.separator + RESULT_FILE_NAME);
|
||||
) {
|
||||
var min = stream.map(Main::parseInt).reduce(Integer::min);
|
||||
if (min.isEmpty()) {
|
||||
System.out.println("Не найдено минимальное значение среди строк файла");
|
||||
return;
|
||||
}
|
||||
var minValue = Math.pow(min.get(), 3);
|
||||
System.out.printf("Get min value = '%d'%n", min.get());
|
||||
writer.append(Double.toString(minValue));
|
||||
System.out.printf("To file %s was written value %f%n", RESULT_FILE_NAME, minValue);
|
||||
} catch (Exception ex) {
|
||||
System.out.println(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static Integer parseInt(String line) {
|
||||
line = line.replace("\\n", "");
|
||||
return Integer.parseInt(line);
|
||||
}
|
||||
}
|
||||
4
dolgov_dmitriy_lab_1/.gitignore
vendored
Normal file
4
dolgov_dmitriy_lab_1/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
data/
|
||||
log/
|
||||
wordpress/
|
||||
custom/
|
||||
34
dolgov_dmitriy_lab_1/README.md
Normal file
34
dolgov_dmitriy_lab_1/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Лабораторная работа №1
|
||||
|
||||
## Выполнил: Долгов Дмитрий, группа ПИбд-42
|
||||
|
||||
### Были развёрнуты следующие сервисы:
|
||||
|
||||
* mediawiki (движок вики)
|
||||
* wordpress (популярная система управления контентом)
|
||||
* gitea (сервис для хранения репозиториев git)
|
||||
* mariaDB
|
||||
### Были использованы следующие технологии:
|
||||
|
||||
* git
|
||||
* docker
|
||||
* docker-compose
|
||||
|
||||
|
||||
### Для запуска лабораторной работы необходимо ввести в консоль следующую команду:
|
||||
```
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Результат запуска:
|
||||
```
|
||||
[+] Running 4/4
|
||||
✔ Container dolgov_dmitriy_lab_1-wordpress-1 Running 0.0s
|
||||
✔ Container dolgov_dmitriy_lab_1-database-1 Running 0.0s
|
||||
✔ Container dolgov_dmitriy_lab_1-mediawiki-1 Running 0.0s
|
||||
✔ Container gitea Running
|
||||
```
|
||||
|
||||
## Видео с результатом запуска:
|
||||
|
||||
Видео можно посмотреть по данной [ссылке](https://drive.google.com/file/d/1hC6HhNvYBRuYVClobXyDMReA4ngwxhwc/view?usp=drive_link).
|
||||
73
dolgov_dmitriy_lab_1/docker-compose.yml
Normal file
73
dolgov_dmitriy_lab_1/docker-compose.yml
Normal file
@@ -0,0 +1,73 @@
|
||||
# Сервисы по заданию
|
||||
services:
|
||||
# Сервис MediaWiki
|
||||
mediawiki:
|
||||
# Образ MediaWiki
|
||||
image: mediawiki
|
||||
# Автоматический перезапуск при сбое
|
||||
restart: always
|
||||
# проброс порта 80 из контейнера на порт 8080 хоста
|
||||
ports:
|
||||
- "8080:80"
|
||||
# связь с сервисом database
|
||||
links:
|
||||
- database
|
||||
# монтирование volume для хранения данных
|
||||
volumes:
|
||||
- images:/var/www/html/images
|
||||
|
||||
# Сервис WordPress
|
||||
wordpress:
|
||||
# Образ WordPress
|
||||
image: wordpress:latest
|
||||
# Автоматический перезапуск при сбое
|
||||
ports:
|
||||
- "8082:80"
|
||||
restart: always
|
||||
volumes:
|
||||
- ./wordpress:/var/www/html
|
||||
|
||||
# Сервис Gitea
|
||||
server:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
restart: always
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./custom:/app/gitea/custom
|
||||
- ./log:/app/gitea/log
|
||||
ports:
|
||||
- "8081:3000"
|
||||
links:
|
||||
- database
|
||||
depends_on:
|
||||
- database
|
||||
|
||||
# Сервис MariaDB
|
||||
database:
|
||||
# Образ MariaDB
|
||||
image: mariadb
|
||||
# Автоматический перезапуск при сбое
|
||||
restart: always
|
||||
# переменные окружения для настройки базы данных
|
||||
environment:
|
||||
# имя базы данных
|
||||
MYSQL_DATABASE: my_wiki
|
||||
# имя пользователя
|
||||
MYSQL_USER: user
|
||||
# пароль пользователя
|
||||
MYSQL_PASSWORD: user
|
||||
# случайный пароль для пользователя root
|
||||
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
|
||||
# монтирование volume для хранения данных
|
||||
volumes:
|
||||
- db:/var/lib/mysql
|
||||
|
||||
# тома для хранения данных
|
||||
volumes:
|
||||
images:
|
||||
db:
|
||||
|
||||
BIN
dolgov_dmitriy_lab_1/screenshots/image.png
Normal file
BIN
dolgov_dmitriy_lab_1/screenshots/image.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 275 KiB |
29
presnyakova_victoria_lab_1/docker-compose.yml
Normal file
29
presnyakova_victoria_lab_1/docker-compose.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
services:
|
||||
rabbitmq:
|
||||
image: rabbitmq:3.12.8-management
|
||||
environment:
|
||||
RABBITMQ_DEFAULT_USER: admin
|
||||
RABBITMQ_DEFAULT_PASS: admin
|
||||
ports:
|
||||
- 15672:15672
|
||||
volumes:
|
||||
- rabbitmq-data:/var/lib/rabbitmq
|
||||
|
||||
mediawiki:
|
||||
image: mediawiki
|
||||
ports:
|
||||
- 8081:80
|
||||
volumes:
|
||||
- mediawiki-data:/var/files/mediawiki
|
||||
|
||||
wordpress:
|
||||
image: wordpress
|
||||
ports:
|
||||
- 8082:80
|
||||
volumes:
|
||||
- wordpress-data:/var/files/wordpress
|
||||
|
||||
volumes:
|
||||
rabbitmq-data:
|
||||
mediawiki-data:
|
||||
wordpress-data:
|
||||
26
presnyakova_victoria_lab_1/readme.md
Normal file
26
presnyakova_victoria_lab_1/readme.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Docker Compose: RabbitMQ, Mediawiki, Wordpress
|
||||
|
||||
## Описание проекта
|
||||
|
||||
Этот проект разворачивает три сервиса с помощью Docker Compose:
|
||||
1. **RabbitMQ** — брокер сообщений.
|
||||
2. **Mediawiki** — движок вики.
|
||||
3. **Wordpress** — популярная система управления контентом.
|
||||
|
||||
|
||||
## Команды для запуска
|
||||
|
||||
Из директории с файлом docker-compose.yml запустить сервисы docker-compose up --build
|
||||
|
||||
## Сервисы и порты
|
||||
1. **RabbitMQ:**
|
||||
Доступ по адресу http://localhost:15672/ (логин: admin, пароль: admin).
|
||||
|
||||
2. **Mediawiki:**
|
||||
Доступ по адресу http://localhost:8081/.
|
||||
|
||||
|
||||
3. **Wordpress:**
|
||||
Доступ по адресу http://localhost:8082/.
|
||||
|
||||
## Видео https://drive.google.com/file/d/1NvsMFoMU2ecsQ17EouqB_ZaLBskonHv0/view?usp=sharing
|
||||
4
vaksman_valeria_lab_2/.env
Normal file
4
vaksman_valeria_lab_2/.env
Normal file
@@ -0,0 +1,4 @@
|
||||
DB_HOST = db
|
||||
DB_USER = wordpress
|
||||
DB_PASSWORD = wordpress
|
||||
DB_NAME = wordpress
|
||||
3
vaksman_valeria_lab_2/.gitignote
Normal file
3
vaksman_valeria_lab_2/.gitignote
Normal file
@@ -0,0 +1,3 @@
|
||||
result/
|
||||
data/
|
||||
.vscode/
|
||||
43
vaksman_valeria_lab_2/README.md
Normal file
43
vaksman_valeria_lab_2/README.md
Normal file
@@ -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
|
||||
11
vaksman_valeria_lab_2/app_one/Dockerfile
Normal file
11
vaksman_valeria_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_valeria_lab_2/app_one/First.py
Normal file
31
vaksman_valeria_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_valeria_lab_2/app_two/Dockerfile
Normal file
11
vaksman_valeria_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_valeria_lab_2/app_two/Second.py
Normal file
18
vaksman_valeria_lab_2/app_two/Second.py
Normal 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}")
|
||||
8
vaksman_valeria_lab_2/data/random_file_1.txt
Normal file
8
vaksman_valeria_lab_2/data/random_file_1.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
278
|
||||
940
|
||||
336
|
||||
99
|
||||
360
|
||||
451
|
||||
836
|
||||
359
|
||||
72
vaksman_valeria_lab_2/data/random_file_10.txt
Normal file
72
vaksman_valeria_lab_2/data/random_file_10.txt
Normal file
@@ -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
|
||||
75
vaksman_valeria_lab_2/data/random_file_2.txt
Normal file
75
vaksman_valeria_lab_2/data/random_file_2.txt
Normal file
@@ -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
|
||||
97
vaksman_valeria_lab_2/data/random_file_3.txt
Normal file
97
vaksman_valeria_lab_2/data/random_file_3.txt
Normal file
@@ -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
|
||||
83
vaksman_valeria_lab_2/data/random_file_4.txt
Normal file
83
vaksman_valeria_lab_2/data/random_file_4.txt
Normal file
@@ -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
|
||||
95
vaksman_valeria_lab_2/data/random_file_5.txt
Normal file
95
vaksman_valeria_lab_2/data/random_file_5.txt
Normal file
@@ -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
|
||||
37
vaksman_valeria_lab_2/data/random_file_6.txt
Normal file
37
vaksman_valeria_lab_2/data/random_file_6.txt
Normal file
@@ -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
|
||||
72
vaksman_valeria_lab_2/data/random_file_7.txt
Normal file
72
vaksman_valeria_lab_2/data/random_file_7.txt
Normal file
@@ -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
|
||||
65
vaksman_valeria_lab_2/data/random_file_8.txt
Normal file
65
vaksman_valeria_lab_2/data/random_file_8.txt
Normal file
@@ -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
|
||||
65
vaksman_valeria_lab_2/data/random_file_9.txt
Normal file
65
vaksman_valeria_lab_2/data/random_file_9.txt
Normal file
@@ -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
|
||||
27
vaksman_valeria_lab_2/docker-compose.yaml
Normal file
27
vaksman_valeria_lab_2/docker-compose.yaml
Normal 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
|
||||
11
vaksman_valeria_lab_2/file_generator/Dockerfile
Normal file
11
vaksman_valeria_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_valeria_lab_2/file_generator/Generator.py
Normal file
31
vaksman_valeria_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}")
|
||||
97
vaksman_valeria_lab_2/result/data.txt
Normal file
97
vaksman_valeria_lab_2/result/data.txt
Normal file
@@ -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
|
||||
1
vaksman_valeria_lab_2/result/result.txt
Normal file
1
vaksman_valeria_lab_2/result/result.txt
Normal file
@@ -0,0 +1 @@
|
||||
729.0
|
||||
30
yakovleva_yulia_lab_2/.dockerignore
Normal file
30
yakovleva_yulia_lab_2/.dockerignore
Normal file
@@ -0,0 +1,30 @@
|
||||
**/.classpath
|
||||
**/.dockerignore
|
||||
**/.env
|
||||
**/.git
|
||||
**/.gitignore
|
||||
**/.project
|
||||
**/.settings
|
||||
**/.toolstarget
|
||||
**/.vs
|
||||
**/.vscode
|
||||
**/*.*proj.user
|
||||
**/*.dbmdl
|
||||
**/*.jfm
|
||||
**/azds.yaml
|
||||
**/bin
|
||||
**/charts
|
||||
**/docker-compose*
|
||||
**/Dockerfile*
|
||||
**/node_modules
|
||||
**/npm-debug.log
|
||||
**/obj
|
||||
**/secrets.dev.yaml
|
||||
**/values.dev.yaml
|
||||
LICENSE
|
||||
README.md
|
||||
!**/.gitignore
|
||||
!.git/HEAD
|
||||
!.git/config
|
||||
!.git/packed-refs
|
||||
!.git/refs/heads/**
|
||||
484
yakovleva_yulia_lab_2/.gitignore
vendored
Normal file
484
yakovleva_yulia_lab_2/.gitignore
vendored
Normal file
@@ -0,0 +1,484 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from `dotnet new gitignore`
|
||||
|
||||
# dotenv files
|
||||
.env
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# Tye
|
||||
.tye/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
||||
.idea
|
||||
|
||||
##
|
||||
## Visual studio for Mac
|
||||
##
|
||||
|
||||
|
||||
# globs
|
||||
Makefile.in
|
||||
*.userprefs
|
||||
*.usertasks
|
||||
config.make
|
||||
config.status
|
||||
aclocal.m4
|
||||
install-sh
|
||||
autom4te.cache/
|
||||
*.tar.gz
|
||||
tarballs/
|
||||
test-results/
|
||||
|
||||
# Mac bundle stuff
|
||||
*.dmg
|
||||
*.app
|
||||
|
||||
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
# Vim temporary swap files
|
||||
*.swp
|
||||
19
yakovleva_yulia_lab_2/App1/App1.csproj
Normal file
19
yakovleva_yulia_lab_2/App1/App1.csproj
Normal file
@@ -0,0 +1,19 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- <ItemGroup>
|
||||
<ProjectReference Include="..\FileGeneration\FileGeneration.csproj" />
|
||||
</ItemGroup> -->
|
||||
|
||||
</Project>
|
||||
20
yakovleva_yulia_lab_2/App1/Dockerfile
Normal file
20
yakovleva_yulia_lab_2/App1/Dockerfile
Normal file
@@ -0,0 +1,20 @@
|
||||
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
|
||||
WORKDIR /app
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
WORKDIR /src
|
||||
COPY ["App1.csproj", "App1/"]
|
||||
RUN dotnet restore "App1/App1.csproj"
|
||||
WORKDIR "/src/App1"
|
||||
COPY . .
|
||||
RUN dotnet build "App1.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "App1.csproj" -c $BUILD_CONFIGURATION -o /app/publish --self-contained false --no-restore
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "App1.dll"]
|
||||
31
yakovleva_yulia_lab_2/App1/Program.cs
Normal file
31
yakovleva_yulia_lab_2/App1/Program.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
class Program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
string inputPath = Environment.GetEnvironmentVariable("DATA_PATH") ?? ".\\data";
|
||||
string outputPath = Environment.GetEnvironmentVariable("RESULT_PATH") ?? ".\\result";
|
||||
|
||||
try
|
||||
{
|
||||
string[] files = Directory.GetFiles(inputPath);
|
||||
|
||||
using (StreamWriter writer = new StreamWriter(Path.Combine(outputPath, "data.txt")))
|
||||
{
|
||||
foreach (string file in files)
|
||||
{
|
||||
int lineCount = File.ReadAllLines(file).Length;
|
||||
writer.WriteLine(lineCount);
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("Файл data.txt успешно создан");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Произошла ошибка: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
10
yakovleva_yulia_lab_2/App1/Properties/launchSettings.json
Normal file
10
yakovleva_yulia_lab_2/App1/Properties/launchSettings.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"profiles": {
|
||||
"App1": {
|
||||
"commandName": "Project"
|
||||
},
|
||||
"Container (Dockerfile)": {
|
||||
"commandName": "Docker"
|
||||
}
|
||||
}
|
||||
}
|
||||
15
yakovleva_yulia_lab_2/App2/App2.csproj
Normal file
15
yakovleva_yulia_lab_2/App2/App2.csproj
Normal file
@@ -0,0 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
20
yakovleva_yulia_lab_2/App2/Dockerfile
Normal file
20
yakovleva_yulia_lab_2/App2/Dockerfile
Normal file
@@ -0,0 +1,20 @@
|
||||
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
|
||||
WORKDIR /app
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
WORKDIR /src
|
||||
COPY ["App2.csproj", "App2/"]
|
||||
RUN dotnet restore "App2/App2.csproj"
|
||||
WORKDIR "/src/App2"
|
||||
COPY . .
|
||||
RUN dotnet build "App2.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "App2.csproj" -c $BUILD_CONFIGURATION -o /app/publish --self-contained false --no-restore
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "App2.dll"]
|
||||
35
yakovleva_yulia_lab_2/App2/Program.cs
Normal file
35
yakovleva_yulia_lab_2/App2/Program.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
class Program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
string inputPath = Environment.GetEnvironmentVariable("DATA_PATH") ?? ".\\data";
|
||||
string outputPath = Environment.GetEnvironmentVariable("RESULT_PATH") ?? ".\\result";
|
||||
|
||||
try
|
||||
{
|
||||
string dataFilePath = Path.Combine(inputPath, "data.txt");
|
||||
|
||||
// Чтение всех строк из файла
|
||||
string[] lines = File.ReadAllLines(dataFilePath);
|
||||
int[] numbers = lines.Select(int.Parse).ToArray();
|
||||
|
||||
// Поиск наибольшего числа
|
||||
int maxNumber = numbers.Max();
|
||||
|
||||
// Подсчет количества таких чисел
|
||||
int maxCount = numbers.Count(n => n == maxNumber);
|
||||
|
||||
File.WriteAllText(Path.Combine(outputPath, "result.txt"), maxCount.ToString());
|
||||
|
||||
Console.WriteLine($"Количество наибольших чисел: {maxCount}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Произошла ошибка: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
10
yakovleva_yulia_lab_2/App2/Properties/launchSettings.json
Normal file
10
yakovleva_yulia_lab_2/App2/Properties/launchSettings.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"profiles": {
|
||||
"App2": {
|
||||
"commandName": "Project"
|
||||
},
|
||||
"Container (Dockerfile)": {
|
||||
"commandName": "Docker"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.9.34728.123
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App2", "App2\App2.csproj", "{D03073B1-0CB3-4CA9-A9D8-F1FB804F92D1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App1", "App1\App1.csproj", "{729837A1-27A7-4D48-BBB2-21F68E5F7766}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FileGeneration", "FileGeneration\FileGeneration.csproj", "{E7AD8A8C-C957-41FF-B92A-924465D73DDB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D03073B1-0CB3-4CA9-A9D8-F1FB804F92D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D03073B1-0CB3-4CA9-A9D8-F1FB804F92D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D03073B1-0CB3-4CA9-A9D8-F1FB804F92D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D03073B1-0CB3-4CA9-A9D8-F1FB804F92D1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{729837A1-27A7-4D48-BBB2-21F68E5F7766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{729837A1-27A7-4D48-BBB2-21F68E5F7766}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{729837A1-27A7-4D48-BBB2-21F68E5F7766}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{729837A1-27A7-4D48-BBB2-21F68E5F7766}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E7AD8A8C-C957-41FF-B92A-924465D73DDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E7AD8A8C-C957-41FF-B92A-924465D73DDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E7AD8A8C-C957-41FF-B92A-924465D73DDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E7AD8A8C-C957-41FF-B92A-924465D73DDB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {36392E9A-B3A7-4CFF-B577-B2A3146B3007}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
22
yakovleva_yulia_lab_2/FileGeneration/Dockerfile
Normal file
22
yakovleva_yulia_lab_2/FileGeneration/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
|
||||
WORKDIR /app
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
WORKDIR /src
|
||||
COPY ["FileGeneration.csproj", "FileGeneration/"]
|
||||
RUN dotnet restore "FileGeneration/FileGeneration.csproj"
|
||||
WORKDIR "/src/FileGeneration"
|
||||
COPY . .
|
||||
RUN dotnet build "FileGeneration.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "FileGeneration.csproj" -c $BUILD_CONFIGURATION -o /app/publish --self-contained false --no-restore
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "FileGeneration.dll"]
|
||||
15
yakovleva_yulia_lab_2/FileGeneration/FileGeneration.csproj
Normal file
15
yakovleva_yulia_lab_2/FileGeneration/FileGeneration.csproj
Normal file
@@ -0,0 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
41
yakovleva_yulia_lab_2/FileGeneration/Program.cs
Normal file
41
yakovleva_yulia_lab_2/FileGeneration/Program.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
class Program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
string directoryPath = Environment.GetEnvironmentVariable("DATA_PATH") ?? ".\\data";
|
||||
|
||||
Random random = new Random();
|
||||
|
||||
try
|
||||
{
|
||||
if (!Directory.Exists(directoryPath))
|
||||
{
|
||||
Directory.CreateDirectory(directoryPath);
|
||||
}
|
||||
|
||||
for (int i = 1; i <= 100; i++)
|
||||
{
|
||||
int lineCount = random.Next(1, 101);
|
||||
|
||||
string filePath = Path.Combine(directoryPath, $"file_{i}.txt");
|
||||
|
||||
using (StreamWriter writer = new StreamWriter(filePath))
|
||||
{
|
||||
for (int j = 0; j < lineCount; j++)
|
||||
{
|
||||
writer.WriteLine($"{j + 1}");
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine($"Файл {filePath} успешно создан с {lineCount} строками.");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Произошла ошибка: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"profiles": {
|
||||
"FileGeneration": {
|
||||
"commandName": "Project"
|
||||
},
|
||||
"Container (Dockerfile)": {
|
||||
"commandName": "Docker"
|
||||
}
|
||||
}
|
||||
}
|
||||
34
yakovleva_yulia_lab_2/README.md
Normal file
34
yakovleva_yulia_lab_2/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Лабораторная работа 2
|
||||
|
||||
## Описание
|
||||
В данной лабораторной работе были изучены файлы сборки образов и создание их для приложений. Сборки образов необходимы для контейниризации созданных приложений. В файле сборки мы указываем папку из которой копируем в контейнер и собираем проект.
|
||||
|
||||
## Описание работы
|
||||
Были выбраны варианты для первого приложения - 3 вариант и для второго 3 вариант.
|
||||
|
||||
В первом приложении мы ищем все файлы из папки output и записываем количество строк каждого файла в файл data.txt. Затем второе приложение ищет в data.txt наибольшее значения и записывает количество наибольших значений в файл result.txt.
|
||||
|
||||
## Запуск
|
||||
1. Для начала необходимо запустить Docker
|
||||
2. Открыть консоль, перейти в папку с docker-compose.yml
|
||||
3. Ввести команду:
|
||||
```
|
||||
docker compose up --build
|
||||
```
|
||||
`--build` необходим для принудительной сборки контейнеров, даже если они уже запущены.
|
||||
|
||||
## Результат
|
||||
В результате в логах видим, что приложения успешно отработали:
|
||||
```
|
||||
app2-1 | Количество наибольших чисел: 1
|
||||
app1-1 exited with code 0
|
||||
app2-1 exited with code 0
|
||||
```
|
||||
И также видим в папке Files две созданные папки: data и result. В data находятся сгенерированные файлы, а в result - файл с результатом.
|
||||
|
||||
## Описание docker-compose.yml
|
||||
В docker-compose.yml запускаются 3 сервиса: первый генерирует файлы с рандомным набором строк, второй сервис записывает количество строк каждого файла в data.txt, а третий сервис определяет количество наибольших чисел из файла data.txt и записывает результат в файл result.txt. Также используются зависимости `depends_on`, второй сервис зависит от запуска первого, и третий севрис зависит от запуска второго.
|
||||
С помощью `volumes` создаем буферную область, которая позволяет использовать двум севрисам одну папку. `build` позволяет использовать только что собранный образ в момент запуска.
|
||||
|
||||
## Видеоотчёт
|
||||
[Видеоотчёт](https://disk.yandex.ru/i/Ds2f4xO8vQ8XPA)
|
||||
33
yakovleva_yulia_lab_2/docker-compose.yml
Normal file
33
yakovleva_yulia_lab_2/docker-compose.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
services:
|
||||
generatefiles:
|
||||
build: ./FileGeneration/
|
||||
volumes:
|
||||
- ./Files/data:/var/data
|
||||
- buffer:/var/result
|
||||
environment:
|
||||
DATA_PATH: "/var/data"
|
||||
RESULT_PATH: "/var/result"
|
||||
|
||||
app1:
|
||||
build: ./App1/
|
||||
depends_on:
|
||||
- generatefiles
|
||||
volumes:
|
||||
- ./Files/data:/var/data
|
||||
- buffer:/var/result
|
||||
environment:
|
||||
DATA_PATH: "/var/data"
|
||||
RESULT_PATH: "/var/result"
|
||||
|
||||
app2:
|
||||
build: ./App2/
|
||||
depends_on:
|
||||
- app1
|
||||
volumes:
|
||||
- buffer:/var/data
|
||||
- ./Files/result:/var/result
|
||||
environment:
|
||||
DATA_PATH: "/var/data"
|
||||
RESULT_PATH: "/var/result"
|
||||
volumes:
|
||||
buffer:
|
||||
Reference in New Issue
Block a user