Создание проекта контейнера из командной строки
Если вы хотите создать проект контейнера с dockerfile за пределами Visual Studio, можно использовать docker build
, MSBuild
dotnet build
или dotnet publish
создать из командной строки.
Если вы используете тип сборки пакета SDK для .NET, у вас нет файла Dockerfile, поэтому вместо этого вы не можете использовать ; вместо этого используйте docker build
MSBuild
dotnet build
или dotnet publish
выполните сборку в командной строке.
Использование сборки Docker
Для сборки контейнерного решения из командной строки обычно можно использовать команду docker build <context>
для каждого проекта в решении. Укажите аргумент build context. build context для Dockerfile — это папка на локальном компьютере, которая служит рабочей папкой для создания образа. Например, из нее копируются файлы в контейнер. В проектах .NET Core по умолчанию используется папка, содержащая файл решения (.sln). При использовании относительного пути этот аргумент обычно имеет значение ".." для Dockerfile в папке проекта и файла решения в родительской папке. Для платформа .NET Framework проектов контекст сборки по умолчанию — это папка проекта, а не папка решения.
docker build -f Dockerfile ..
Контекст сборки можно задать в файле проекта, задав DockerfileContext
свойство. Например,
<PropertyGroup>
<DockerfileContext>contextfolder</DockerfileContext>
</PropertyGroup>
Относительные пути в Dockerfile относятся к контексту сборки, поэтому при изменении контекста обязательно обновите относительные пути соответствующим образом.
При добавлении поддержки Docker в проект Visual Studio 17.11 и более поздних версий можно указать папку для контекста сборки. Если вы хотите изменить контекст сборки, вы можете удалить Dockerfile (если он не имеет других изменений, которые вы хотите сохранить), и повторно запустить поддержку Docker, на этот раз указав новый контекст сборки. Новый Файл Dockerfile будет иметь относительные пути, обновленные для соответствия новому контексту сборки.
Использование MSBuild
Примечание.
В этом разделе описывается, как настроить контейнеры Docker при выборе типа сборки контейнера Dockerfile. Если вы используете тип сборки пакета SDK для .NET, параметры настройки отличаются, а сведения в этой статье не применимы. Вместо этого см. раздел "Контейнеризация приложения .NET с помощью dotnet publish".
Dockerfiles, созданные Visual Studio для проектов платформа .NET Framework (и для проектов .NET Core, созданных с использованием версий Visual Studio до Visual Studio 2017 с обновлением 4), не являются многоэтапными файлами Dockerfile. Действия, описанные в этих файлах Dockerfile, не компилируют код. Вместо этого, когда среда Visual Studio выполняет сборку с помощью Dockerfile для .NET Framework, она сначала компилирует проект с помощью MSBuild. Если компиляция завершилась успешно, Visual Studio выполняет сборку Dockerfile. При этом выходные данные сборки из MSBuild просто копируются в полученный образ Docker. Так как инструкции по компиляции кода не включаются в Dockerfile, выполнять сборку файлов Dockerfile для .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 результаты сборки в конфигурации отладки могут отличаться от ожидаемых. Сведения о настройке образов контейнеров для отладки.
Если вы используете проект Docker Compose, используйте эту команду для создания образов:
msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj
Сведения о просмотре журналов MSBuild см. в статье "Получение журналов сборки с помощью MSBuild".
Связанный контент
- Свойства MSBuild для проектов контейнеров.
- MSBuild