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


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

Если вы хотите создать проект контейнера с dockerfile за пределами Visual Studio, можно использовать docker build, MSBuilddotnet buildили dotnet publish создать из командной строки.

Если вы используете тип сборки пакета SDK для .NET, у вас нет файла Dockerfile, поэтому вместо этого вы не можете использовать ; вместо этого используйте docker buildMSBuilddotnet 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".