GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

ZEIT ora distribuisce le app Web ASP.NET Core open source con Docker

ZEIT è un nuovo servizio cloud e "ora" è il nome del loro strumento di distribuzione. ZEIT World è il loro servizio DNS. Se vai su https://zeit.co/ vedrai una gif animata alquanto criptica che mostra quanto sia quasi incredibilmente semplice distribuire un'app Web con ZEIT ora.

Puoi creare una cartella, inserire un index.html (per esempio) al suo interno ed eseguire semplicemente "ora ." Riceverai automaticamente un sito Web con un nome generato automaticamente e sarà attivo. Probabilmente è la distribuzione più veloce e semplice che abbia mai visto. Ricordi quando Heroku (poi Azure, quindi letteralmente tutti) ha iniziato a usare git per la distribuzione? Chiaramente essere in grado di digitare "adesso" e ottenere semplicemente un sito Web su Internet pubblico è stato il passo successivo. (Poi qualcuno inventerà "inventato" che verrà quindi sostituito semplicemente premendo INVIO su una riga vuota!;) )

Scherzi a parte, ora è pulito e facile. Apprezzo la loro forza di volontà organizzativa per creare uno strumento da riga di comando elegante e semplice. Sospetto che sia più difficile di quanto sembri mantenere le cose semplici.

Tutti i loro esempi usano JavaScript e node.js, ma supportano anche Docker, il che significa che supportano ASP.NET Core open source su .NET Core! Ma sanno che lo fanno?;) Scopriamolo.

E, soprattutto, quanto è facile? Posso portare un sito dall'ideazione alla produzione in pochi minuti? Dannazione, posso.

Innanzitutto, crea un'app ASP.NET Core rapida. Userò il modello MVC con Bootstrap.

C:\Users\scott\zeitdotnet>dotnet new mvc
Content generation time: 419.5337 ms
The template "ASP.NET Core Web App" created successfully.

Eseguirò un rapido ripristino dotnet per ottenere i pacchetti per il mio progetto.

C:\Users\scott\zeitdotnet>dotnet restore
Restoring packages for C:\Users\scott\zeitdotnet\zeitdotnet.csproj...
Generating MSBuild file C:\Users\scott\zeitdotnet\obj\zeitdotnet.csproj.nuget.g.props.
Generating MSBuild file C:\Users\scott\zeitdotnet\obj\zeitdotnet.csproj.nuget.g.targets.
Writing lock file to disk. Path: C:\Users\scott\zeitdotnet\obj\project.assets.json
Restore completed in 2.93 sec for C:\Users\scott\zeitdotnet\zeitdotnet.csproj.

NuGet Config files used:
C:\Users\scott\AppData\Roaming\NuGet\NuGet.Config
C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config

Feeds used:
https://api.nuget.org/v3/index.json
C:\LocalNuGet
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\

Ora devo aggiungere un Dockerfile. Ne creerò uno nella radice che assomiglia a questo:

FROM microsoft/aspnetcore
LABEL name="zeitdotnet"
ENTRYPOINT ["dotnet", "zeitdotnet.dll"]
ARG source=.
WORKDIR /app
EXPOSE 80
COPY $source .

Tieni presente che potrei fare in modo che ZEIT crei la mia app per me se usassi il Dockerfile aspnetcore che include .NET Core SDK, ma ciò non solo allungherebbe la mia distribuzione, ma aumenterebbe anche MOLTO le immagini della mia finestra mobile. Voglio includere SOLO il runtime .NET Core nella mia immagine, quindi creerò e pubblicherò localmente.

