[asp.net core 2.0 et docker pour linux]
Je suis complètement nouveau chez Docker et j'essaie de comprendre comment utiliser Docker dans le cas où j'ai une solution avec 2 projets. Tous les tutoriels que j'ai vus montrent un seul projet.
Donc, si quelqu'un pouvait montrer une solution étape par étape, je l'apprécierais vraiment.
j'ai une structure de solution comme:
Solution.sln
|______WebAPIProject.csproj
|______ClassLibraryProject.csproj
Dans Visual studio, j'ai ajouté le support de menu fixe à la solution et j'ai obtenu les fichiers suivants:
Sous WebAPIProject, il a créé ce fichier Docker :
FROM Microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "WebAPIProject.dll"]
puis, dans le "projet" distinct de docker-compose, j'ai:
docker-compose.ci.build.yml
version: '3'
services:
ci-build:
image: Microsoft/aspnetcore-build:1.0-2.0
volumes:
- .:/src
working_dir: /src
command: /bin/bash -c "dotnet restore ./Solution.sln && dotnet publish ./Solution.sln -c Release -o ./obj/Docker/publish"
et docker.compose.yml file
version: '3'
services:
WebAPIProject:
image: WebAPIProject
build:
context: ./WebAPIProject
dockerfile: Dockerfile
Je suis sûr que c'est quelque chose de banal avec des chemins, mais je suis tout simplement perdu avec tout ça, donc si quelqu'un pouvait nous éclairer un peu?
J'ai enfin trouvé un moyen de construire des solutions avec docker.
Je viens de créer un fichier Docker avec le contenu suivant:
FROM Microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM Microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY Solution.sln ./
COPY ClassLibraryProject/*.csproj ./ClassLibraryProject/
COPY WebAPIProject/*.csproj ./WebAPIProject/
RUN dotnet restore
COPY . .
WORKDIR /src/ClassLibraryProject
RUN dotnet build -c Release -o /app
WORKDIR /src/WebAPIProject
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebAPIProject.dll"]
Notez que je pense que vous devrez peut-être respecter les dépendances de construction du projet mais je ne le sais pas vraiment.
Exemple d'appel à construire:
Sudo docker build --no-cache -t webapi:dev .
Exemple d'appel à exécuter:
Sudo docker run -d=false -p 8080:80 --name webapi webapi:dev
J'espère que cela pourra aider.
Bien que je comprenne que le noyau de dotnet n'est pas spécifique à Windows et que tout le monde n'utilisera pas Visual Studio, il existe cette fonctionnalité intéressante que Microsoft a incluse dans Visual Studio (essayé en 2017).
Si vous avez plusieurs projets Web, répétez l’étape pour chacun d’eux.
Voici la référence: https://docs.Microsoft.com/en-us/aspnet/core/Host-and-deploy/docker/visual-studio-tools-for-docker?view=aspnetcore-2.1#existing- app
Si vous rencontrez des problèmes lors de l’exécution du conteneur Docker, essayez de désélectionner Hyper-V Services
dans "Fonctionnalités Windows" (Recherche de Windows Features
dans le menu Démarrer), sélectionnez à nouveau, puis redémarrez votre ordinateur . Vérifiez ici .
FROM Microsoft/dotnet:sdk AS build-env
WORKDIR /app
RUN mkdir /output
# Copy project and publish
COPY . /app
WORKDIR /app/YourProjectName
RUN dotnet publish --configuration Debug --output /output
# Build runtime image
FROM Microsoft/dotnet:aspnetcore-runtime
ENV ASPNETCORE_URLS http://*:5001
WORKDIR /app
COPY --from=build-env /output .
EXPOSE 5001
ENTRYPOINT ["dotnet", "YourProjectName.dll"]
C'est une configuration Docker qui a fonctionné pour moi. Il s'agissait d'un projet WebApi ASP.NET Core 2 avec de nombreuses références de projets enfants.
Then run it using docker run -d -p 8080:5001 --name some-name yourpojectname
J'espère que cela aide quelqu'un.