Так за последние несколько дней я работал над .NET Core API, который использовал SQL Server через серверу Antity Framework. Сейчас я использую M1 Mac, единственный способ достичь этого был запущен SQL Server на Docker.
Реализация была прямой вперед, но запуск всего приложения на Docker было бит сложно, и потребовалось некоторое время, чтобы понять это. Поэтому, как только я добился успеха, я думал, почему не записать мое понимание файла Docker, созданного Visual Studio и как я завершил эту задачу
До реквизиты
- Visual Studio IDE или код визуального студии наряду с ASP. Чистая основная структура
- Docker Desktop UP и работает на системе
- Dot Net API-решение, тот, который я использую, имеет зависимость на SQL Server ( https://github.com/rajat-srivas/gallasoft.retaileronboarding )
Требование
- Нам нужно полностью запустить приложение через Docker
- Контейнер SQL Server должен быть активирован и запущен перед .NET Container, который требуется для высева начальной базы данных, используя миграции структуры сущности.
Создание файла докера
- Так что я верю, что у вас уже есть проект, готов к которому мы собираемся следовать этому шагу
- Мы будем использовать dockerfile по умолчанию, генерируемую через Visual Studio для нашей реализации
- Добавить поддержку докера: Щелкните правой кнопкой мыши на проекте >> Добавить >> Поддержка докера
- Это создаст три файла в решении, DockerFile, Docker-Compose.yml и Dockerignore
- Мы собираемся сосредоточиться на первых двух файлах и понять его контента
Dockerfile.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["GallaSoft.RetailerOnboardingAPI/GallaSoft.RetailerOnboardingAPI.csproj", "GallaSoft.RetailerOnboardingAPI/"] RUN dotnet restore "GallaSoft.RetailerOnboardingAPI/GallaSoft.RetailerOnboardingAPI.csproj" COPY . . WORKDIR "/src/GallaSoft.RetailerOnboardingAPI" RUN dotnet build "GallaSoft.RetailerOnboardingAPI.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "GallaSoft.RetailerOnboardingAPI.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "GallaSoft.RetailerOnboardingAPI.dll"]
Давайте сломаем эти 4 этапы здесь и постарайтесь получить более подробную информацию о каждом из них
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443
- От Команда используется для указания базового изображения, которое является ASP. Net 5.0 среда выполнения, необходимая для запуска приложений на основе DOT NET и имени, что это в качестве базы здесь
- Затем мы используем Workdir Команда для изменения рабочего каталога для последующих инструкций в DockerFile
- Мы также выставляем порты 80 и 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["GallaSoft.RetailerOnboardingAPI/GallaSoft.RetailerOnboardingAPI.csproj", "GallaSoft.RetailerOnboardingAPI/"] RUN dotnet restore "GallaSoft.RetailerOnboardingAPI/GallaSoft.RetailerOnboardingAPI.csproj" COPY . . WORKDIR "/src/GallaSoft.RetailerOnboardingAPI" RUN dotnet build "GallaSoft.RetailerOnboardingAPI.csproj" -c Release -o /app/build
- Теперь на этом этапе мы на самом деле строим наш проект и как раз перед тем, как мы запустим Восстановить команда, чтобы убедиться Все зависимости решаются
- Мы также изменяем базовый образ и рабочий каталог нашего контейнера здесь
- Базовое изображение теперь Dotnet SDK имени как построить который требуется для создания и восстановления нашего проекта
- Рабочий каталог меняется, поскольку мы хотим сохранить размер возможного контейнера, максимально меньше, и нам не нужен SDK, поскольку нам потребуется только опубликованный файл на изображении
- Скопировать Команда используется для копирования содержимого от источника в пункт назначения. Здесь Быть из каталога проекта к Workdir
- Тогда мы бежим Dotnet Restore Команда на проекте, скопируйте все на рабочий
- Затем мы создаем проект в режиме выпуска и укажите выходной каталог
FROM build AS publish RUN dotnet publish "GallaSoft.RetailerOnboardingAPI.csproj" -c Release -o /app/publish
- Теперь у нас есть файлы сборки нашего проекта, а следующий шаг — использовать базовое изображение сборки для публикации нашего проекта в DEPTION указанный
FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "GallaSoft.RetailerOnboardingAPI.dll"]
- На заключительном этапе мы снова вернемся к базовому образу времени выполнения Dotnet, так как нам больше не нужна сборка SDK
- Мы копируем все содержимое папки публикации на наше изображение
- Наконец, мы просто указываем Выходная точка который будет использоваться для запуска приложения, когда контейнер работает с помощью этого DockerFile
Сейчас мы прошли через DockerFile, которое было создано, мы переходим к файлу Docker-Compose.yml, который фактически используется для создания этого проекта с помощью DockerFile
Нам придется создать это самостоятельно, и давайте обсудим, как мы сделали это для нашей упрецеляции
Docker Compose
Если ваш проект не имеет никакой зависимости, которая должна быть локально присутствующей, то файл Compose Docker будет иметь только инструкции для создания и запуска контейнера от DockerFile.
Но, поскольку здесь, нам нужно запустить SQL Server, запустив до того, как проект Dotnet работает, мы указываем и создаем эту зависимость
version: '1.4' services: db: image: "mcr.microsoft.com/azure-sql-edge" container_name: sql-server-db ports: - 1433:1433 environment: - SA_PASSWORD=MyPass@word - MSSQL_PID=Developer - ACCEPT_EULA='Y' gallasoft.retaileronboardingapi: image: ${DOCKER_REGISTRY-}gallasoft ports: - 49838:443 build: context: . dockerfile: GallaSoft.RetailerOnboardingAPI/Dockerfile depends_on: - db
Для запуска нашего API нам нужно два служба, которые будут работать на контейнере Docker, DB, который относится к экземпляру SQL Server и сам проект API
Примечание : Я использую Azure SQL Edge Edge of SQL, а не сервер SQL, поскольку на момент реализации, это был лучший способ запуска экземпляра SQL Server на M1 MacBooks MacBooks.
Служба БД
- Упомянутые здесь свойства аналогичны тому, которое используется, когда мы запускаем контейнер, используя Docker Run команда
- Мы указываем изображение, имя контейнера, порты и пароль, который будет использоваться для доступа к серверу
API Service.
- Этот шаг — использовать DockerFile и создать и запускать изображение
- Важная вещь здесь Defends_on Тег, который указывает, что эта услуга зависит от службы БД и, следовательно, оно должно быть выпущено и запущено для высева данных, прежде чем мы запустим его.
Итак, это все накладные расходы, которые требуются для контейнерации наших точечных ядровых приложений.
Наконец, теперь мы можем либо запустить команду Docker Compose из командной строки/терминала, либо запустить проект от Visual Studio напрямую.
Вывод
У нас должен быть проект API, запущенный в браузере, и два контейнера докера также работают.
Спасибо людей, если вы добрались до сюда. Вы, ребята, потрясающие. Продолжайте учиться, продолжать строительство 🚀🚀🚀🚀🚀🚀
Оригинал: «https://dev.to/rajat_srivas/getting-started-with-dockerfile-for-asp-net-core-1ikb»