ZEIT ora avrà bisogno di vedere il mio Dockerfile e, poiché voglio che la mia app includa i binari (non voglio spedire il mio sorgente nell'immagine Docker fino a ZEIT) devo contrassegnare il mio Dockerfile come "Contenuto" e assicurati che sia copiato nella cartella di pubblicazione quando la mia app viene creata e pubblicata.

<ItemGroup>
  <None Remove="Dockerfile" />
</ItemGroup>

<ItemGroup>
  <Content Include="Dockerfile">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>

Aggiungerò questo file csproj del mio progetto. Se stavo usando Visual Studio, questo è lo lo stesso come fare clic con il pulsante destro del mouse su Proprietà del Dockerfile, impostandolo su Contenuto e quindi su "Copia sempre nella directory di output".

Ora costruirò e pubblicherò in una cartella con un comando:

C:\Users\scott\zeitdotnet>dotnet publish
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.

zeitdotnet -> C:\Users\scott\zeitdotnet\bin\Debug\netcoreapp1.1\zeitdotnet.dll

E infine, dalla cartella .\bin\Debug\netcoreapp1.1\ eseguo "now". (Nota che ora ho installato e mi sono registrato al loro servizio, ovviamente.)

C:\Users\scott\zeitdotnet\bin\Debug\netcoreapp1.1\publish>now
> Deploying ~\zeitdotnet\bin\Debug\netcoreapp1.1\publish
> Ready! https://zeitdotnet-gmhcxevqkf.now.sh (copied to clipboard) [3s]
> Upload [====================] 100% 0.0s
> Sync complete (196.18kB) [2s]
> Initializing…
> Building
> ▲ docker build
> ---> 035a0a1401c3
> Removing intermediate container 289b9e4ce5d9
> Step 6 : EXPOSE 80
> ---> Running in efb817308333
> ---> fbac2aaa3039
> Removing intermediate container efb817308333
> Step 7 : COPY $source .
> ---> ff009cfc48ea
> Removing intermediate container 8d650c1867cd
> Successfully built ff009cfc48ea
> ▲ Storing image
> ▲ Deploying image
> Deployment complete!

Ora ho inserito l'URL generato nei miei appunti (durante la distribuzione verrai reindirizzato a una bella pagina di stato) e quando verrà distribuito posso visitare il mio sito live. Ma quell'URL non è quello che voglio. Voglio utilizzare un URL personalizzato.

Posso prendere uno dei miei domini e configurarlo con il DNS di ZEIT World, ma mi piace DNSimple (ref).

Posso aggiungere il mio dominio come esterno dopo aver aggiunto un record TXT al mio DNS per verificarne il possesso. Quindi ho impostato un CNAME per puntare il mio sottodominio su alias.zeit.co.

C:\Users\scott\Desktop\zeitdotnet>now alias https://zeitdotnet-gmhcxevqkf.now.sh http://zeitdotnet.hanselman.com
> zeitdotnet.hanselman.com is a custom domain.
> Verifying the DNS settings for zeitdotnet.hanselman.com (see https://zeit.world for help)
> Verification OK!
> Provisioning certificate for zeitdotnet.hanselman.com
> Success! Alias created:
https://zeitdotnet.hanselman.com now points to https://zeitdotnet-gmhcxevqkf.now.sh [copied to clipboard]

E questo è tutto. Ha anche un bel certificato SSL che mi hanno richiesto. Non termina in SSL fino al server Web Kestral del contenitore mobile, ma per la maggior parte delle cose che non sono bancarie andrà bene.

Tutto sommato, un'esperienza incantevole. Ecco la mia app Hello World ASP.NE Core in esecuzione in ZEIT e distribuita ora su http://zeitdotnet.hanselman.com (se lo visiti molto tempo dopo che questo è stato pubblicato, questo esempio POTREBBE essere sparito.)

Sto ancora imparando questo (l'intero esercizio è durato circa 30 minuti in totale e ho fatto una domanda sulla finestra mobile a Glenn Condron), quindi non sono chiaro come funzionerebbe in una grande distribuzione multi-container, ma purché il tuo sito sia immutabile ( non scrivere sul disco locale del contenitore!) ZEIT afferma che ridimensionerà i singoli contenitori. Forse sta arrivando il supporto per la composizione mobile?

Sponsor: Sapevi che VSTS può integrarsi strettamente con Octopus Deploy? Unisciti a Damian Brady e Brian A. Randell mentre ti mostrano come automatizzare le distribuzioni da VSTS a Octopus Deploy e dimostra il nuovo widget dashboard di VSTS Octopus Deploy. Registrati ora!


Docker
  1. 26 app creative open source da provare nel 2022

  2. Come distribuire app con Rancher

  3. 3 strategie per implementazioni di produzione automatizzate con Docker

  4. Ottimizzazione delle dimensioni dell'immagine Docker ASP.NET Core

  5. Come scrivere un demone Linux con .Net Core

.NET Core e Docker

Creazione, esecuzione e test di .NET Core e ASP.NET Core 2.1 in Docker su un Raspberry Pi (ARM32)

Provare nuove immagini Docker Alpine .NET Core

.NET e Docker

Esplorazione di ASP.NET Core con Docker in entrambi i contenitori Linux e Windows

Pubblicazione di un'app ASP.NET 5 su Docker in Linux con Visual Studio