# Лабораторная работа 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)