Поделиться через


Создание проекта контейнера из командной строки

Если вы хотите создать проект контейнера с Dockerfile за пределами Visual Studio, можно использовать docker build (или podman build) или dotnet publish /t:PublishContainer для сборки из командной строки.

Если вы используете тип сборки пакета SDK для .NET, у вас нет файла Dockerfile, поэтому вы не можете использовать docker build или podman build; вместо этого используйте dotnet publish /t:PublishContainer для сборки в командной строке.

Если вы хотите собрать проект контейнера с Dockerfile за пределами Visual Studio, можно использовать docker build или dotnet publish /t:PublishContainer для сборки из командной строки.

Если вы используете тип сборки пакета SDK для .NET, у вас нет файла Dockerfile, поэтому вместо этого вы не можете использовать docker build. Вместо этого используйте dotnet publish /t:PublishContainer для сборки в командной строке.

Предпосылки

  • Docker Desktop или Podman Desktop.
  • Visual Studio или для поддержки Podman Visual Studio 2026 с установленной рабочей нагрузкой разработки ASP.NET и веб-разработки, рабочей нагрузкой разработки Azure и (или) рабочей нагрузкой разработки классических приложений .NET .

Предпосылки

  • Docker Desktop.
  • Visual Studio с установленными рабочими нагрузками для разработки на ASP.NET и веб, разработки на Azure и/или разработки настольных приложений .NET.

Использование сборки Docker

Чтобы создать контейнерное решение из командной строки, обычно можно использовать команду docker build <context> для каждого проекта в решении. Вы предоставляете аргумент контекста сборки . Контекст сборки для файла Dockerfile — это папка на локальном компьютере, которая используется в качестве рабочей папки для создания образа. Например, это папка, из которую копируются файлы при копировании в контейнер. В проектах .NET Core по умолчанию используется папка, содержащая файл решения (.sln или SLNX). Выраженный как относительный путь, этот аргумент обычно является "." для Файла Dockerfile в папке проекта и файла решения в родительской папке.

docker build -f Dockerfile ..

Для проектов .NET Framework контекст сборки по умолчанию — это папка проекта, а не папка решения.

Контекст сборки в файле проекта можно задать, задав свойство DockerfileContext. Например

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

Используйте команду Docker build или Podman build

Чтобы создать контейнерное решение из командной строки, обычно можно использовать команду docker build <context> (или podman build <context>) для каждого проекта в решении. Вы предоставляете аргумент контекста сборки . Контекст сборки для файла Dockerfile — это папка на локальном компьютере, которая используется в качестве рабочей папки для создания образа. Например, это папка, из которую копируются файлы при копировании в контейнер. В проектах .NET Core по умолчанию используется папка, содержащая файл решения (.sln или SLNX). Выраженный как относительный путь, этот аргумент обычно является "." для Файла Dockerfile в папке проекта и файла решения в родительской папке.

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

Контекст сборки в файле проекта можно задать, задав свойство ContainerBuildContext. Например

<PropertyGroup>
   <ContainerBuildContext>contextfolder</ContainerBuildContext>
</PropertyGroup>

Относительные пути в Dockerfile относятся к контексту сборки, поэтому при изменении контекста обязательно обновите относительные пути соответствующим образом.

При добавлении поддержки Docker в проект в Visual Studio версий 17.11 и выше, можно указать папку для контекста сборки. Если вы хотите изменить контекст сборки, можно удалить Dockerfile (если у него нет других изменений, которые вы хотите сохранить), и повторно запустить добавить поддержку Docker, на этот раз указав новый контекст сборки. Новый Dockerfile будет иметь относительные пути, обновленные в соответствии с новым контекстом сборки.

При добавлении поддержки контейнеров в проект можно указать папку для контекста сборки. Если вы хотите изменить контекст сборки, вы можете удалить Dockerfile (если у него нет других изменений, которые вы хотите сохранить), и повторно запустить службу поддержки контейнеров, на этот раз указав новый контекст сборки. Новый Dockerfile будет иметь относительные пути, обновленные в соответствии с новым контекстом сборки.

Использование MSBuild

Заметка

В этом разделе описывается, как настроить контейнеры при выборе типа сборки контейнера Dockerfile. Если вы используете тип сборки пакета SDK для .NET, параметры настройки отличаются, а сведения в этой статье не применимы. Вместо этого см. инструкцию Containerize a .NET app with dotnet publish.

Dockerfiles, созданные в Visual Studio для проектов .NET Framework (и для проектов .NET Core, созданных с помощью версий Visual Studio до обновления 4 в 2017 году), не являются многоэтапными файлами. Шаги в этих Dockerfile не компилируют ваш код. Вместо этого, когда Visual Studio создает Dockerfile .NET Framework, сначала компилирует проект с помощью MSBuild. После успешного выполнения Visual Studio создает Dockerfile, который просто копирует выходные данные сборки из MSBuild в полученный образ Docker. Поскольку шаги по компиляции вашего кода не включены в Dockerfile, вы не можете создавать Dockerfiles .NET Framework с использованием docker build из командной строки. Для создания этих проектов следует использовать MSBuild.

Чтобы создать образ для одного проекта контейнера Docker, можно использовать MSBuild с параметром команды /t:ContainerBuild. Эта команда указывает MSBuild строить цель ContainerBuild, а не цель Buildпо умолчанию. Например:

MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release

При сборке решения из интегрированной среды разработки Visual Studio отображаются выходные данные, аналогичные тем, что вы видите в окне вывода . Всегда используйте /p:Configuration=Release, так как в случаях, когда Visual Studio использует многоступенчатую оптимизацию сборки, результаты при создании конфигурации Debug могут быть неожиданными. См. раздел Настройка образов контейнеров для отладки.

Если вы используете проект Docker Compose, используйте эту команду для создания образов:

msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj

Сведения о просмотре журналов MSBuild см. в статье Получение журналов сборки с помощью MSBuild.

Сборка из командной строки

Visual Studio использует быстрый режим (если включен) для создания образа контейнера, настроенного для оптимальной работы для разработки и отладки, поэтому мы не рекомендуем копировать команды сборки Docker из окна вывода после сборки быстрого режима. Чтобы создать стандартный образ без нестандартной оптимизации, щелкните файл Dockerfile правой кнопкой мыши и выберите параметр "Создать образ Docker ".

Visual Studio использует быстрый режим (если включен) для создания образа контейнера, настроенного для оптимальной работы для разработки и отладки, поэтому мы не рекомендуем копировать docker buildpodman build команды из окна вывода после сборки быстрого режима. Чтобы создать стандартный образ без нестандартной оптимизации, щелкните файл Dockerfile правой кнопкой мыши и выберите параметр "Создать образ ".

Visual Studio использует dev тег для обозначения образов, специально подготовленных для оптимизации времени запуска во время отладки. Однако эти изображения не следует использовать вне контекста Visual Studio. Этот тег указывает, что изображения имеют нестандартные изменения и настройки, например для поддержки отладки в режиме быстрого режима. См . статью "Настройка контейнеров Docker" в Visual Studio.