Начало работы с Docker в Visual Studio для Mac

Важно!

Visual Studio для Mac планируется выйти на пенсию 31 августа 2024 года в соответствии с современной политикой жизненного цикла Майкрософт. Хотя вы можете продолжать работать с Visual Studio для Mac, есть несколько других вариантов для разработчиков на Mac, таких как предварительная версия нового расширения комплекта разработки C# для VS Code.

Дополнительные сведения о временной шкале поддержки и альтернативах.

В Visual Studio для Mac можно легко компилировать, отлаживать и выполнять контейнерные приложения ASP.NET Core, а также публиковать их в Azure.

Необходимые компоненты

Установка и настройка

Чтобы установить Docker, изучите и выполните рекомендации из статьи об установке Docker Desktop для Mac.

Создание веб-приложения ASP.NET Core и добавление поддержки Docker

  1. Создайте новое решение, выбрав Файл > Создать решение.
  2. В разделе приложения .NET Core > выберите шаблон веб-приложения:Create a new ASP.NET application
  3. Выберите целевую платформу. В этом примере мы будем использовать .NET Core 2.2: Set target framework
  4. Введите сведения о проекте, например имя (DockerDemo в нашем примере). Созданный проект содержит все основные сведения, которые потребуются для сборки и запуска веб-сайта ASP.NET Core.
  5. В окне решения щелкните правой кнопкой мыши проект DockerDemo и выберите добавить > поддержку Docker: Add docker support

Visual Studio для Mac автоматически добавит в решение новый проект с именем docker-compose, а затем добавит в существующий проект файл Dockerfile.

Generated docker support files

Общие сведения о Dockerfile

Dockerfile содержит инструкции по созданию окончательного образа Docker. См. справочник по Dockerfile для получения сведений о других доступных в нем командах.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY DockerDemo/DockerDemo.csproj DockerDemo/
RUN dotnet restore "DockerDemo/DockerDemo.csproj"
COPY . .
WORKDIR "/src/DockerDemo"
RUN dotnet build "DockerDemo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DockerDemo.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerDemo.dll"]

Предыдущий Dockerfile основан на образе microsoft/aspnetcore и включает в себя инструкции по изменению базового образа путем сборки проекта и добавления его в контейнер.

Примечание.

По умолчанию файл Dockerfile, созданный в Visual Studio для Mac, открывает порт 80 для HTTP-трафика. Чтобы включить HTTPS-трафик, добавьте Expose 443 в Dockerfile.

Отладка

Настройте проект docker-compose в качестве запускаемого проекта и запустите отладку (Пуск > Начать отладку). Эта команда компилирует, развертывает и запускает проект ASP.NET в контейнере.

Совет

Во время первого запуска после установки Docker Desktop может появиться следующая ошибка при попытке отладки: Cannot start service dockerdemo: Mounts denied

Добавьте /usr/local/share/dotnet/sdk/NuGetFallbackFolder на вкладку общего доступа в Docker Desktop:

Adding the NuGetFallbackFolder folder to File Sharing

Когда сборка завершится, приложение откроется в браузере Safari:

Default Docker project running in Safari

Обратите внимание, что контейнер будет прослушивать некоторый порт (например, http://localhost:32768) номер которого может быть разным.

Чтобы просмотреть список выполняемых контейнеров, выполните команду docker ps в терминале.

Обратите внимание на ретранслятор портов на следующем снимке экрана (в разделе PORTS (Порты)). Это означает, что контейнер прослушивает порт, который мы ранее открывали в браузере Safari, и передает все запросы на внутренний веб-сервер через порт 80 (как определено в файле Dockerfile). Само приложение считает, что прослушивает порт 80:

Docker container list