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