Kompilowanie projektu kontenera z poziomu wiersza polecenia
Jeśli chcesz skompilować projekt kontenera przy użyciu pliku Dockerfile poza programem Visual Studio, możesz użyć polecenia docker build
, MSBuild
, dotnet build
lub dotnet publish
do skompilowania z poziomu wiersza polecenia.
Jeśli używasz typu kompilacji zestawu .NET SDK, nie masz pliku Dockerfile, więc nie możesz użyć polecenia docker build
, zamiast tego użyj polecenia MSBuild
dotnet build
lub dotnet publish
do skompilowania w wierszu polecenia.
Korzystanie z kompilacji platformy Docker
Aby utworzyć rozwiązanie konteneryzowane z poziomu wiersza polecenia, zazwyczaj można użyć polecenia docker build <context>
dla każdego projektu w rozwiązaniu. Należy podać argument kontekstu kompilacji. Kontekst kompilacji pliku Dockerfile to folder na komputerze lokalnym, który jest używany jako folder roboczy do wygenerowania obrazu. Na przykład jest to folder, z którego kopiujesz pliki podczas kopiowania do kontenera. W projektach platformy .NET Core domyślną wartością jest użycie folderu zawierającego plik rozwiązania (.sln). Wyrażona jako ścieżka względna ten argument jest zazwyczaj "."." dla pliku Dockerfile w folderze projektu i pliku rozwiązania w folderze nadrzędnym. W przypadku projektów programu .NET Framework domyślny kontekst kompilacji to folder projektu, a nie folder rozwiązania.
docker build -f Dockerfile ..
Kontekst kompilacji można ustawić w pliku projektu, ustawiając DockerfileContext
właściwość . Na przykład:
<PropertyGroup>
<DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>
Ścieżki względne w pliku Dockerfile są względne względem kontekstu kompilacji, więc jeśli zmienisz kontekst, pamiętaj, aby odpowiednio zaktualizować ścieżki względne.
W programie Visual Studio 17.11 lub nowszym po dodaniu obsługi platformy Docker do projektu można określić folder dla kontekstu kompilacji. Jeśli chcesz zmienić kontekst kompilacji, możesz usunąć plik Dockerfile (jeśli nie ma innych zmian, które chcesz zachować) i ponownie uruchomić obsługę platformy Docker, tym razem określając nowy kontekst kompilacji. Nowy plik Dockerfile będzie miał zaktualizowane ścieżki względne, aby odpowiadały nowemu kontekstowi kompilacji.
Korzystanie z programu MSBuild
Uwaga
W tej sekcji opisano sposób dostosowywania kontenerów platformy Docker podczas wybierania typu kompilacji kontenera Dockerfile. Jeśli używasz typu kompilacji zestawu .NET SDK, opcje dostosowywania są inne, a informacje zawarte w tym artykule nie mają zastosowania. Zamiast tego zobacz Containerize a .NET app with dotnet publish (Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish).
Pliki Dockerfile utworzone przez program Visual Studio dla projektów .NET Framework (i dla projektów platformy .NET Core utworzonych z wersjami programu Visual Studio przed programem Visual Studio 2017 Update 4) nie są wieloestowymi plikami Dockerfile. Kroki opisane w tych plikach Dockerfile nie kompilują kodu. Zamiast tego, gdy program Visual Studio kompiluje plik Dockerfile programu .NET Framework, najpierw kompiluje projekt przy użyciu programu MSBuild. Po pomyślnym zakończeniu program Visual Studio skompiluje plik Dockerfile, który po prostu kopiuje dane wyjściowe kompilacji z programu MSBuild do wynikowego obrazu platformy Docker. Ponieważ kroki kompilowania kodu nie są uwzględnione w pliku Dockerfile, nie można skompilować plików Dockerfile programu .NET Framework przy użyciu wiersza docker build
polecenia. Należy użyć programu MSBuild do skompilowania tych projektów.
Aby utworzyć obraz dla pojedynczego projektu kontenera platformy Docker, możesz użyć programu MSBuild z opcją /t:ContainerBuild
polecenia. To polecenie nakazuje programowi MSBuild skompilowanie obiektu docelowego ContainerBuild
, a nie domyślnego elementu docelowego Build
. Na przykład:
MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release
Zobaczysz dane wyjściowe podobne do tych, które są widoczne w oknie Dane wyjściowe podczas kompilowania rozwiązania z poziomu środowiska IDE programu Visual Studio. Zawsze używaj elementu /p:Configuration=Release
, ponieważ w przypadkach, gdy program Visual Studio korzysta z optymalizacji kompilacji wieloeeżowej, wyniki podczas kompilowania konfiguracji debugowania mogą nie być zgodnie z oczekiwaniami. Zobacz Dostosowywanie obrazów kontenerów do debugowania.
Jeśli używasz projektu Docker Compose, użyj tego polecenia, aby skompilować obrazy:
msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj
Aby wyświetlić dzienniki programu MSBuild, zobacz Uzyskiwanie dzienników kompilacji za pomocą programu MSBuild.