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 build oder dotnet publish verwenden, um von der Befehlszeile aus zu erstellen.

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

Docker-Build verwenden

Wenn Sie eine Projektmappe für Container über die Befehlszeile erstellen möchten, 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. Das kann beispielsweise der Ordner sein, aus dem Sie Dateien kopieren und in den Container einfügen. Verwenden Sie in .NET Core-Projekten standardmäßig den Ordner mit der Projektmappendatei (.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 entspricht der standardmäßige Buildkontext dem Projektordner und nicht dem Projektmappenordner.

docker build -f Dockerfile ..

Sie können den Buildkontext in der Projektdatei mit der DockerfileContext-Eigenschaft festlegen. Beispiel:

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

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

Bei 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 Sie keine weiteren Änderungen in der Datei beibehalten möchten) und Docker-Unterstützung hinzufügen erneut ausführen und dieses Mal den neuen Buildkontext angeben. Die neue Dockerfile-Datei verfügt über aktualisierte relative Pfade, die dem neuen Buildkontext entsprechen.

Verwenden von MSBuild

Hinweis

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. Siehe stattdessen Containerisierung einer .NET-Anwendung mit dotnet publish.

Dockerfiles, die von Visual Studio für .NET Framework-Projekte (und für .NET Core-Projekte, die mit älteren Versionen als Update 4 von Visual Studio 2017 erstellt wurden) erstellt werden, entsprechen nicht dem Multistagetyp. Mit den Schritten in diesen Dockerfiles wird der Code nicht kompiliert. Wenn Visual Studio ein .NET Framework-Dockerfile erstellt, kompiliert die IDE stattdessen zuerst das Projekt mithilfe von MSBuild. Wenn dieser Vorgang erfolgreich ist, erstellt Visual Studio anschließend das Dockerfile, wodurch einfach die Buildausgabe von MSBuild in das resultierende Docker-Image kopiert wird. Da die Schritte zum Kompilieren des Codes nicht im Dockerfile enthalten sind, können Sie .NET Framework-Dockerfiles nicht mithilfe von docker build über die Befehlszeile erstellen. Sie sollten MSBuild verwenden, um diese Projekte zu erstellen.

Zum Erstellen eines Images für ein einzelnes Docker-Containerprojekt können Sie MSBuild mit der Befehlsoption /t:ContainerBuild verwenden. Dieser Befehl weist MSBuild an, einen Build für das Ziel ContainerBuild und nicht für das Standardziel Build zu erstellen. 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 die Ergebnisse beim Erstellen mit der Debugkonfiguration möglicherweise nicht Ihren Erwartungen entsprechen, wenn Visual Studio die Multistageoptimierung für Builds verwendet. Siehe Anpassen von Containerimages für das Debuggen.

Wenn Sie ein Docker Compose-Projekt verwenden, nutzen Sie den Befehl zum Erstellen von Images:

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.