90 lines
3.6 KiB
Markdown
90 lines
3.6 KiB
Markdown
|
# Лабораторная работа 2. Разработка простейшего распределённого приложения
|
|||
|
### Задание на лабораторную работу
|
|||
|
1. Согласно варианту разработать два приложения такие, что результат первого является исходными данными для второго.
|
|||
|
2. Изучить файлы сборки образов docker и разработать их для созданных приложений.
|
|||
|
3. Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
|
|||
|
|
|||
|
**Программа 1:**
|
|||
|
Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt.
|
|||
|
|
|||
|
**Программы 2:**
|
|||
|
Ищет наименьшее число из файла /var/result/data.txt и сохраняет количество таких чисел из последовательности в /var/result/result.txt.
|
|||
|
|
|||
|
***
|
|||
|
### Как запустить лабораторную работу
|
|||
|
Для сборки и запуска программ необходимо перейти в директорию с файлом `docker-compose.yaml` и выполнить команду:
|
|||
|
```
|
|||
|
docker compose up --build
|
|||
|
```
|
|||
|
***
|
|||
|
### Описание работы
|
|||
|
Содержимое `Dockerfile` для сервиса `worker-1`:
|
|||
|
```
|
|||
|
# использование образа java
|
|||
|
FROM openjdk:17
|
|||
|
|
|||
|
# создание директорий для файлов
|
|||
|
RUN mkdir /var/data
|
|||
|
RUN mkdir /var/result
|
|||
|
|
|||
|
# установка рабочей директории проекта
|
|||
|
WORKDIR /app
|
|||
|
|
|||
|
# копирование исходных файлов
|
|||
|
COPY src /app/src
|
|||
|
|
|||
|
# компиляция
|
|||
|
RUN javac /app/src/App1.java
|
|||
|
|
|||
|
# запуск java-приложения
|
|||
|
CMD ["java", "-cp", "/app/src", "App1"]
|
|||
|
```
|
|||
|
Аналогично был составлен `Dockerfile` для сервиса `worker-2`.
|
|||
|
|
|||
|
Файл `docker-compose.yml` содержит:
|
|||
|
- 2 сервиса (worker-1, worker-2);
|
|||
|
- директиву build для каждого сервиса;
|
|||
|
- монтирование папок;
|
|||
|
- зависимость одного сервиса от другого.
|
|||
|
```
|
|||
|
version: '3'
|
|||
|
|
|||
|
services:
|
|||
|
worker-1: # название 1 сервиса
|
|||
|
build: # директива build для сборки образа
|
|||
|
context: /worker-1
|
|||
|
dockerfile: Dockerfile
|
|||
|
volumes: # монтирование папок
|
|||
|
- .\data:/var/data
|
|||
|
- .\result:/var/result
|
|||
|
|
|||
|
worker-2: # название 2 сервиса
|
|||
|
build: # директива build для сборки образа
|
|||
|
context: /worker-2
|
|||
|
dockerfile: Dockerfile
|
|||
|
depends_on: # зависимость сервисов
|
|||
|
- worker-1
|
|||
|
volumes: # монтирование папок
|
|||
|
- .\data:/var/data
|
|||
|
- .\result:/var/result
|
|||
|
```
|
|||
|
|
|||
|
***
|
|||
|
### Скриншоты
|
|||
|
***Исходные файлы***
|
|||
|
![](images/files.jpg)
|
|||
|
|
|||
|
***Результаты сборки и запуска программ в консоли***
|
|||
|
![](images/console.jpg)
|
|||
|
|
|||
|
***Dockerhub***
|
|||
|
![](images/dockerhub.jpg)
|
|||
|
|
|||
|
***Результат выполнения программы 2, выведенный на экран***
|
|||
|
![](images/result.jpg)
|
|||
|
|
|||
|
***Файлы `data.txt` и `result.txt`***
|
|||
|
![](images/files_res.jpg)
|
|||
|
|
|||
|
### Ссылка на видео:
|
|||
|
https://drive.google.com/file/d/13WUxSGgQjvusT40UQc1C3ZOVk4-PX9oH/view?usp=sharing
|