Как создать и запустить консольное приложение .net Core в докере

У меня есть консольное приложение .NET Core 2.1. Я хочу запустить это консольное приложение в образе Docker. Я новичок в Docker и просто пытаюсь понять это.

На данный момент у меня есть Dockerfile, вдохновленный Пример Microsoft. Мой файл на самом деле выглядит так:

FROM microsoft/dotnet:2.1-runtime-nanoserver-1709 AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk-nanoserver-1709 AS build
WORKDIR /src
COPY MyConsoleApp/MyConsoleApp.csproj MyConsoleApp/
RUN dotnet restore MyConsoleApp/MyConsoleApp.csproj
COPY . .
WORKDIR /src/MyConsoleApp
RUN dotnet build MyConsoleApp.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish MyConsoleApp.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyConsoleApp.exe"]

Мой вопрос: в чем разница между: microsoft / dotnet: 2.1-runtime-nanoserver-1709, microsoft / dotnet: 2.1-sdk и microsoft / dotnet: 2.1-runtime? Какой из них я должен использовать для своего консольного приложения .NET 2.1? Я не понимаю, если я а) создаю свое консольное приложение, а затем разверну его в образе докера или б) создаю образ докера, получу код и создаю консольное приложение на самом образе. Любая помощь приветствуется.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
10
0
13 138
5

Ответы 5

Речь идет не о самом докере, а об образах докеров .net

Вы можете перейти к https://hub.docker.com/r/microsoft/dotnet/, щелкнуть по конкретному изображению, найти Dockerfile и понять, что именно программное обеспечение построено в этом образе, и найти разницу между разными Dockerfile.

Что касается второго вопроса, лучше «создать образ докера, получить код и построить консольное приложение на самом образе». Итак, вы создаете образ, открываете порт, монтируете свой код как том, и ваш код выполняется внутри контейнера с помощью программного обеспечения, установленного в контейнере.

microsoft / dotnet: 2.1-runtime-nanoserver-1709 - этот образ используется для настройки среды выполнения .net, в которой работает любое приложение .net.

microsoft / dotnet: 2.1-sdk-nanoserver-1709 - этот образ представляет собой SDK, используемый для компиляции вашего основного приложения .net.

Обратитесь к этот блог, чтобы узнать, как создать и запустить приложение консоли ядра .net в докере:

Мой ответ на первый вопрос:

microsoft/dotnet:2.1-runtime-nanoserver-1709 - это образ докера, в котором можно запускать основные приложения .net,

microsoft/dotnet:2.1-sdk-nanoserver-1709 - это образ докера, который вы создаете для приложений, вы также можете запускать с ним приложения.

И мой ответ на второй вопрос:

Если вы просто хотите запустить приложение в докере, создайте свое приложение с помощью Visual Studio на локальном компьютере (это будет самый простой способ его создания), используйте microsoft/dotnet:2.1-runtime-nanoserver-1709, создайте образ докера.

Я поместил на Github пример того, как это сделать для приложения webapi .net core, поэтому для консольного приложения должно быть примерно то же самое.

Мой файл докеров выглядит так:

https://github.com/MikeyFriedChicken/MikeyFriedChicken.DockerWebAPI.Example

Это примерно то же самое, что и у вас.

Просто чтобы прояснить предыдущие ответы, то, что делает ваш файл докеров, создает «временные» образы, которые позволяют создавать ваше программное обеспечение. Как только все будет построено, эти изображения просто утилизируются.

Если вы посмотрите на свои последние строки в файле dockerfile, вы увидите, что он копирует выходные данные из образов сборки в ваш окончательный образ, основанный на 'microsoft / dotnet: 2.1-runtime-nanoserver-1709', который имеет достаточно библиотек и зависимостей для запуск вашего основного приложения .net.

Для всех, кто интересуется актуальной ссылкой на Dockerfile:

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /app

COPY <your app>.csproj .
RUN dotnet restore <your app>.csproj

COPY . .
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build /app/out ./

ENTRYPOINT ["dotnet", "<your app>.dll"]

обратите внимание на использование правильной версии ядра .NET в базовых образах (2.1, 2.2 и т. д.)

Mugen 31.07.2019 17:21

так что ENTRYPOINT .. "находит" статический основной метод (внутри Program.cs) .......... внутри "<your app> .dll"? Это волшебство?

granadaCoder 10.12.2019 16:05

да, так же, как когда вы просто запускаете dll из отладчика или командной строки

Mugen 10.12.2019 16:35

Другие вопросы по теме