Freigeben über


Erstellen eines Containerprojekts über die Befehlszeile

Wenn Sie ein Containerprojekt mit einer Dockerfile außerhalb von Visual Studio erstellen möchten, können Sie docker build, MSBuild, dotnet buildoder dotnet publish verwenden, um über die Befehlszeile zu erstellen.

Wenn Sie den .NET SDK-Buildtyp verwenden, verfügen Sie nicht über eine Dockerfile-Datei, sodass Sie docker buildnicht verwenden können; Verwenden Sie stattdessen MSBuild, dotnet build oder dotnet publish, um auf der Befehlszeile zu erstellen.

Verwenden Sie Docker-Build

Um eine containerisierte Lösung über die Befehlszeile zu erstellen, können Sie in der Regel den Befehl docker build <context> für jedes Projekt in der Projektmappe verwenden. Dabei müssen Sie das Argument für den Buildkontext angeben. Der Buildkontext eines Dockerfile auf dem lokalen Computer ist der Ordner, der als Arbeitsordner zum Generieren des Images verwendet wird. Beispielsweise ist es der Ordner, aus dem Sie Dateien kopieren, wenn Sie in den Container kopieren. In .NET Core-Projekten wird standardmäßig der Ordner verwendet, der die Lösungsdatei enthält (.sln). Dieses Argument wird als relativer Pfad angegeben und ist in der Regel „..“ für ein Dockerfile in einem Projektordner und für die Projektmappendatei im übergeordneten Ordner. Bei .NET Framework-Projekten ist der Standardbuildkontext der Projektordner und nicht der Projektmappenordner.

docker build -f Dockerfile ..

Sie können den Buildkontext in der Projektdatei festlegen, indem Sie die eigenschaft DockerfileContext festlegen. Zum Beispiel

<PropertyGroup>
   <DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>

Relative Pfade in der Dockerfile sind relativ zum Buildkontext. Wenn Sie den Kontext ändern, müssen Sie daher die relativen Pfade entsprechend aktualisieren.

Mit Visual Studio 17.11 und höher können Sie beim Hinzufügen der Docker-Unterstützung zu einem Projekt einen Ordner für den Buildkontext angeben. Wenn Sie den Buildkontext ändern möchten, können Sie die Dockerfile-Datei löschen (wenn keine anderen Änderungen vorhanden sind, die Sie beibehalten möchten), und führen Sie Hinzufügen der Docker-Unterstützungerneut aus, dieses Mal den neuen Buildkontext angeben. Die neue Dockerfile wird relative Pfade aktualisieren, um dem neuen Buildkontext zu entsprechen.

Verwenden von MSBuild

Anmerkung

In diesem Abschnitt wird beschrieben, wie Sie Ihre Docker-Container anpassen können, wenn Sie den Dockerfile-Containerbuildtyp auswählen. Wenn Sie den .NET SDK-Buildtyp verwenden, unterscheiden sich die Anpassungsoptionen, und die Informationen in diesem Artikel gelten nicht. Lesen Sie stattdessen Containerisierung einer .NET-Anwendung mit dotnet publish.

Dockerfiles, die von Visual Studio für .NET Framework-Projekten (und für .NET Core-Projekte erstellt wurden, die mit Versionen von Visual Studio vor Visual Studio 2017 Update 4 erstellt wurden) sind keine mehrstufigen Dockerfiles. Die Schritte in diesen Dockerfiles kompilieren Ihren Code nicht. Wenn Visual Studio stattdessen eine .NET Framework Dockerfile erstellt, kompiliert es zuerst Ihr Projekt mithilfe von MSBuild. Wenn dies erfolgreich ist, erstellt Visual Studio dann die Dockerfile-Datei, die einfach die Buildausgabe von MSBuild in das resultierende Docker-Image kopiert. Da die Schritte zum Kompilieren ihres Codes nicht in der Dockerfile enthalten sind, können Sie .NET Framework Dockerfiles nicht mit docker build über die Befehlszeile erstellen. Sie sollten MSBuild verwenden, um diese Projekte zu erstellen.

Um ein Image für ein einzelnes Docker-Containerprojekt zu erstellen, können Sie MSBuild mit der Befehlsoption /t:ContainerBuild verwenden. Dieser Befehl weist MSBuild an, das Ziel ContainerBuild anstelle des Standardziels Buildzu erstellen. Zum Beispiel:

MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release

Die Ausgabe ähnelt der, die im Fenster Ausgabe angezeigt wird, wenn Sie eine Projektmappe mit der IDE Visual Studio erstellen. Verwenden Sie immer /p:Configuration=Release, da in Fällen, in denen Visual Studio die Multistage-Buildoptimierung verwendet, Ergebnisse beim Erstellen der Debug--Konfiguration möglicherweise nicht wie erwartet sind. Weitere Informationen finden Sie unter zum Anpassen von Containerimages für Debugging.

Wenn Sie ein Docker Compose-Projekt verwenden, verwenden Sie diesen Befehl, um Images zu erstellen:

msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj

Informationen zum Anzeigen der MSBuild-Protokolle finden Sie unter Abrufen von Buildprotokollen mit MSBuild.