70 lines
4.0 KiB
Markdown
70 lines
4.0 KiB
Markdown
|
# Лабораторная работа 2
|
|||
|
В рамках лабораторной работы были реализованы два сервиса, для которых выходные данные первого являются входными данными второго.
|
|||
|
## Описание
|
|||
|
Варианты:
|
|||
|
Первый сервис - 5
|
|||
|
Второй сервис - 1
|
|||
|
Оба сервиса являются консольным приложением с сгенерированным dockerfile
|
|||
|
В результате были проброшены папки следующим образом:
|
|||
|
для первого сервиса :
|
|||
|
```
|
|||
|
volumes:
|
|||
|
- ./FilesInput/First:/var/data
|
|||
|
- ./FilesInput/Second:/var/result
|
|||
|
```
|
|||
|
для второго сервиса:
|
|||
|
```
|
|||
|
volumes:
|
|||
|
- ./FilesInput/Second:/var/data
|
|||
|
- ./FilesOutput:/var/result
|
|||
|
```
|
|||
|
## Запуск
|
|||
|
Для запуска лабораторной работы необходимо иметь запущенный Docker.
|
|||
|
Из папки, где находится файл docker-compose.yml запустить консоль и выполнить:
|
|||
|
```
|
|||
|
docker compose up --build
|
|||
|
```
|
|||
|
Флаг `--build` указывает на то, что необходимо выполнить сборку исходников.
|
|||
|
После сборки мы получим следующие логи:
|
|||
|
[+] Running 3/2
|
|||
|
✔ Network dozorova_alena_lab_2_default Created 0.2s
|
|||
|
✔ Container dozorova_alena_lab_2-first-1 Created 0.1s
|
|||
|
✔ Container dozorova_alena_lab_2-second-1 Created 0.0s
|
|||
|
Attaching to first-1, second-1
|
|||
|
first-1 | Start first service
|
|||
|
first-1 | Find file /var/data/0.txt
|
|||
|
first-1 | Copy to /var/result/data.txt
|
|||
|
first-1 exited with code 0
|
|||
|
second-1 | Start second service
|
|||
|
second-1 | Find max value: 97
|
|||
|
second-1 | Save to /var/result/result.txt
|
|||
|
second-1 exited with code 0
|
|||
|
## Пример dockerfile
|
|||
|
```
|
|||
|
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base #базовый образ сборки
|
|||
|
WORKDIR /app
|
|||
|
|
|||
|
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build #используем sdk для сборки
|
|||
|
ARG BUILD_CONFIGURATION=Release #сборку проводим в релизной конфигурации
|
|||
|
WORKDIR /src
|
|||
|
COPY ["ConsoleApp2.csproj", "."] #копируем в контейнер
|
|||
|
RUN dotnet restore "./ConsoleApp2.csproj" #восстанавливаем зависимости
|
|||
|
COPY . . #копируем в папку сборки
|
|||
|
WORKDIR "/src/."
|
|||
|
RUN dotnet build "./ConsoleApp2.csproj" -c $BUILD_CONFIGURATION -o /app/build #собираем проект
|
|||
|
|
|||
|
FROM build AS publish #все, что создалось в папке publish
|
|||
|
ARG BUILD_CONFIGURATION=Release
|
|||
|
RUN dotnet publish "./ConsoleApp2.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false #публикуем в /app/publish
|
|||
|
|
|||
|
FROM base AS final #берем базовый образ
|
|||
|
WORKDIR /app #указываем рабочую папку
|
|||
|
COPY --from=publish /app/publish . #опубликованное копируем в app
|
|||
|
ENTRYPOINT ["dotnet", "ConsoleApp2.dll"] #указываем команду запуска приложения
|
|||
|
```
|
|||
|
|
|||
|
## Особенности compose файла
|
|||
|
Директива`depends_on` позволяет указать, какого сервиса мы дожидаемся, прежде чем запустимся.
|
|||
|
Директива `build` позволяет использовать не уже готовый образ, а тот, что будет собран непосредственно в момент запуска.
|
|||
|
## Видеодемонстрация
|
|||
|
Был записан видеоролик, демонстрирующий процесс запуска и работы сервисов. Он расположен по [адресу](https://drive.google.com/file/d/1BOt_Ja9AanINPjJyRKzgUaghRGwJYdd7/view?usp=drive_link)
|