Creación de un proyecto de contenedor desde la línea de comandos
Si quiere compilar un proyecto de contenedor con un Dockerfile fuera de Visual Studio, puede usar docker build
, MSBuild
, dotnet build
o dotnet publish
para hacerlo 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 una compilación de Docker
Para compilar una solución en contenedores 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 cuando copia en el contenedor. En los proyectos de .NET Core, la opción predeterminada 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 archivo Dockerfile en una carpeta del proyecto y el archivo de solución en su carpeta 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 desee mantener) y volver a ejecutar la compatibilidad con Agregar Docker, esta vez especificando el nuevo contexto de compilación. El nuevo Dockerfile tendrá rutas de acceso relativas actualizadas correspondientes al nuevo contexto de compilación.
Usar MSBuild
Nota:
En esta sección se describe cómo personalizar los contenedores 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 archivos Dockerfile de varias fases. Los pasos de estos archivos Dockerfile no compilan el código. En su lugar, cuando Visual Studio compila un archivo Dockerfile de .NET Framework, primero compila el proyecto con MSBuild. Cuando esto se realiza correctamente, Visual Studio compila el archivo Dockerfile, que simplemente copia la salida de la compilación de MSBuild en la imagen de Docker resultante. Dado que los pasos para compilar el código no se incluyen en el archivo Dockerfile, no se puede compilar archivos Dockerfile de .NET Framework con docker build
desde la línea de comandos. Debe utilizar MSBuild para compilar estos proyectos.
Para compilar una imagen para un solo proyecto de contenedor de Docker, puede usar MSBuild con la opción de comando /t:ContainerBuild
. Esto indica a MSBuild que compile el ContainerBuild
de destino en lugar del Build
de destino predeterminado. Por ejemplo:
MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release
Ve una salida similar a la que ve en la ventana Output cuando compila la solución desde el IDE de Visual Studio. Use siempre /p:Configuration=Release
, ya que en los casos en los que Visual Studio usa la optimización de la compilación de varias fases, los resultados que se generan al compilar la configuración Debug podrían no ser los que se esperan. Consulte Personalización de imágenes de contenedor para la depuración.
Si usa un proyecto de Docker Compose, utilice el 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.