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
, MSBuild
, dotnet build
o dotnet publish
para 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 MSBuild
, dotnet build
o dotnet publish
para compilar en la línea de comandos.
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). 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. 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.
docker build -f Dockerfile ..
Puede establecer el contexto de compilación en el archivo del proyecto estableciendo la propiedad DockerfileContext
. Por ejemplo
<PropertyGroup>
<DockerfileContext>contextfolder</DockerfileContext>
</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.
Uso de MSBuild
Nota
En esta sección se describe cómo personalizar los contenedores de Docker 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.