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
|