Een containerproject maken via de opdrachtregel
Als u een containerproject wilt bouwen met een Dockerfile buiten Visual Studio, kunt u docker build
, MSBuild
, dotnet build
of dotnet publish
gebruiken om vanaf de opdrachtregel te bouwen.
Als u het buildtype .NET SDK gebruikt, hebt u geen Dockerfile, zodat u docker build
niet kunt gebruiken; Gebruik in plaats daarvan MSBuild
, dotnet build
of dotnet publish
om op de opdrachtregel te bouwen.
Docker-build gebruiken
Als u een containeroplossing wilt bouwen vanaf de opdrachtregel, kunt u meestal de opdracht docker build <context>
voor elk project in de oplossing gebruiken. U geeft de buildcontext argument op. De build-context voor een Dockerfile is de map op de lokale computer die wordt gebruikt als de werkmap om de image te genereren. Dit is bijvoorbeeld de map waaruit u bestanden kopieert wanneer u naar de container kopieert. In .NET Core-projecten wordt standaard de map met het oplossingsbestand (.sln) gebruikt. Dit argument wordt uitgedrukt als een relatief pad, meestal ".." voor een Dockerfile in een projectmap en het oplossingsbestand in de bovenliggende map. Voor .NET Framework-projecten is de standaard buildcontext de projectmap, niet de oplossingsmap.
docker build -f Dockerfile ..
U kunt de buildcontext in het projectbestand instellen door de eigenschap DockerfileContext
in te stellen. Bijvoorbeeld
<PropertyGroup>
<DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>
Relatieve paden in het Dockerfile zijn relatief ten opzichte van de buildcontext, dus als u de context wijzigt, moet u de relatieve paden dienovereenkomstig bijwerken.
Wanneer u Docker-ondersteuning toevoegt aan een project, kunt u met Visual Studio 17.11 en hoger een map voor de buildcontext opgeven. Als u de buildcontext wilt wijzigen, kunt u het Dockerfile verwijderen (als deze geen andere wijzigingen bevat die u wilt behouden) en Docker-ondersteuning toevoegenopnieuw uitvoeren. Geef deze keer de nieuwe buildcontext op. De nieuwe Dockerfile zal bijgewerkte relatieve paden bevatten die overeenkomen met de nieuwe buildcontext.
MSBuild gebruiken
Notitie
In deze sectie wordt beschreven hoe u uw Docker-containers kunt aanpassen wanneer u het buildtype Dockerfile-container kiest. Als u het buildtype .NET SDK gebruikt, zijn de aanpassingsopties anders en zijn de informatie in dit artikel niet van toepassing. Zie in plaats daarvan Een .NET-app containeriseren met dotnet publish.
Dockerfiles die zijn gemaakt door Visual Studio voor .NET Framework-projecten (en voor .NET Core-projecten die zijn gemaakt met versies van Visual Studio vóór Visual Studio 2017 Update 4) zijn geen dockerfiles met meerdere fasen. De stappen in deze Dockerfiles compileren uw code niet. In plaats daarvan, wanneer Visual Studio een .NET Framework Dockerfile bouwt, wordt uw project eerst gecompileerd met behulp van MSBuild. Wanneer dat lukt, bouwt Visual Studio vervolgens het Dockerfile, waarmee de build-uitvoer van MSBuild wordt gekopieerd naar de resulterende Docker-installatiekopieën. Omdat de stappen voor het compileren van uw code niet zijn opgenomen in het Dockerfile, kunt u geen .NET Framework Dockerfiles bouwen met behulp van docker build
vanaf de opdrachtregel. U moet MSBuild gebruiken om deze projecten te bouwen.
Als u een image wilt maken voor een Docker-containerproject, kunt u MSBuild gebruiken met de opdrachtoptie /t:ContainerBuild
. Met deze opdracht geeft u aan MSBuild om het doel ContainerBuild
te bouwen in plaats van het standaarddoel Build
. Bijvoorbeeld:
MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release
U ziet uitvoer die lijkt op wat u ziet in het venster Uitvoer wanneer u uw oplossing bouwt vanuit de Visual Studio IDE. Gebruik altijd /p:Configuration=Release
, omdat in gevallen waarin Visual Studio gebruikmaakt van de meerstaps build-optimalisatie, de resultaten bij het bouwen van de Debug-configuratie mogelijk niet zoals verwacht zijn. Zie Containerafbeeldingen aanpassen voor debuggen.
Als u een Docker Compose-project gebruikt, voert u deze opdracht uit om images te bouwen:
msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj
Zie Bouwlogboeken verkrijgen met MSBuildom de MSBuild-bouwlogboeken weer te geven.