Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 9 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 9 этой статьи.
В этой статье показано, как запустить приложение ASP.NET Core в контейнерах Docker.
Выпуск Windows Home не поддерживает Hyper-V, а Hyper-V необходим для Docker.
Сведения о контейнеризации приложения .NET см. в статье dotnet publish
Образы Docker для ASP.NET Core
Для работы с этим руководством следует скачать пример приложения ASP.NET Core и запустить его в контейнерах Docker. Этот пример поддерживается в контейнерах Linux и Windows.
Пример файла Dockerfile использует функцию многоэтапной сборки Docker для сборки и выполнения в разных контейнерах. Контейнеры для сборки и выполнения создаются на основе образов, предоставленных корпорацией Майкрософт в Docker Hub:
dotnet/sdk
Этот образ используется в этом примере для создания приложения. Образ содержит пакет SDK для .NET, который включает программы командной строки (CLI). Изображение оптимизировано для локальной разработки, отладки и тестирования. Установленные средства разработки и компиляции делают этот образ относительно большим.
dotnet/aspnet
Этот образ используется в этом примере для выполнения приложения. Этот образ содержит среду выполнения и библиотеки ASP.NET Core и оптимизирован для запуска приложений в рабочей среде. Образ нацелен на высокую скорость развертывания и запуска приложений, поэтому он сравнительно невелик, что позволяет оптимизировать производительность сети между реестром Docker и узлом Docker. В контейнер копируются только двоичные файлы и содержимое, необходимые для запуска приложений. Все содержимое готово к работе, что обеспечивает минимальное время от момента
docker run
до запуска приложения. В модели Docker динамическая компиляция кода не требуется.
Предварительные требования
Клиент Docker 18.03 или более поздней версии
загрузка примера приложения;
Скачайте пример, клонировав репозиторий Docker для .NET.
git clone https://github.com/dotnet/dotnet-docker
Локальный запуск приложения
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните следующую команду, чтобы собрать и запустить приложение локально:
dotnet run
В браузере перейдите по адресу
http://localhost:<port>
, чтобы протестировать приложение.Нажмите сочетание клавиш CTRL+C в командной строке, чтобы остановить приложение.
Запуск в контейнере Linux или контейнере Windows
Чтобы выполнить запуск в контейнере Linux, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Linux containers (Переключиться на контейнеры Linux).
Чтобы выполнить запуск в контейнере Windows, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Windows containers (Переключиться на контейнеры Windows).
Перейдите в папку проекта Dockerfile dotnet-docker/samples/aspnetapp.
Выполните следующие команды, чтобы собрать и запустить пример в Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Команда
build
выполняет следующее:- присваивает образу имя aspnetapp;
- ищет файл Dockerfile в текущей папке (точка в конце).
Аргументы команды run:
- выделяет псевдотерминал и сохраняет его открытым, даже если он не подключен. (действует так же, как
--interactive --tty
); - автоматически удаляет контейнер при завершении работы;
- Настроить перенаправление
<port>
на локальную машину на порт 8080 в контейнере. - присваивает контейнеру имя aspnetcore_sample;
- Укажите образ aspnetapp.
В браузере перейдите по адресу
http://localhost:<port>
, чтобы протестировать приложение.
локальная сборка и развертывание.
В некоторых сценариях вам потребуется развернуть приложение в контейнер, скопировав нужные для выполнения ресурсы. В этом разделе показано, как развернуть приложение вручную.
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните команду dotnet publish.
dotnet publish -c Release -o published
Эта команда выполняет следующее:
- собирает приложение в режиме выпуска (по умолчанию используется режим отладки);
- создает ресурсы в папке published.
Запустите приложение.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Перейдите к
http://localhost:<port>
, чтобы просмотреть домашнюю страницу.
Чтобы использовать приложение, опубликованное вручную в контейнере Docker, создайте новый Dockerfile и выполните команду docker build .
для создания образа.
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Чтобы увидеть новое изображение, используйте команду docker images
.
Файл Dockerfile
Представленный здесь файл Dockerfile используется в команде docker build
, которую вы выполняли ранее. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
# 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"]
Как отмечалось в предыдущем Dockerfile, файлы *.csproj
копируются и восстанавливаются в виде отдельных слоев. При создании образа команда docker build
использует встроенный кэш. Если файлы *.csproj
не изменялись с момента последнего запуска команды docker build
, выполнять команду dotnet restore
повторно не нужно. Вместо нее используется встроенный кэш для соответствующего слоя dotnet restore
. Дополнительные сведения см. в статье Best practices for writing Dockerfiles (Рекомендации по созданию файлов Dockerfile).
Дополнительные ресурсы
- Контейнеризация приложения .NET с помощью dotnet publish
- Команда Docker build
- Команда Docker run
- Пример ASP.NET Core для Docker (который используется в этом руководстве).
- Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки
- Работа со средствами Visual Studio для Docker
- Отладка с помощью Visual Studio Code
- Сборка мусора с использованием Docker и небольших контейнеров
- System.IO.IOException: настроенное ограничение пользователя (128) на число экземпляров inotify достигнуто.
- Обновления образов Docker
Следующие шаги
Репозиторий Git помимо примера приложения содержит и документацию. Обзор ресурсов, доступных в этом репозитории, см. в файле README. Особый интерес представляют сведения о реализации протокола HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)
Образы Docker для ASP.NET Core
Для работы с этим руководством следует скачать пример приложения ASP.NET Core и запустить его в контейнерах Docker. Этот пример поддерживается в контейнерах Linux и Windows.
Пример файла Dockerfile использует функцию многоэтапной сборки Docker для сборки и выполнения в разных контейнерах. Контейнеры для сборки и выполнения создаются на основе образов, предоставленных корпорацией Майкрософт в Docker Hub:
dotnet/sdk
Этот образ используется в этом примере для создания приложения. Образ содержит пакет SDK для .NET, который включает программы командной строки (CLI). Изображение оптимизировано для локальной разработки, отладки и модульного тестирования. Установленные средства разработки и компиляции делают образ относительно большим.
dotnet/aspnet
Этот образ используется в этом примере для выполнения приложения. Этот образ содержит среду выполнения и библиотеки ASP.NET Core и оптимизирован для запуска приложений в рабочей среде. Образ нацелен на высокую скорость развертывания и запуска приложений, поэтому он сравнительно невелик, что позволяет оптимизировать производительность сети между реестром Docker и узлом Docker. В контейнер копируются только двоичные файлы и содержимое, необходимые для запуска приложений. Все содержимое готово к работе, что обеспечивает максимально быстрое время от
docker run
до запуска приложения. В модели Docker динамическая компиляция кода не требуется.
Предварительные условия
Клиент Docker 18.03 или более поздней версии
загрузка примера приложения;
Скачайте пример, клонировав репозиторий Docker для .NET.
git clone https://github.com/dotnet/dotnet-docker
Локальный запуск приложения
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните следующую команду, чтобы собрать и запустить приложение локально:
dotnet run
В браузере перейдите по адресу
http://localhost:<port>
, чтобы протестировать приложение.Нажмите сочетание клавиш CTRL+C в командной строке, чтобы остановить приложение.
Запуск в контейнере Linux или контейнере Windows
Чтобы выполнить запуск в контейнере Linux, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Linux containers (Переключиться на контейнеры Linux).
Чтобы выполнить запуск в контейнере Windows, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Windows containers (Переключиться на контейнеры Windows).
Перейдите в папку проекта Dockerfile dotnet-docker/samples/aspnetapp.
Выполните следующие команды, чтобы собрать и запустить пример в Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Команда
build
выполняет следующее:- присваивает образу имя aspnetapp;
- Ищите файл Dockerfile в текущей папке (точка в конце).
Аргументы команды run:
- выделяет псевдотерминал и сохраняет его открытым, даже если не подключен (действует так же, как
--interactive --tty
); - Автоматически удалить контейнер при выходе.
- Сопоставляет
<port>
локальный компьютер с портом 8080 в контейнере. - присваивает контейнеру имя aspnetcore_sample;
- Укажите образ aspnetapp.
В браузере перейдите по адресу
http://localhost:<port>
, чтобы протестировать приложение.
сборка и развертывание вручную.
В некоторых сценариях вам потребуется развернуть приложение в контейнер, скопировав нужные для выполнения ресурсы. В этом разделе показано, как развернуть приложение вручную.
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните команду dotnet publish.
dotnet publish -c Release -o published
Аргументы команды:
- собирает приложение в режиме выпуска (по умолчанию используется режим отладки);
- Создайте ресурсы в папке published.
Запустите приложение.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Перейдите к
http://localhost:<port>
, чтобы просмотреть домашнюю страницу.
Чтобы использовать приложение, опубликованное вручную в контейнере Docker, создайте новый Dockerfile и выполните команду docker build .
для создания образа.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Чтобы просмотреть новое изображение, выполните команду docker images
.
Файл Dockerfile
Представленный здесь файл Dockerfile используется в команде docker build
, которую вы выполняли ранее. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
# 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"]
Как отмечалось в предыдущем Dockerfile, файлы *.csproj
копируются и восстанавливаются в виде отдельных слоев. При создании образа команда docker build
использует встроенный кэш. Если файлы *.csproj
не изменялись с момента последнего запуска команды docker build
, выполнять команду dotnet restore
повторно не нужно. Вместо нее используется встроенный кэш для соответствующего слоя dotnet restore
. Дополнительные сведения см. в статье Best practices for writing Dockerfiles (Рекомендации по созданию файлов Dockerfile).
Дополнительные ресурсы
- Контейнеризация приложения .NET с помощью dotnet publish
- Команда Docker build
- Команда Docker run
- Пример ASP.NET Core для Docker (который используется в этом руководстве).
- Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки
- Работа со средствами Visual Studio для Docker
- Отладка с помощью Visual Studio Code
- GC с использованием Docker и небольших контейнеров
- System.IO.IOException: настроенное ограничение пользователя (128) на число экземпляров inotify достигнуто.
- Обновления образов Docker
Следующие шаги
Репозиторий Git помимо примера приложения содержит и документацию. Обзор ресурсов, доступных в этом репозитории, см. в файле README. Особый интерес представляют сведения о реализации протокола HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)
Образы Docker для ASP.NET Core
Для работы с этим руководством следует скачать пример приложения ASP.NET Core и запустить его в контейнерах Docker. Этот пример поддерживается в контейнерах Linux и Windows.
Пример файла Dockerfile использует функцию многоэтапной сборки Docker для сборки и выполнения в разных контейнерах. Контейнеры для сборки и выполнения создаются на основе образов, предоставленных корпорацией Майкрософт в Docker Hub:
dotnet/sdk
Этот образ используется в этом примере для создания приложения. Образ содержит пакет SDK для .NET, который включает программы командной строки (CLI). Он оптимизирован для локальной разработки, отладки и модульного тестирования. Установленные средства разработки и компиляции делают образ относительно большим.
dotnet/aspnet
Этот образ используется в этом примере для выполнения приложения. Этот образ содержит среду выполнения и библиотеки ASP.NET Core и оптимизирован для запуска приложений в рабочей среде. Образ нацелен на высокую скорость развертывания и запуска приложений, поэтому он сравнительно невелик, что позволяет оптимизировать производительность сети между реестром Docker и узлом Docker. В контейнер копируются только двоичные файлы и содержимое, необходимые для запуска приложений. Содержимое готово к выполнению, что позволяет максимально быстро перейти от
docker run
к запуску приложения. В модели Docker динамическая компиляция кода не требуется.
Предварительные условия
Клиент Docker 18.03 или более поздней версии
загрузка примера приложения;
Скачайте пример, клонировав репозиторий Docker для .NET.
git clone https://github.com/dotnet/dotnet-docker
Локальный запуск приложения
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните следующую команду, чтобы собрать и запустить приложение локально:
dotnet run
В браузере перейдите по адресу
http://localhost:5000
, чтобы протестировать приложение.Нажмите сочетание клавиш CTRL+C в командной строке, чтобы остановить приложение.
Запуск в контейнере Linux или контейнере Windows
Чтобы выполнить запуск в контейнере Linux, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Linux containers (Переключиться на контейнеры Linux).
Чтобы выполнить запуск в контейнере Windows, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Windows containers (Переключиться на контейнеры Windows).
Перейдите в папку проекта Dockerfile dotnet-docker/samples/aspnetapp.
Выполните следующие команды, чтобы собрать и запустить пример в Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Команда
build
выполняет следующее:- присваивает образу имя aspnetapp;
- Ищите файл Dockerfile в текущей папке (обратите внимание на точку в конце).
Аргументы команды run:
- Выделить псевдотерминал и держать его открытым, даже если не подключен. (действует так же, как
--interactive --tty
); - автоматически удаляет контейнер при завершении работы;
- сопоставляет порт 5000 на локальном компьютере с портом 80 в контейнере;
- присваивает контейнеру имя aspnetcore_sample;
- Укажите образ aspnetapp.
В браузере перейдите по адресу
http://localhost:5000
, чтобы протестировать приложение.
Ручная сборка и развертывание.
В некоторых сценариях вам потребуется развернуть приложение в контейнер, скопировав нужные для выполнения ресурсы. В этом разделе показано, как развернуть приложение вручную.
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните команду dotnet publish.
dotnet publish -c Release -o published
Аргументы команды:
- собирает приложение в режиме выпуска (по умолчанию используется режим отладки);
- Создайте ресурсы в папке published.
Запустите приложение.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Перейдите к
http://localhost:5000
, чтобы просмотреть домашнюю страницу.
Чтобы использовать приложение, опубликованное вручную в контейнере Docker, создайте новый Dockerfile и выполните команду docker build .
для создания образа.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Чтобы просмотреть новое изображение, выполните команду docker images
.
Файл Dockerfile
Представленный здесь файл Dockerfile используется в команде docker build
, которую вы выполняли ранее. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
# 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"]
Как отмечалось в предыдущем Dockerfile, файлы *.csproj
копируются и восстанавливаются в виде отдельных слоев. При создании образа команда docker build
использует встроенный кэш. Если файлы *.csproj
не изменялись с момента последнего запуска команды docker build
, выполнять команду dotnet restore
повторно не нужно. Вместо нее используется встроенный кэш для соответствующего слоя dotnet restore
. Дополнительные сведения см. в статье Best practices for writing Dockerfiles (Рекомендации по созданию файлов Dockerfile).
Дополнительные ресурсы
- Контейнеризация приложения .NET с помощью dotnet publish
- Команда Docker build
- Команда Docker run
- Пример ASP.NET Core для Docker (который используется в этом руководстве).
- Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки
- Работа со средствами Visual Studio для Docker
- Отладка с помощью Visual Studio Code
- GC с использованием Docker и небольших контейнеров
- System.IO.IOException: настроенное ограничение пользователя (128) на число экземпляров inotify достигнуто.
- Обновления образов Docker
Следующие шаги
Репозиторий Git помимо примера приложения содержит и документацию. Обзор ресурсов, доступных в этом репозитории, см. в файле README. Особый интерес представляют сведения о реализации протокола HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)
Образы Docker для ASP.NET Core
Для работы с этим руководством следует скачать пример приложения ASP.NET Core и запустить его в контейнерах Docker. Этот пример поддерживается в контейнерах Linux и Windows.
Пример файла Dockerfile использует функцию многоэтапной сборки Docker для сборки и выполнения в разных контейнерах. Контейнеры для сборки и выполнения создаются на основе образов, предоставленных корпорацией Майкрософт в Docker Hub:
dotnet/sdk
Этот образ используется в этом примере для создания приложения. Образ содержит пакет SDK для .NET, который включает программы командной строки (CLI). Он оптимизирован для локальной разработки, отладки и модульного тестирования. Установленные инструменты для разработки и компиляции делают образ относительно большим.
dotnet/core/sdk
Этот образ используется в этом примере для создания приложения. Образ содержит пакет SDK для .NET Core, который включает программы командной строки (CLI). Изображение оптимизировано для локальной разработки, отладки и модульного тестирования. Установленные средства разработки и компиляции делают этот образ относительно большим.
dotnet/aspnet
Этот образ используется в этом примере для выполнения приложения. Этот образ содержит среду выполнения и библиотеки ASP.NET Core и оптимизирован для запуска приложений в рабочей среде. Образ нацелен на высокую скорость развертывания и запуска приложений, поэтому он сравнительно невелик, что позволяет оптимизировать производительность сети между реестром Docker и узлом Docker. В контейнер копируются только двоичные файлы и содержимое, необходимые для запуска приложений. Все содержимое готово к запуску, что гарантирует самый короткий срок от запуска
docker run
до запуска приложения. В модели Docker динамическая компиляция кода не требуется.
dotnet/core/aspnet
Этот образ используется в этом примере для выполнения приложения. Этот образ содержит среду выполнения и библиотеки ASP.NET Core и оптимизирован для запуска приложений в рабочей среде. Образ нацелен на высокую скорость развертывания и запуска приложений, поэтому он сравнительно невелик, что позволяет оптимизировать производительность сети между реестром Docker и узлом Docker. В контейнер копируются только двоичные файлы и содержимое, необходимые для запуска приложений. Все содержимое готово к запуску, что обеспечивает максимально быстрый переход от
docker run
к запуску приложения. В модели Docker динамическая компиляция кода не требуется.
Предварительные условия
Клиент Docker 18.03 или более поздней версии
загрузка примера приложения;
Скачайте пример, клонировав репозиторий Docker для .NET.
git clone https://github.com/dotnet/dotnet-docker
Локальный запуск приложения
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните следующую команду, чтобы собрать и запустить приложение локально:
dotnet run
В браузере перейдите по адресу
http://localhost:5000
, чтобы протестировать приложение.Нажмите сочетание клавиш CTRL+C в командной строке, чтобы остановить приложение.
Запуск в контейнере Linux или контейнере Windows
Чтобы выполнить запуск в контейнере Linux, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Linux containers (Переключиться на контейнеры Linux).
Чтобы выполнить запуск в контейнере Windows, щелкните правой кнопкой мыши значок клиента Docker в панели задач и выберите пункт switch to Windows containers (Переключиться на контейнеры Windows).
Перейдите в папку проекта Dockerfile dotnet-docker/samples/aspnetapp.
Выполните следующие команды, чтобы собрать и запустить пример в Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Команда
build
выполняет следующее:- присваивает образу имя aspnetapp;
- Ищите файл Dockerfile в текущей папке (с точкой в конце).
Аргументы команды run:
- Выделяет псевдо-TTY и сохраняет его открытым, даже если он не подключён. (действует так же, как
--interactive --tty
); - автоматически удаляет контейнер при завершении работы;
- сопоставляет порт 5000 на локальном компьютере с портом 80 в контейнере;
- присваивает контейнеру имя aspnetcore_sample;
- Укажите образ aspnetapp.
В браузере перейдите по адресу
http://localhost:5000
, чтобы протестировать приложение.
сборка и развертывание вручную.
В некоторых сценариях вам потребуется развернуть приложение в контейнер, скопировав нужные для выполнения ресурсы. В этом разделе показано, как развернуть приложение вручную.
Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp.
Выполните команду dotnet publish.
dotnet publish -c Release -o published
Аргументы команды:
- собирает приложение в режиме выпуска (по умолчанию используется режим отладки);
- Создайте ресурсы в папке published.
Запустить приложение.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Перейдите к
http://localhost:5000
, чтобы просмотреть домашнюю страницу.
Чтобы использовать приложение, опубликованное вручную в контейнере Docker, создайте новый Dockerfile и выполните команду docker build .
для создания образа.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Чтобы просмотреть новое изображение, выполните команду docker images
.
Файл Dockerfile
Вот Dockerfile, который используется в команде docker build
, которую вы запускали ранее. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
# 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"]
Чтобы просмотреть новое изображение, выполните команду docker images
.
Файл Dockerfile
Здесь приведён файл Dockerfile, который используется в команде docker build
, выполненной вами ранее. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
# 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"]
Как отмечалось в предыдущем Dockerfile, файлы *.csproj
копируются и восстанавливаются в виде отдельных слоев. При создании образа команда docker build
использует встроенный кэш. Если файлы *.csproj
не изменялись с момента последнего запуска команды docker build
, выполнять команду dotnet restore
повторно не нужно. Вместо нее используется встроенный кэш для соответствующего слоя dotnet restore
. Дополнительные сведения см. в статье Best practices for writing Dockerfiles (Рекомендации по созданию файлов Dockerfile).
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Файл Dockerfile
Вот файл Dockerfile, который использовался командой docker build
, выполненной вами ранее. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
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"]
Как отмечалось в предыдущем Dockerfile, файлы *.csproj
копируются и восстанавливаются в виде отдельных слоев. При создании образа команда docker build
использует встроенный кэш. Если файлы *.csproj
не изменялись с момента последнего запуска команды docker build
, выполнять команду dotnet restore
повторно не нужно. Вместо нее используется встроенный кэш для соответствующего слоя dotnet restore
. Дополнительные сведения см. в статье Best practices for writing Dockerfiles (Рекомендации по созданию файлов Dockerfile).
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Файл Dockerfile
Вот Dockerfile, используемый в команде docker build
, которую вы уже выполняли. Она использует dotnet publish
для создания и развертывания так же, как показано в этом разделе.
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"]
Как отмечалось в предыдущем Dockerfile, файлы *.csproj
копируются и восстанавливаются в виде отдельных слоев. При создании образа команда docker build
использует встроенный кэш. Если файлы *.csproj
не изменялись с момента последнего запуска команды docker build
, выполнять команду dotnet restore
повторно не нужно. Вместо нее используется встроенный кэш для соответствующего слоя dotnet restore
. Дополнительные сведения см. в статье Best practices for writing Dockerfiles (Рекомендации по созданию файлов Dockerfile).
Дополнительные ресурсы
- Контейнеризация приложения .NET с помощью dotnet publish
- Команда Docker build
- Команда запуска Docker
- Пример ASP.NET Core для Docker (который используется в этом руководстве).
- Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки
- Работа со средствами Visual Studio для Docker
- Отладка с помощью Visual Studio Code
- GC с Docker и маленькими контейнерами
- System.IO.IOException: настроенное ограничение пользователя (128) на число экземпляров inotify достигнуто.
Следующие шаги
Репозиторий Git помимо примера приложения содержит и документацию. Обзор ресурсов, доступных в этом репозитории, см. в файле README. Особый интерес представляют сведения о реализации протокола HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)
ASP.NET Core