DAS_2023_1/simonov_nikita_lab_2/README.md

118 lines
4.1 KiB
Markdown
Raw Normal View History

2024-01-21 19:17:15 +04:00
# Лабораторная работа №2
Цель: изучение техники создания простого распределенного приложения.
Задачи:
- Согласно вышему варианту (выбирайте любой) разработать два приложения такие, что результат первого является исходными данными для второго.
- Изучить файлы сборки образов docker и разработать их для созданных приложений.
- Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
- Правильно закоммитить результат без лишних файлов.
- Оформить pull request по правилам и отправить его на проверку.
# Разработка двух приложений
Вариант первого приложения(worker-1): 5 - Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt
Вариант второго приложения(worker-2): 1 - Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt
## Структура проекта
![](/screens/Screenshot_1.png)
# Работа программы
- Создание двух директорий: worker-1 и worker-2 для реализаций двух программ.
- Описание Dockerfile для создания образов для обоих программ.
## Docker файл для первого сервиса
```yml
# Используем образ с Java
FROM openjdk:21
# Создаем директории для данных и результата внутри контейнера
RUN mkdir /var/data
RUN mkdir /var/result
# Создаем директорию приложения внутри контейнера
WORKDIR /app
# Копируем исходные файлы вашего Java-приложения внутрь контейнера
COPY src /app/src
# Компилируем Java-код
RUN javac /app/src/FindShortestFileName.java
# Запускаем Java-приложение
CMD ["java", "-cp", "/app/src", "FindShortestFileName"]
```
## Docker файл для второго сервиса
```yml
# Используем образ с Java
FROM openjdk:21
# Создаем директории для данных и результата внутри контейнера
RUN mkdir /var/data
RUN mkdir /var/result
# Создаем директорию приложения внутри контейнера
WORKDIR /app
# Копируем исходные файлы вашего Java-приложения внутрь контейнера
COPY src /app/src
Компилируем Java-код
RUN javac /app/src/FindingLargestNumberFile.java
# Запускаем Java-приложение
CMD ["java", "-cp", "/app/src", "FindingLargestNumberFile"]
```
## Docker-compose
```yml
services:
worker-1:
build:
context: /worker-1
dockerfile: Dockerfile
volumes:
- D:\рил\simonov_nikita_lab_2\data:/var/data
- D:\рил\simonov_nikita_lab_2\result:/var/result
worker-2:
build:
context: /worker-2
dockerfile: Dockerfile
volumes:
- D:\рил\simonov_nikita_lab_2\data:/var/data
- D:\рил\simonov_nikita_lab_2\result:/var/result
depends_on:
- worker-1
```
## Исходные файлы
![](/screens/Screenshot_5.png)
## После запуска контейнера создаются файлы `data.txt` и `result.txt`:
![](/screens/Screenshot_2.png)
- `data.txt`
![](/screens/Screenshot_3.png)
- `result.txt`
![](/screens/Screenshot_4.png)
# Запушенный контейнер
![](/screens/Screenshot_6.png)
# Ссылка на видео
https://drive.google.com/file/d/1kPXcYOX0bRmjzBbg8GBWp0JfFWb2rUGm/view?usp=sharing