Uruchamianie aplikacji ASP.NET Core w kontenerach platformy Docker
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję artykułu dla .NET 9.
W tym artykule pokazano, jak uruchomić aplikację ASP.NET Core w kontenerach platformy Docker.
Wersja systemu Windows Home nie obsługuje funkcji Hyper-V, a funkcja Hyper-V jest wymagana dla platformy Docker.
Zobacz Konteneryzacja aplikacji .NET za pomocą polecenia dotnet publish, aby uzyskać informacje na temat konteneryzacji aplikacji platformy .NET za pomocą dotnet publish
.
ASP.NET Core obrazy Dockera
Na potrzeby tego samouczka pobierzesz przykładową aplikację ASP.NET Core i uruchomisz ją w kontenerach platformy Docker. Przykład działa zarówno z kontenerami systemu Linux, jak i Windows.
Przykładowy plik Dockerfile używa funkcji kompilacji wieloetapowej platformy Docker do kompilowania i uruchamiania w różnych kontenerach. Kontenery kompilacji i uruchamiania są tworzone na podstawie obrazów udostępnianych w usłudze Docker Hub przez firmę Microsoft:
dotnet/sdk
W przykładzie użyto tego obrazu do kompilowania aplikacji. Obraz zawiera zestaw .NET SDK, który zawiera narzędzia wiersza polecenia (CLI). Obraz jest zoptymalizowany pod kątem lokalnego programowania, debugowania i testowania jednostkowego. Narzędzia zainstalowane na potrzeby programowania i kompilacji sprawiają, że obraz jest stosunkowo duży.
dotnet/aspnet
W przykładzie użyto tego obrazu do uruchamiania aplikacji. Obraz zawiera środowisko uruchomieniowe i biblioteki ASP.NET Core, a także jest zoptymalizowany pod kątem uruchamiania aplikacji w systemie produkcyjnym. Przeznaczony do szybkiego wdrażania i uruchamiania aplikacji obraz jest stosunkowo mały, więc wydajność sieci z rejestru platformy Docker do hosta platformy Docker jest zoptymalizowana. Do kontenera są kopiowane tylko pliki binarne i zawartość wymagana do uruchomienia aplikacji. Zawartość jest gotowa do uruchomienia, co umożliwia najszybsze przejście od
docker run
do uruchomienia aplikacji. Kompilacja kodu dynamicznego nie jest wymagana w modelu platformy Docker.
Wymagania wstępne
Klient platformy Docker w wersji 18.03 lub nowszej
Pobieranie przykładowej aplikacji
Pobierz przykład, klonując repozytorium Docker .NET:
git clone https://github.com/dotnet/dotnet-docker
Lokalne uruchamianie aplikacji
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom następujące polecenie, aby skompilować i uruchomić aplikację lokalnie:
dotnet run
W przeglądarce przejdź do
http://localhost:<port>
, aby przetestować aplikację.Naciśnij Ctrl+C w wierszu polecenia, aby zatrzymać aplikację.
Uruchamianie w kontenerze systemu Linux lub kontenerze systemu Windows
Aby uruchomić w kontenerze systemu Linux, kliknij prawym przyciskiem myszy ikonę klienta Docker w zasobniku systemowym i wybierz przełącz na kontenery systemu Linux.
Aby uruchomić w kontenerze Windows, kliknij prawym przyciskiem myszy ikonę klienta Docker na pasku zadań i wybierz opcję przełącz na kontenery Windows.
Przejdź do folderu Dockerfile pod adresem dotnet-docker/samples/aspnetapp.
Uruchom następujące polecenia, aby skompilować i uruchomić przykład na platformie Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Argumenty
build
polecenia:- Nadaj obrazowi nazwę aspnetapp.
- Wyszukaj plik Dockerfile w bieżącym folderze (kropka na końcu).
Argumenty polecenia „run”:
- Przydziel pseudo-TTY i pozostaw go otwarty, nawet jeśli nie jest dołączony. (Taki sam efekt jak
--interactive --tty
.) - Automatycznie usuń kontener po jego opuszczeniu.
- Przypisz
<port>
na komputerze lokalnym do portu 8080 w kontenerze. - Nadaj kontenerowi nazwę aspnetcore_sample.
- Określ obraz aplikacji aspnetapp.
Przejdź w przeglądarce do
http://localhost:<port>
, aby przetestować aplikację.
Ręczne kompilowanie i wdrażanie
W niektórych scenariuszach możesz chcieć wdrożyć aplikację w kontenerze, kopiując jej zasoby, które są potrzebne w czasie wykonywania. W tej sekcji przedstawiono sposób ręcznego wdrażania.
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom polecenie dotnet publish:
dotnet publish -c Release -o published
Argumenty polecenia:
- Skompiluj aplikację w trybie wydania (wartość domyślna to tryb debugowania).
- Utwórz zasoby w folderze published.
Uruchom aplikację.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Przejdź do
http://localhost:<port>
, aby zobaczyć stronę główną.
Aby użyć ręcznie opublikowanej aplikacji w kontenerze platformy Docker, utwórz nowy plik Dockerfile i użyj docker build .
polecenia , aby skompilować obraz.
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Aby wyświetlić nowy obraz, użyj docker images
polecenia .
Plik Dockerfile
Oto plik Dockerfile, który został użyty przez wcześniej uruchomione polecenie docker build
. Używa tego samego sposobu, w jaki ty to robiłeś w tej sekcji, aby skompilować i wdrożyć.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
W poprzednim pliku Dockerfile*.csproj
pliki są kopiowane i przywracane jako odrębne warstwy. Gdy docker build
polecenie skompiluje obraz, używa wbudowanej pamięci podręcznej.
*.csproj
Jeśli pliki nie zostały zmienione od czasu ostatniego docker build
uruchomienia polecenia, dotnet restore
polecenie nie musi być uruchamiane ponownie. Zamiast tego wbudowana pamięć podręczna dla odpowiedniej dotnet restore
warstwy jest ponownie wykorzystywana. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące pisania plików Dockerfile.
Dodatkowe zasoby
- Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish
- Polecenie kompilacji platformy Docker
- Polecenie Docker run
- ASP.NET Core Docker sample (ten używany w tym samouczku).
- Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia
- Praca z narzędziami platformy Docker programu Visual Studio
- Debugowanie za pomocą programu Visual Studio Code
- GC przy użyciu platformy Docker i małych kontenerów
- System.IO.IOException: Osiągnięto skonfigurowany limit użytkownika (128) liczby wystąpień inotify
- Aktualizacje obrazów Docker
Następne kroki
Repozytorium Git zawierające przykładową aplikację zawiera również dokumentację. Aby zapoznać się z omówieniem zasobów dostępnych w repozytorium, zobacz plik README. W szczególności dowiedz się, jak zaimplementować protokół HTTPS:
ASP.NET Core obrazy Docker
Na potrzeby tego samouczka pobierzesz przykładową aplikację ASP.NET Core i uruchomisz ją w kontenerach platformy Docker. Przykład działa zarówno z kontenerami systemu Linux, jak i Windows.
Przykładowy plik Dockerfile używa funkcji kompilacji wieloetapowej platformy Docker do kompilowania i uruchamiania w różnych kontenerach. Kontenery kompilacji i uruchamiania są tworzone na podstawie obrazów udostępnianych w usłudze Docker Hub przez firmę Microsoft:
dotnet/sdk
W przykładzie użyto tego obrazu do kompilowania aplikacji. Obraz zawiera zestaw .NET SDK, który zawiera narzędzia wiersza polecenia (CLI). Obraz jest zoptymalizowany pod kątem lokalnego programowania, debugowania i testowania jednostkowego. Narzędzia zainstalowane na potrzeby programowania i kompilacji sprawiają, że obraz jest stosunkowo duży.
dotnet/aspnet
W przykładzie użyto tego obrazu do uruchamiania aplikacji. Obraz zawiera środowisko uruchomieniowe ASP.NET Core, biblioteki i jest zoptymalizowany pod kątem uruchamiania aplikacji w środowisku produkcyjnym. Przeznaczony do szybkiego wdrażania i uruchamiania aplikacji obraz jest stosunkowo mały, więc wydajność sieci z rejestru platformy Docker do hosta platformy Docker jest zoptymalizowana. Do kontenera są kopiowane tylko pliki binarne i zawartość wymagana do uruchomienia aplikacji. Zawartość jest gotowa do uruchomienia, umożliwiając najszybsze przejście od
docker run
do uruchomienia aplikacji. Kompilacja kodu dynamicznego nie jest wymagana w modelu platformy Docker.
Wymagania wstępne
Klient platformy Docker w wersji 18.03 lub nowszej
Pobieranie przykładowej aplikacji
Pobierz przykład, klonując repozytorium .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Lokalne uruchamianie aplikacji
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom następujące polecenie, aby skompilować i uruchomić aplikację lokalnie:
dotnet run
Przejdź do
http://localhost:<port>
w przeglądarce, aby przetestować aplikację.Naciśnij Ctrl+C w wierszu polecenia, aby zatrzymać aplikację.
Uruchamianie w kontenerze systemu Linux lub kontenerze systemu Windows
Aby uruchomić w kontenerze systemu Linux, kliknij prawym przyciskiem myszy ikonę klienta Docker na pasku zadań i wybierz pozycję przełącz na kontenery systemu Linux.
Aby uruchomić w kontenerze systemu Windows, kliknij prawym przyciskiem myszy ikonę klienta Docker na pasku zadań i wybierz przełącz na kontenery Windows.
Przejdź do folderu Dockerfile pod adresem dotnet-docker/samples/aspnetapp.
Uruchom następujące polecenia, aby skompilować i uruchomić przykład na platformie Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Argumenty
build
polecenia:- Nadaj obrazowi nazwę aspnetapp.
- Wyszukaj plik Dockerfile w bieżącym folderze (kropka na końcu).
Argumenty polecenia run:
- Przydziel pseudo-TTY i utrzymuj go otwarty, nawet jeśli nie jest podłączony. (Taki sam efekt jak
--interactive --tty
.) - Automatycznie usuń kontener po jego zakończeniu działania.
- Zamapuj
<port>
komputer lokalny na port 8080 w kontenerze. - Nadaj kontenerowi nazwę aspnetcore_sample.
- Określ obraz aplikacji "aspnetapp".
Przejdź do
http://localhost:<port>
w przeglądarce, aby przetestować aplikację.
Ręczne kompilowanie i wdrażanie
W niektórych scenariuszach możesz chcieć wdrożyć aplikację w kontenerze, kopiując jej zasoby, które są potrzebne w czasie wykonywania. W tej sekcji przedstawiono sposób ręcznego wdrażania.
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom polecenie dotnet publish:
dotnet publish -c Release -o published
Argumenty polecenia:
- Skompiluj aplikację w trybie wydania (wartość domyślna to tryb debugowania).
- Utwórz zasoby w folderze opublikowanym.
Uruchom aplikację.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Przejdź do
http://localhost:<port>
, aby zobaczyć stronę główną.
Aby użyć ręcznie opublikowanej aplikacji w kontenerze platformy Docker, utwórz nowy plik Dockerfile i użyj docker build .
polecenia , aby skompilować obraz.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Aby wyświetlić nowy obraz, użyj docker images
polecenia .
Plik Dockerfile
Oto plik Dockerfile używany przez wcześniej uruchomione docker build
polecenie.
dotnet publish
Używa ona tego samego sposobu, w jaki wykonaliśmy w tej sekcji, aby skompilować i wdrożyć.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
W poprzednim Dockerfile pliki są kopiowane i przywracane jako odrębne warstwy. Gdy docker build
polecenie skompiluje obraz, używa wbudowanej pamięci podręcznej.
*.csproj
Jeśli pliki nie zostały zmienione od czasu ostatniego docker build
uruchomienia polecenia, dotnet restore
polecenie nie musi być uruchamiane ponownie. Zamiast tego wbudowana pamięć podręczna dla odpowiedniej dotnet restore
warstwy jest ponownie wykorzystywana. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące pisania plików Dockerfile.
Dodatkowe zasoby
- Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish
- Polecenie kompilacji platformy Docker
- Polecenie Docker run
- ASP.NET Core Docker sample (ten używany w tym samouczku).
- Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia
- Praca z narzędziami platformy Docker programu Visual Studio
- Debugowanie za pomocą programu Visual Studio Code
- GC przy użyciu platformy Docker i małych kontenerów
- System.IO.IOException: Osiągnięto skonfigurowany limit użytkownika (128) liczby wystąpień inotify
- Aktualizacje obrazów Docker
Następne kroki
Repozytorium Git zawierające przykładową aplikację zawiera również dokumentację. Aby zapoznać się z omówieniem zasobów dostępnych w repozytorium, zobacz plik README. W szczególności dowiedz się, jak zaimplementować protokół HTTPS:
ASP.NET Core obrazy Docker
Na potrzeby tego samouczka pobierzesz przykładową aplikację ASP.NET Core i uruchomisz ją w kontenerach platformy Docker. Przykład działa zarówno z kontenerami systemu Linux, jak i Windows.
Przykładowy plik Dockerfile używa funkcji kompilacji wieloetapowej platformy Docker do kompilowania i uruchamiania w różnych kontenerach. Kontenery kompilacji i uruchamiania są tworzone na podstawie obrazów udostępnianych w usłudze Docker Hub przez firmę Microsoft:
dotnet/sdk
W przykładzie użyto tego obrazu do kompilowania aplikacji. Obraz zawiera zestaw .NET SDK, który zawiera narzędzia wiersza polecenia (CLI). Obraz jest zoptymalizowany pod kątem lokalnego programowania, debugowania i testowania jednostkowego. Narzędzia zainstalowane na potrzeby programowania i kompilacji sprawiają, że obraz jest stosunkowo duży.
dotnet/aspnet
W przykładzie użyto tego obrazu do uruchamiania aplikacji. Obraz zawiera środowisko uruchomieniowe ASP.NET Core oraz biblioteki i jest zoptymalizowany pod kątem uruchamiania aplikacji w środowisku produkcyjnym. Przeznaczony do szybkiego wdrażania i uruchamiania aplikacji obraz jest stosunkowo mały, więc wydajność sieci z rejestru platformy Docker do hosta platformy Docker jest zoptymalizowana. Do kontenera są kopiowane tylko pliki binarne i zawartość wymagana do uruchomienia aplikacji. Zawartość jest gotowa do uruchomienia, umożliwiając najszybsze uruchomienie aplikacji od
docker run
. Kompilacja kodu dynamicznego nie jest wymagana w modelu platformy Docker.
Wymagania wstępne
Klient platformy Docker w wersji 18.03 lub nowszej
Pobieranie przykładowej aplikacji
Pobierz przykład, klonując repozytorium Docker .NET:
git clone https://github.com/dotnet/dotnet-docker
Lokalne uruchamianie aplikacji
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom następujące polecenie, aby skompilować i uruchomić aplikację lokalnie:
dotnet run
Przejdź do
http://localhost:5000
w przeglądarce, aby przetestować aplikację.Naciśnij Ctrl+C w wierszu polecenia, aby zatrzymać aplikację.
Uruchamianie w kontenerze systemu Linux lub kontenerze systemu Windows
Aby uruchomić w kontenerze systemu Linux, kliknij prawym przyciskiem myszy ikonę klienta Docker w zasobniku systemowym i wybierz przełącz na kontenery Linuksa.
Aby uruchomić w kontenerze systemu Windows, kliknij prawym przyciskiem myszy ikonę klienta platformy Docker na pasku zadań i wybierz przełącz na kontenery Windows.
Przejdź do folderu Dockerfile pod adresem dotnet-docker/samples/aspnetapp.
Uruchom następujące polecenia, aby skompilować i uruchomić przykład na platformie Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Argumenty
build
polecenia:- Nadaj obrazowi nazwę aspnetapp.
- Wyszukaj plik Dockerfile w bieżącym folderze (kropka na końcu).
Argumenty polecenia run:
- Przydziel pseudo-TTY i pozostaw go otwartym, nawet jeśli nie jest podłączony. (Taki sam efekt jak
--interactive --tty
.) - Automatycznie usuń kontener, gdy zakończy działanie.
- Zmapuj port 5000 na maszynie lokalnej na port 80 w kontenerze.
- Nadaj kontenerowi nazwę aspnetcore_sample.
- Określ obraz aplikacji aspnetapp.
Przejdź do
http://localhost:5000
w przeglądarce, aby przetestować aplikację.
Ręczne kompilowanie i wdrażanie
W niektórych scenariuszach możesz chcieć wdrożyć aplikację w kontenerze, kopiując jej zasoby, które są potrzebne w czasie wykonywania. W tej sekcji przedstawiono sposób ręcznego wdrażania.
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom polecenie dotnet publish:
dotnet publish -c Release -o published
Argumenty polecenia:
- Skompiluj aplikację w trybie wydania (wartość domyślna to tryb debugowania).
- Utwórz zasoby w folderze opublikowanym.
Uruchom aplikację.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Aby zobaczyć stronę główną, przejdź do
http://localhost:5000
.
Aby użyć ręcznie opublikowanej aplikacji w kontenerze platformy Docker, utwórz nowy plik Dockerfile i użyj docker build .
polecenia , aby skompilować obraz.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Aby wyświetlić nowy obraz, użyj docker images
polecenia .
Plik Dockerfile
Oto Dockerfile, którego użyło polecenie docker build
uruchomione wcześniej. Używa dotnet publish
tego samego sposobu, w jaki zrobiłeś w tej sekcji, aby skompilować i wdrożyć.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
W poprzednim Dockerfile*.csproj
pliki są kopiowane i przywracane jako odrębne warstwy. Gdy docker build
polecenie skompiluje obraz, używa wbudowanej pamięci podręcznej.
*.csproj
Jeśli pliki nie zostały zmienione od czasu ostatniego docker build
uruchomienia polecenia, dotnet restore
polecenie nie musi być uruchamiane ponownie. Zamiast tego wbudowana pamięć podręczna dla odpowiedniej dotnet restore
warstwy jest ponownie wykorzystywana. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące pisania plików Dockerfile.
Dodatkowe zasoby
- Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish
- Polecenie kompilacji platformy Docker
- Polecenie docker run
- ASP.NET Core Docker sample (ten używany w tym samouczku).
- Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia
- Praca z narzędziami platformy Docker programu Visual Studio
- Debugowanie za pomocą programu Visual Studio Code
- GC przy użyciu platformy Docker i małych kontenerów
- System.IO.IOException: Osiągnięto skonfigurowany limit użytkownika (128) liczby wystąpień inotify
- Aktualizacje obrazów Docker
Następne kroki
Repozytorium Git zawierające przykładową aplikację zawiera również dokumentację. Aby zapoznać się z omówieniem zasobów dostępnych w repozytorium, zobacz plik README. W szczególności dowiedz się, jak zaimplementować protokół HTTPS:
ASP.NET Core obrazy Docker
Na potrzeby tego samouczka pobierzesz przykładową aplikację ASP.NET Core i uruchomisz ją w kontenerach platformy Docker. Przykład działa zarówno z kontenerami systemu Linux, jak i Windows.
Przykładowy plik Dockerfile używa funkcji kompilacji wieloetapowej platformy Docker do kompilowania i uruchamiania w różnych kontenerach. Kontenery kompilacji i uruchamiania są tworzone na podstawie obrazów udostępnianych w usłudze Docker Hub przez firmę Microsoft:
dotnet/sdk
W przykładzie użyto tego obrazu do kompilowania aplikacji. Obraz zawiera zestaw .NET SDK, który zawiera narzędzia wiersza polecenia (CLI). Obraz jest zoptymalizowany pod kątem lokalnego programowania, debugowania i testowania jednostkowego. Narzędzia zainstalowane na potrzeby programowania i kompilacji sprawiają, że obraz jest stosunkowo duży.
dotnet/core/sdk
W przykładzie użyto tego obrazu do kompilowania aplikacji. Obraz zawiera zestaw .NET Core SDK, który zawiera narzędzia wiersza polecenia (CLI). Obraz jest zoptymalizowany pod kątem lokalnego programowania, debugowania i testowania jednostkowego. Narzędzia zainstalowane na potrzeby programowania i kompilacji sprawiają, że obraz jest stosunkowo duży.
dotnet/aspnet
W przykładzie użyto tego obrazu do uruchamiania aplikacji. Obraz zawiera środowisko uruchomieniowe ASP.NET Core oraz biblioteki i jest zoptymalizowany pod kątem uruchamiania aplikacji w środowisku produkcyjnym. Przeznaczony do szybkiego wdrażania i uruchamiania aplikacji obraz jest stosunkowo mały, więc wydajność sieci z rejestru platformy Docker do hosta platformy Docker jest zoptymalizowana. Do kontenera są kopiowane tylko pliki binarne i zawartość wymagana do uruchomienia aplikacji. Zawartość jest gotowa do uruchomienia, umożliwiając najszybsze uruchomienie aplikacji od
docker run
. Kompilacja kodu dynamicznego nie jest wymagana w modelu platformy Docker.
dotnet/core/aspnet
W przykładzie użyto tego obrazu do uruchamiania aplikacji. Obraz zawiera środowisko uruchomieniowe ASP.NET Core i biblioteki oraz jest dostosowany pod kątem uruchamiania aplikacji w środowisku produkcyjnym. Przeznaczony do szybkiego wdrażania i uruchamiania aplikacji obraz jest stosunkowo mały, więc wydajność sieci z rejestru platformy Docker do hosta platformy Docker jest zoptymalizowana. Do kontenera są kopiowane tylko pliki binarne i zawartość wymagana do uruchomienia aplikacji. Zawartość jest gotowa do uruchomienia, zapewniając najszybszy czas od
docker run
do uruchomienia aplikacji. Kompilacja kodu dynamicznego nie jest wymagana w modelu platformy Docker.
Wymagania wstępne
Klient platformy Docker w wersji 18.03 lub nowszej
Pobieranie przykładowej aplikacji
Pobierz przykład, klonując repozytorium .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Lokalne uruchamianie aplikacji
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom następujące polecenie, aby skompilować i uruchomić aplikację lokalnie:
dotnet run
Przejdź w przeglądarce do
http://localhost:5000
, aby przetestować aplikację.Naciśnij Ctrl+C w wierszu polecenia, aby zatrzymać aplikację.
Uruchamianie w kontenerze systemu Linux lub kontenerze systemu Windows
Aby uruchomić w kontenerze Linux, kliknij prawym przyciskiem myszy ikonę klienta Dockera w zasobniku systemowym i wybierz pozycję przełącz na kontenery Linux.
Aby uruchomić w kontenerach systemu Windows, kliknij prawym przyciskiem myszy ikonę klienta platformy Docker na pasku zadań i wybierz przełącz na kontenery systemu Windows.
Przejdź do folderu Dockerfile pod adresem dotnet-docker/samples/aspnetapp.
Uruchom następujące polecenia, aby skompilować i uruchomić przykład na platformie Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Argumenty
build
polecenia:- Nadaj obrazowi nazwę aspnetapp.
- Wyszukaj plik Dockerfile w bieżącym folderze (kropka na końcu).
Argumenty polecenia run:
- Przydziel pseudo-TTY i pozostaw go otwarty, nawet jeśli nie jest podłączony. (Taki sam efekt jak
--interactive --tty
.) - Automatycznie usuń kontener po jego zakończeniu.
- Przypisz port 5000 na lokalnej maszynie do portu 80 w kontenerze.
- Nadaj kontenerowi nazwę aspnetcore_sample.
- Określ obraz aplikacji aspnetapp.
Przejdź w przeglądarce do
http://localhost:5000
, aby przetestować aplikację.
Ręczne kompilowanie i wdrażanie
W niektórych scenariuszach możesz chcieć wdrożyć aplikację w kontenerze, kopiując jej zasoby, które są potrzebne w czasie wykonywania. W tej sekcji przedstawiono sposób ręcznego wdrażania.
Przejdź do folderu projektu pod adresem dotnet-docker/samples/aspnetapp/aspnetapp.
Uruchom polecenie dotnet publish:
dotnet publish -c Release -o published
Argumenty polecenia:
- Skompiluj aplikację w trybie wydania (wartość domyślna to tryb debugowania).
- Utwórz zasoby w folderze opublikowanym.
Uruchom aplikację.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Przejdź do strony głównej
http://localhost:5000
.
Aby użyć ręcznie opublikowanej aplikacji w kontenerze platformy Docker, utwórz nowy plik Dockerfile i użyj docker build .
polecenia , aby skompilować obraz.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Aby wyświetlić nowy obraz, użyj docker images
polecenia .
Plik Dockerfile
Oto Dockerfile, wykorzystany przez polecenie docker build
, które uruchomiłeś wcześniej. Używa dotnet publish
w ten sam sposób, w jaki zrobiłeś/zrobiłaś to w tej sekcji, aby skompilować i wdrożyć.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Aby wyświetlić nowy obraz, użyj docker images
polecenia .
Plik Dockerfile
Oto plik Dockerfile używany przez polecenie docker build
, które uruchomiłeś wcześniej. Używa dotnet publish
w ten sam sposób, w jaki zrobiłeś to w tej sekcji, aby skompilować i wdrożyć.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
W poprzednim pliku Dockerfile*.csproj
pliki są kopiowane i przywracane jako odrębne warstwy. Gdy docker build
polecenie skompiluje obraz, używa wbudowanej pamięci podręcznej.
*.csproj
Jeśli pliki nie zostały zmienione od czasu ostatniego docker build
uruchomienia polecenia, dotnet restore
polecenie nie musi być uruchamiane ponownie. Zamiast tego wbudowana pamięć podręczna dla odpowiedniej dotnet restore
warstwy jest ponownie wykorzystywana. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące pisania plików Dockerfile.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Plik Dockerfile
Oto plik Dockerfile używany przez polecenie docker build
, które uruchomiłeś wcześniej. Używa dotnet publish
w ten sam sposób, w jaki zrobiłeś to w tej sekcji, aby zbudować i wdrożyć.
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Jak wspomniano w poprzednim pliku Dockerfile, *.csproj
pliki są kopiowane i przywracane jako odrębne warstwy. Gdy docker build
polecenie skompiluje obraz, używa wbudowanej pamięci podręcznej.
*.csproj
Jeśli pliki nie zostały zmienione od czasu ostatniego docker build
uruchomienia polecenia, dotnet restore
polecenie nie musi być uruchamiane ponownie. Zamiast tego wbudowana pamięć podręczna dla odpowiedniej dotnet restore
warstwy jest ponownie wykorzystywana. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące pisania plików Dockerfile.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Plik Dockerfile
Oto plik Dockerfile używany przez polecenie uruchomione wcześniej. Używa tego samego sposobu, w jaki zrobiłeś to w tej sekcji, aby skompilować i wdrożyć.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
W poprzednim Dockerfile pliki są kopiowane i przywracane jako odrębne warstwy. Gdy docker build
polecenie skompiluje obraz, używa wbudowanej pamięci podręcznej.
*.csproj
Jeśli pliki nie zostały zmienione od czasu ostatniego docker build
uruchomienia polecenia, dotnet restore
polecenie nie musi być uruchamiane ponownie. Zamiast tego wbudowana pamięć podręczna dla odpowiedniej dotnet restore
warstwy jest ponownie wykorzystywana. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące pisania plików Dockerfile.
Dodatkowe zasoby
- Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish
- Polecenie kompilacji platformy Docker
- polecenie docker run
- ASP.NET Core Docker sample (ten używany w tym samouczku).
- Konfigurowanie platformy ASP.NET Core pod kątem pracy z serwerami proxy i modułami równoważenia obciążenia
- Praca z narzędziami platformy Docker programu Visual Studio
- Debugowanie za pomocą programu Visual Studio Code
- GC przy użyciu platformy Docker i małych kontenerów
- System.IO.IOException: Osiągnięto skonfigurowany limit użytkownika (128) liczby wystąpień inotify
Następne kroki
Repozytorium Git zawierające przykładową aplikację zawiera również dokumentację. Aby zapoznać się z omówieniem zasobów dostępnych w repozytorium, zobacz plik README. W szczególności dowiedz się, jak zaimplementować protokół HTTPS: