Перейти к основному содержимому

Подготовка сервиса бизнес-логики к доставке на стенд Атомкод

Сервис бизнес-логики запускается и работает в Docker-контейнере. Информация о работе с Docker и использовании приложения .NET в Docker-контейнерах представлена на сайте Microsoft.

Перед развертыванием сервиса на стенде необходимо опубликовать проект и подготовить файл для создания Docker-образа. Вы можете использовать приватный базовый образ из дистрибутива Атомкод или публичные официальные образы Microsoft из реестра Microsoft Container Registry (MCR).

Чтобы подготовить сервис бизнес-логики к доставке на стенд Атомкод:

  1. Опубликуйте разработанное .NET-приложение (сервис бизнес-логики) в конфигурации Release для целевой платформы.

    Откройте командную строку в корневой директории проекта (.csproj) и выполните команды восстановления зависимостей и публикации, как показано в следующем блоке кода:

    dotnet restore
    dotnet publish -c Release --self-contained --runtime linux-musl-x64 -o output/

    В зависимости от типа базового образа значение параметра команды --runtime может быть следующим:

    • базовый образ на основе Alpine Linux: linux-musl-x64;
    • базовый образ на основе Debian или Astra Linux: linux-x64.

    В папке output/ будет создан дистрибутив разработанного приложения.

  2. Создайте Dockerfile.

    В папке output/ создайте файл с именем Dockerfile (без расширения).

    Следующий блок кода демонстрирует содержимое Dockerfile с использованием поставляемого базового образа. Версия базового образа может не совпадать с версией в дистрибутиве Атомкод.

    FROM distrib/infra/base-dotnet8-runtime:alpine-x86_64-3.19.1-167
    WORKDIR /app
    ADD . .
    ENTRYPOINT ["/app/SERVICE_NAME"]

    В качестве SERVICE_NAME укажите имя исполняемого файла сервиса без расширения, например, myservice для проекта myservice.csproj.

    Приватный базовый образ из дистрибутива Атомкод содержит следующие предустановленные пакеты, необходимые для работы .NET и интеграции с Атомкод:

    • bash;
    • icu-libs;
    • krb5-libs;
    • libgcc;
    • libintl;
    • libssl3;
    • libstdc++;
    • protobuf;
    • grpc;
    • zlib.

    Если вы хотите использовать публичный базовый образ, установите эти пакеты.

  3. В Dockerfile настройте права пользователя для запуска процессов.

    Базовые образы, как публичные, так и приватные, по умолчанию запускают процессы с правами суперпользователя (root). Использование прав суперпользователя в эксплуатационной среде создает угрозы безопасности и нарушает принцип наименьших привилегий (Principle of Least Privilege).

    Для снижения рисков рекомендуется собирать образы ваших сервисов так, чтобы основной процесс запускался от имени непривилегированного пользователя.

    Если вы используете базовый образ на основе Alpine Linux, в Dockerfile для сборки образа с сервисом бизнес-логики добавьте следующий блок команд:

    # Создание новой группы и пользователя с именем 'app'
    RUN addgroup -S app && \ # Создание системной (-S) группы 'app'
    adduser -S app -G app && \ # Создание системного (-S) пользователя 'app' в группе 'app'
    mkdir -p /app && \ # Создание рабочей директории, если ее нет
    chown -R app:app /app && \ # Рекурсивная замена владельца директории /app на app:app
    chmod -R 700 /app # Установка прав: только владелец (app) может читать, писать, исполнять

    # Переключение на созданного пользователя для всех последующих инструкций
    USER app

    Если вы используете базовый образ на основе Debian или Astra Linux, в Dockerfile для сборки образа с сервисом бизнес-логики добавьте следующий блок команд:

    # Создание новой группы и системного пользователя с именем 'app'
    RUN addgroup --system app && \ # Создание системной группы 'app'
    adduser --system --group app && \ # Создание системного пользователя 'app' и добавление его в группу 'app'
    mkdir -p /app && \ # Создание рабочей директории, если ее нет
    chown -R app: /app && \ # Рекурсивная замена владельца директории /app на пользователя 'app' и его группу по умолчанию
    chmod -R 700 /app # Установка прав: только владелец (app) может читать, писать, исполнять

    # Переключение на созданного пользователя для всех последующих инструкций
    USER app

В результате в папке output/ содержатся необходимые артефакты для сборки Docker-образа.