Udostępnij przez


Kompilowanie projektu kontenera z poziomu wiersza polecenia

Jeśli chcesz utworzyć projekt kontenera przy użyciu pliku Dockerfile poza programem Visual Studio, możesz użyć polecenia docker build (lub podman build), lub dotnet publish /t:PublishContainer do zbudowania projektu z poziomu wiersza polecenia.

Jeśli używasz trybu kompilacji .NET SDK, nie masz pliku Dockerfile, więc nie możesz użyć docker build lub podman build. Zamiast tego użyj dotnet publish /t:PublishContainer do kompilacji z linii poleceń.

Jeśli chcesz utworzyć projekt kontenera przy użyciu pliku Dockerfile poza programem Visual Studio, możesz użyć polecenia docker build lub dotnet publish /t:PublishContainer skompilować go z poziomu wiersza polecenia.

Jeśli używasz typu kompilacji zestawu SDK platformy .NET, nie masz pliku Dockerfile, więc nie możesz użyć polecenia docker build. Zamiast tego użyj polecenia dotnet publish /t:PublishContainer , aby skompilować je w wierszu polecenia.

Wymagania wstępne

Wymagania wstępne

  • Docker Desktop.
  • Program Visual Studio, który ma zainstalowane pakiety do tworzenia ASP.NET i aplikacji internetowych, rozwoju aplikacji na platformie Azure, i/lub rozwoju aplikacji desktopowych .NET.

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. Podaj kontekst kompilacji oraz argument. Kontekst kompilacji dla pliku Dockerfile to folder na komputerze lokalnym, który jest używany jako folder roboczy do tworzenia 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 lub .slnx). Wyrażony jako ścieżka względna, ten argument to zazwyczaj ".." dla pliku Dockerfile w folderze projektu oraz pliku rozwiązania w folderze nadrzędnym.

docker build -f Dockerfile ..

W przypadku projektów programu .NET Framework domyślny kontekst kompilacji to folder projektu, a nie folder rozwiązania.

Kontekst kompilacji można ustawić w pliku projektu, ustawiając właściwość DockerfileContext. Na przykład

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

Korzystanie z kompilacji platformy Docker lub kompilacji narzędzia Podman

Aby utworzyć rozwiązanie konteneryzowane z poziomu wiersza polecenia, zazwyczaj można użyć polecenia docker build <context> (lub podman build <context>) dla każdego projektu w rozwiązaniu. Podaj kontekst kompilacji oraz argument. Kontekst kompilacji dla pliku Dockerfile to folder na komputerze lokalnym, który jest używany jako folder roboczy do tworzenia 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 lub .slnx). Wyrażony jako ścieżka względna, ten argument to zazwyczaj ".." dla pliku Dockerfile w folderze projektu oraz pliku rozwiązania w folderze nadrzędnym.

docker build -f Dockerfile ..
podman build -f Dockerfile ..

Kontekst kompilacji można ustawić w pliku projektu, ustawiając właściwość ContainerBuildContext. Na przykład

<PropertyGroup>
   <ContainerBuildContext>contextfolder</ContainerBuildContext>
</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ć Dodaj 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.

Po dodaniu obsługi kontenera 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ć polecenie Dodaj obsługę kontenera, 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

Notatka

W tej sekcji opisano sposób dostosowywania kontenerów 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, spójrz na Konteneryzowanie aplikacji .NET za pomocą dotnet publish.

Pliki Dockerfile utworzone przez program Visual Studio dla projektów .NET Framework (i dla projektów .NET Core utworzonych w wersjach Visual Studio starszych niż Visual Studio 2017 Update 4) nie są wielostopniowymi Dockerfile. Instrukcje w tych Dockerfili nie kompilują twojego 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 docker build z wiersza 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ą polecenia /t:ContainerBuild. To polecenie nakazuje programowi MSBuild budowanie docelowego ContainerBuild zamiast domyślnego 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 Output podczas kompilowania rozwiązania z poziomu środowiska IDE programu Visual Studio. Zawsze używaj /p:Configuration=Release, ponieważ w przypadkach, gdy program Visual Studio korzysta z optymalizacji kompilacji wieloetapowej, wyniki podczas kompilowania konfiguracji Debug mogą nie być zgodne z oczekiwaniami. Zobacz Dostosowywanie obrazów kontenerów na potrzeby 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.

Kompilowanie z poziomu wiersza polecenia

Program Visual Studio używa trybu szybkiego (jeśli jest włączony) do utworzenia obrazu kontenera skonfigurowanego najlepiej do programowania i debugowania, dlatego nie zalecamy kopiowania poleceń budowania Docker z okna Dane wyjściowe po kompilacji trybu szybkiego. Aby utworzyć standardowy obraz bez niestandardowych optymalizacji, możesz kliknąć prawym przyciskiem myszy plik Dockerfile i wybrać opcję Zbuduj obraz Dockera.

Program Visual Studio używa trybu szybkiego (jeśli jest włączony) w celu utworzenia obrazu kontenera skonfigurowanego do celów rozwojowych i debugowania, dlatego nie zalecamy kopiowania poleceń docker build lub podman build z okna Wyjściowe po kompilacji trybu szybkiego. Aby utworzyć obraz standardowy bez standardowych optymalizacji, możesz kliknąć prawym przyciskiem myszy plik Dockerfile i wybrać opcję Kompiluj obraz .

Program Visual Studio używa tagu dev do wyznaczenia obrazów, które zostały specjalnie przygotowane do optymalizacji czasu uruchamiania podczas debugowania. Jednak te obrazy nie powinny być używane poza kontekstem programu Visual Studio. Ten tag wskazuje, że obrazy mają niestandardowe modyfikacje i dostosowania, na przykład w celu obsługi debugowania w trybie szybkim. Zobacz Dostosowywanie kontenerów platformy Docker w programie Visual Studio.