118 lines
4.1 KiB
Markdown
118 lines
4.1 KiB
Markdown
# Лабораторная работа №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
|