Compartir a través de


Compilación de un proyecto de contenedor desde la línea de comandos

Si desea compilar un proyecto de contenedor con un Dockerfile fuera de Visual Studio, puede usar docker build (o podman build) o dotnet publish /t:PublishContainer compilar desde la línea de comandos.

Si usa el tipo de compilación del SDK de .NET, no tiene un Dockerfile, por lo que no puede usar docker build ni podman build; en su lugar, use dotnet publish /t:PublishContainer para compilar en la línea de comandos.

Si desea compilar un proyecto de contenedor con un Dockerfile fuera de Visual Studio, puede usar docker build o dotnet publish /t:PublishContainer compilar desde la línea de comandos.

Si usa el tipo de compilación del SDK de .NET, no tiene un Dockerfile, por lo que no puede usar docker build; en su lugar, use dotnet publish /t:PublishContainer para compilar en la línea de comandos.

Prerrequisitos

Prerrequisitos

  • Docker Desktop.
  • Visual Studio con las cargas de trabajo desarrollo de ASP.NET y web, desarrollo de Azure y/o desarrollo de escritorio de .NET instaladas.

Uso de la compilación de Docker

Para compilar una solución en contenedor desde la línea de comandos, normalmente puede usar el comando docker build <context> para cada proyecto de la solución. Proporcione el argumento build context. El contexto de compilación para un archivo Dockerfile es la carpeta del equipo local que se usa como carpeta de trabajo para generar la imagen. Por ejemplo, es la carpeta desde la que se copian los archivos al copiar en el contenedor. En los proyectos de .NET Core, el valor predeterminado es usar la carpeta que contiene el archivo de solución (.sln o .slnx). Expresado como una ruta de acceso relativa, este argumento suele ser ".." para un Dockerfile en un directorio del proyecto y el archivo de solución en su directorio principal.

docker build -f Dockerfile ..

En el caso de los proyectos de .NET Framework, el contexto de compilación predeterminado es la carpeta del proyecto, no la carpeta de la solución.

Puede establecer el contexto de compilación en el archivo del proyecto estableciendo la propiedad DockerfileContext. Por ejemplo

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

Uso de la compilación de Docker o la compilación de Podman

Para compilar una solución en contenedor desde la línea de comandos, normalmente puede usar el comando docker build <context> (o podman build <context>) para cada proyecto de la solución. Proporcione el argumento build context. El contexto de compilación para un archivo Dockerfile es la carpeta del equipo local que se usa como carpeta de trabajo para generar la imagen. Por ejemplo, es la carpeta desde la que se copian los archivos al copiar en el contenedor. En los proyectos de .NET Core, el valor predeterminado es usar la carpeta que contiene el archivo de solución (.sln o .slnx). Expresado como una ruta de acceso relativa, este argumento suele ser ".." para un Dockerfile en un directorio del proyecto y el archivo de solución en su directorio principal.

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

Puede establecer el contexto de compilación en el archivo del proyecto estableciendo la propiedad ContainerBuildContext. Por ejemplo

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

Las rutas de acceso relativas del Dockerfile son relativas al contexto de compilación, por lo que si cambia el contexto, asegúrese de actualizar las rutas de acceso relativas según corresponda.

Con Visual Studio 17.11 y versiones posteriores, al agregar compatibilidad con Docker a un proyecto, puede especificar una carpeta para el contexto de compilación. Si desea cambiar el contexto de compilación, puede eliminar el Dockerfile (si no tiene otros cambios que desea conservar) y volver a ejecutar Agregar compatibilidad con Docker, esta vez especificando el nuevo contexto de compilación. El nuevo Dockerfile tendrá rutas de acceso relativas actualizadas para corresponder al nuevo contexto de compilación.

Al agregar compatibilidad con contenedores a un proyecto, puede especificar una carpeta para el contexto de compilación. Si desea cambiar el contexto de compilación, puede eliminar el Dockerfile (si no tiene otros cambios que desea conservar) y volver a ejecutar Agregar compatibilidad con contenedores, esta vez especificando el nuevo contexto de compilación. El nuevo Dockerfile tendrá rutas de acceso relativas actualizadas para corresponder al nuevo contexto de compilación.

Uso de MSBuild

Nota

En esta sección se describe cómo puede personalizar los contenedores al elegir el tipo de compilación de contenedor dockerfile. Si usa el tipo de compilación del SDK de .NET, las opciones de personalización son diferentes y la información de este artículo no es aplicable. En su lugar, consulte Inclusión de una aplicación .NET en un contenedor mediante dotnet publish.

Los archivos Dockerfile creados por Visual Studio para proyectos de .NET Framework (y para proyectos de .NET Core creados con versiones de Visual Studio anteriores a Visual Studio 2017 Update 4) no son dockerfiles de varias fases. Los pasos descritos en estos Dockerfiles no compilan el código. En su lugar, cuando Visual Studio compila un Dockerfile de .NET Framework, primero compila el proyecto mediante MSBuild. Cuando esto se realiza correctamente, Visual Studio compila el Dockerfile, que simplemente copia la salida de compilación de MSBuild en la imagen de Docker resultante. Dado que los pasos para compilar el código no se incluyen en el Dockerfile, no puede compilar dockerfiles de .NET Framework mediante docker build desde la línea de comandos. Debe usar MSBuild para compilar estos proyectos.

Para compilar una imagen para un único proyecto de contenedor de Docker, puede usar MSBuild con la opción de comando /t:ContainerBuild. Este comando indica a MSBuild que compile el destino ContainerBuild en lugar del destino predeterminado Build. Por ejemplo:

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

Verá una salida similar a la que ve en la ventana Salida al compilar la solución desde el IDE de Visual Studio. Siempre use /p:Configuration=Release, ya que en los casos en que Visual Studio utiliza la optimización de compilación de varias fases, es posible que los resultados al compilar la configuración de depuración no sean los esperados. Consulte Personalización de imágenes de contenedor para depurar.

Si usa un proyecto de Docker Compose, use este comando para compilar imágenes:

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

Para ver los registros de MSBuild, consulte Obtención de registros de compilación con MSBuild.

Compilación desde la línea de comandos

Visual Studio usa el modo rápido (si está habilitado) para generar una imagen de contenedor configurada para que funcione mejor para el desarrollo y la depuración, por lo que no se recomienda copiar los comandos de compilación de Docker desde la ventana Salida después de una compilación en modo rápido. Para compilar una imagen estándar sin optimizaciones no estándar, puede hacer clic con el botón derecho en el Dockerfile y elegir la opción Compilar imagen de Docker.

Visual Studio usa el modo rápido (si está habilitado) para generar una imagen de contenedor configurada para que funcione mejor para el desarrollo y la depuración, por lo que no se recomienda copiar los docker build comandos o podman build desde la ventana Salida después de una compilación en modo rápido. Para construir una imagen estándar sin optimizaciones no estándar, puede hacer clic con el botón derecho en el Dockerfile y elegir la opción Construir imagen.

Visual Studio usa la dev etiqueta para designar imágenes que ha preparado especialmente para optimizar el tiempo de inicio durante la depuración. Sin embargo, estas imágenes no se deben usar fuera del contexto de Visual Studio. Esta etiqueta es una indicación de que las imágenes tienen modificaciones y personalizaciones no estándar, por ejemplo, para soportar la depuración en Modo Rápido. Consulte Personalización de contenedores de Docker en Visual Studio.