DAS_2024_1/dozorova_alena_lab_2/readme.md
2024-09-17 22:46:46 +04:00

4.0 KiB
Raw Permalink Blame History

Лабораторная работа 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 позволяет использовать не уже готовый образ, а тот, что будет собран непосредственно в момент запуска.

Видеодемонстрация

Был записан видеоролик, демонстрирующий процесс запуска и работы сервисов. Он расположен по адресу