Condividi tramite


Compilare un progetto contenitore dalla riga di comando

Se si vuole compilare un progetto contenitore con un Dockerfile all'esterno di Visual Studio, è possibile usare docker build, MSBuild, dotnet buildo dotnet publish per la compilazione dalla riga di comando.

Se si usa il tipo di compilazione .NET SDK, non si dispone di un Dockerfile, quindi non è possibile usare docker build; Usare invece MSBuild, dotnet build o dotnet publish per eseguire la compilazione nella riga di comando.

Usare la compilazione Docker

Per compilare una soluzione in contenitori dalla riga di comando, è in genere possibile usare il comando docker build <context> per ogni progetto nella soluzione. Devi fornire l'argomento al contesto di compilazione. Il contesto di compilazione per un Dockerfile è la cartella nel computer locale usato come cartella di lavoro per generare l'immagine. Ad esempio, si tratta della cartella da cui si copiano i file quando si copia nel contenitore. Nei progetti .NET Core l'impostazione predefinita consiste nell'usare la cartella che contiene il file della soluzione (.sln). Indicato come percorso relativo, questo argomento è in genere ".." per un Dockerfile in una cartella del progetto e il file della soluzione nella cartella superiore. Per i progetti .NET Framework, il contesto di compilazione predefinito è la cartella del progetto, non la cartella della soluzione.

docker build -f Dockerfile ..

È possibile impostare il contesto di compilazione nel file di progetto impostando la proprietà DockerfileContext. Per esempio

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

I percorsi relativi nel Dockerfile sono relativi al contesto di compilazione, quindi se si modifica il contesto, assicurarsi di aggiornare di conseguenza i percorsi relativi.

Con Visual Studio 17.11 e versioni successive, quando si aggiunge il supporto Docker a un progetto, è possibile specificare una cartella per il contesto di compilazione. Se si vuole modificare il contesto di compilazione, è possibile eliminare il Dockerfile (se non sono presenti altre modifiche da mantenere) ed eseguire di nuovo Aggiungi supporto Docker, questa volta specificando il nuovo contesto di compilazione. Il nuovo Dockerfile avrà percorsi relativi aggiornati in modo che corrispondano al nuovo contesto di compilazione.

Usare MSBuild

Nota

Questa sezione descrive come personalizzare i contenitori Docker quando si sceglie il tipo di compilazione del contenitore Dockerfile. Se si usa il tipo di compilazione .NET SDK, le opzioni di personalizzazione sono diverse e le informazioni contenute in questo articolo non sono applicabili. In alternativa, vedi Containerizzare un'app .NET con dotnet publish.

I Dockerfile creati da Visual Studio per i progetti .NET Framework (e per i progetti .NET Core creati con versioni di Visual Studio precedenti a Visual Studio 2017 Update 4) non sono dockerfile a più passaggi. I passaggi in questi Dockerfile non compilano il codice. Al contrario, quando Visual Studio compila un Dockerfile di .NET Framework, compila prima il progetto usando MSBuild. Quando l'operazione riesce, Visual Studio compila quindi il Dockerfile, che copia semplicemente l'output di compilazione da MSBuild nell'immagine Docker risultante. Poiché i passaggi per compilare il codice non sono inclusi nel Dockerfile, non è possibile compilare dockerfile di .NET Framework usando docker build dalla riga di comando. È consigliabile usare MSBuild per compilare questi progetti.

Per compilare un'immagine per un singolo progetto contenitore Docker, è possibile usare MSBuild con l'opzione di comando /t:ContainerBuild. Questo comando indica a MSBuild di costruire il target ContainerBuild anziché il target predefinito Build. Per esempio:

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

Vedi un output simile a quello che visualizzi nella finestra Output quando si costruisce la propria soluzione dall'IDE di Visual Studio. Usare sempre /p:Configuration=Release, poiché nei casi in cui Visual Studio utilizza l'ottimizzazione della compilazione a più fasi, i risultati potrebbero non essere come previsto durante la compilazione della configurazione Debug. Consultare Personalizzare le immagini dei contenitori per il debugging.

Se si usa un progetto Docker Compose, usare questo comando per compilare immagini:

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

Per visualizzare i log di MSBuild, vedere Ottenere i log di compilazione con MSBuild.