J'ai une application console .NET Core 2.1. Je veux exécuter cette application console dans une image Docker. Je suis nouveau chez Docker et j'essaie juste de comprendre.
À cette époque, j’ai un fichier Dockerfile, inspiré de Microsoft's Example . Mon fichier ressemble en réalité à ceci:
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"]
Ma question est, quelle est la différence entre: Microsoft/dotnet: 2.1-runtime-nanoserver-1709, Microsoft/dotnet: 2.1-sdk et Microsoft/dotnet: 2.1-runtime? Lequel dois-je utiliser pour mon application console .NET 2.1? Je suis confus quant à savoir si j'ai a) créer mon application console, puis la déployer sur une image de menu fixe ou b) créer une image de menu fixe, obtenir le code et créer l'application console sur l'image elle-même. Toute aide est appréciée.
C'est une question qui ne concerne pas uniquement le menu fixe, mais les images du menu fixe .net
Vous pouvez aller à la https://hub.docker.com/r/Microsoft/dotnet/ cliquer sur une image particulière pour trouver Dockerfile et comprendre ce que le logiciel construit exactement dans cette image et trouver la différence entre différents Dockerfile
En ce qui concerne la deuxième question, il vaut mieux "créer une image de menu fixe, obtenir le code et créer l'application de la console sur l'image elle-même". Ainsi, vous construisez l'image, exposez le port, montez votre code en tant que volume et votre code s'exécute à l'intérieur du conteneur à l'aide du logiciel installé dans le conteneur.
Microsoft/dotnet: 2.1-runtime-nanoserver-1709 - Cette image est utilisée pour configurer le runtime .net, sous lequel une application .net s'exécute.
Microsoft/dotnet: 2.1-sdk-nanoserver-1709 - Cette image est du SDK utilisé pour compiler votre application .net principale
Reportez-vous à ce blog pour savoir comment créer et exécuter une application de console .net dans docker:
Ma réponse à la première question est la suivante:
Microsoft/dotnet:2.1-runtime-nanoserver-1709
est une image de menu fixe dans laquelle vous pouvez exécuter des applications .net,
Et Microsoft/dotnet:2.1-sdk-nanoserver-1709
est une image de menu fixe dans laquelle vous créez des applications, vous pouvez également exécuter une application avec celle-ci.
Et ma réponse à la deuxième question est la suivante:
Si vous souhaitez uniquement exécuter une application dans docker, créez votre application avec Visual Studio sur votre ordinateur local (ce sera le moyen le plus simple de le créer), utilisez le Microsoft/dotnet:2.1-runtime-nanoserver-1709
, créez une image de menu fixe.
Je donne un exemple à Github sur la façon de procéder pour une application web .ap de base .net, ce qui devrait être sensiblement la même chose pour une application console.
Mon fichier docker ressemble à:
https://github.com/MikeyFriedChicken/MikeyFriedChicken.DockerWebAPI.Example
Cela fait à peu près la même chose que la vôtre.
Juste pour clarifier les réponses précédentes, votre fichier dockerfile crée des images "temporaires" qui permettent de créer votre logiciel. Une fois que tout est construit, ces images sont simplement mises au rebut.
Si vous examinez vos dernières lignes dans votre fichier docker, vous verrez qu’elles copient la sortie des images de construction dans votre image finale, qui est basée sur 'Microsoft/dotnet: 2.1-runtime-nanoserver-1709', qui ne contient que les bibliothèques et les dépendances nécessaires. exécuter votre application de base .net.