81 lines
4.0 KiB
Markdown
81 lines
4.0 KiB
Markdown
# Лабораторная работа №2
|
||
|
||
## Задание
|
||
|
||
Цель: изучение техники создания простого распределённого приложения.
|
||
|
||
Задачи:
|
||
|
||
- Согласно варианту (0 и 1) разработать два приложения такие, что результат первого является исходными данными для второго.
|
||
- Изучить файлы сборки образов docker и разработать их для созданных приложений.
|
||
- Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
|
||
- Правильно закоммитить результат без лишних файлов.
|
||
- Оформить pull request по правилам и отправить его на проверку.
|
||
|
||
## Ход работы
|
||
|
||
### Разворачивание сервисов:
|
||
Были разработаны два приложения на java:
|
||
|
||
worker-1 - Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data.
|
||
worker-2 - Ищет набольшее число из файла /var/result/data.txt и сохраняет его вторую степень в /var/result/result.txt.
|
||
|
||
### Исходные файлы
|
||
|
||
Исходные файлы содержат целые числа.
|
||
|
||
В /var/result/data.txt копируются числа из первых строк каждого файла - 1, 10, 5
|
||
|
||
В /var/result/result.txt записывается число 100 - квадрат наибольшего числа - 10
|
||
|
||
Содержимое всех файлов показано в видео.
|
||
|
||
### Dockerfile
|
||
|
||
Для лр были созданы идентичные докер-файлы в обоих проектах:
|
||
|
||
```
|
||
FROM openjdk:17
|
||
LABEL authors="tauri"
|
||
|
||
RUN mkdir /var/data
|
||
RUN mkdir /var/result
|
||
|
||
WORKDIR /app
|
||
COPY src /app/src
|
||
|
||
RUN javac /app/src/Main.java
|
||
|
||
CMD ["java", "-cp", "/app/src", "Main"]
|
||
```
|
||
- FROM - выбор базового образа
|
||
- LABEL - метка, что автор - tauri
|
||
- RUN - создание директории внутри контейнера
|
||
- WORKDIR - установка рабочей директории для последующих команд
|
||
- COPY - копирование содержимого директории внутрь контейнера
|
||
- RUN - компиляция исходного кода Main.java внутри контейнера
|
||
- CMD - определение команды, которая выполняется при запуске контейнера. В данном случае происходит запуск программы на java и указывается пусть до Main.java
|
||
|
||
### docker-compose.yml
|
||
```
|
||
version: "3" #формат конфигурации Docker Compose версии 3
|
||
services: #определение сервисов
|
||
worker1:
|
||
build:
|
||
context: /worker-1 #путь к контексту сборки
|
||
dockerfile: Dockerfile #имя докерфайла
|
||
volumes:
|
||
- .\var\data:/var/data #том для папки файлов
|
||
- .\var\result:/var/result #том для папки результатов
|
||
worker2:
|
||
depends_on: #зависимость: worker2 не будет запущен, пока worker1 не завершит свой запуск
|
||
- worker1
|
||
build:
|
||
context: /worker-2 #путь к контексту сборки
|
||
dockerfile: Dockerfile #имя докерфайла
|
||
volumes:
|
||
- .\var\result:/var/data #том для папки файлов
|
||
- .\var\result:/var/result #том для папки результатов
|
||
```
|
||
|
||
Работоспособность и то, что контейнеры были успешно развернуты показано в видео: [lab2.mp4](lab2.mp4) |