web-dev-qa-db-fra.com

asp.net core 2.0 - fichier docker de solution de projets multiples

[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?

8
dee zg

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.

7
Rod

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). 

  1. Faites un clic droit sur le projet Web. 
  2. Sélectionnez Ajouter.
  3. Cliquez sur "Support Docker". Cela va automatiquement chercher plusieurs projets dans le conteneur. 

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 .

 enter image description here

3
Jose A
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.

0
Mateusz Migała