GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

ZEIT jetzt Bereitstellungen von Open-Source-ASP.NET-Core-Web-Apps mit Docker

ZEIT ist ein neuer Cloud-Dienst und "jetzt" ist der Name ihres Bereitstellungstools. ZEIT World ist ihr DNS-Dienst. Wenn Sie zu https://zeit.co/ gehen, sehen Sie ein etwas kryptisches animiertes GIF, das zeigt, wie unglaublich einfach es ist, eine Web-App mit ZEIT now bereitzustellen.

Sie können einen Ordner erstellen, eine index.html (zum Beispiel) darin ablegen und einfach "now" ausführen ." Sie erhalten automatisch eine Website mit einem automatisch generierten Namen und sie ist live. Es ist wahrscheinlich die schnellste und einfachste Bereitstellung, die ich je gesehen habe. Erinnern Sie sich, als Heroku (damals Azure, dann buchstäblich jeder) anfing, Git für die Bereitstellung zu verwenden? Natürlich war es der nächste Schritt, "jetzt" eingeben zu können und einfach eine Website im öffentlichen Internet zu erhalten. (Als Nächstes wird jemand "up" erfinden, das dann durch einfaches Drücken der EINGABETASTE in einer leeren Zeile ersetzt wird!;) )

Spaß beiseite, jetzt ist sauber und einfach. Ich schätze ihren organisatorischen Willen, ein elegantes und einfaches Befehlszeilentool zu entwickeln. Ich vermute, es ist schwieriger, als es aussieht, die Dinge einfach zu halten.

Alle ihre Beispiele verwenden JavaScript und node.js, aber sie unterstützen auch Docker, was bedeutet, dass sie Open Source ASP.NET Core auf .NET Core unterstützen! Aber wissen sie, dass sie es tun?;) Finden wir es heraus.

Und vor allem, wie einfach ist es? Kann ich eine Website innerhalb von Minuten vom Konzept zur Produktion bringen? Verdammt, ich kann es.

Erstellen Sie zunächst eine schnelle ASP.NET Core-App. Ich verwende die MVC-Vorlage mit Bootstrap.

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

Ich führe eine schnelle dotnet-Wiederherstellung durch, um die Pakete für mein Projekt abzurufen.

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\

Jetzt muss ich ein Dockerfile hinzufügen. Ich werde eine in der Wurzel erstellen, die so aussieht:

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

Beachten Sie, dass ich könnte Lassen Sie ZEIT meine App für mich erstellen, wenn ich das aspnetcore Dockerfile verwende, das das .NET Core SDK enthält, aber das würde nicht nur meine Bereitstellung verlängern, sondern auch meine Docker-Images VIEL größer machen. Ich möchte NUR die .NET Core-Laufzeit in mein Image einschließen, also werde ich lokal erstellen und veröffentlichen.

ZEIT muss jetzt mein Dockerfile sehen, und da ich möchte, dass meine App die Binärdateien enthält (ich möchte meine Quelle im Docker-Image nicht an ZEIT senden), muss ich mein Dockerfile als "Content" markieren und Stellen Sie sicher, dass es in den Veröffentlichungsordner kopiert wird, wenn meine App erstellt und veröffentlicht wird.

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

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

Ich werde die csproj-Datei meines Projekts hinzufügen. Wenn ich Visual Studio verwendet habe, ist dies dasselbe Klicken Sie mit der rechten Maustaste auf die Eigenschaften der Docker-Datei, setzen Sie sie auf Inhalt und dann auf "Immer in das Ausgabeverzeichnis kopieren".

Jetzt baue und veröffentliche ich es einfach mit einem Befehl in einem Ordner:

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

Und schließlich führe ich aus dem Ordner .\bin\Debug\netcoreapp1.1\ "now" aus. (Beachten Sie, dass ich es jetzt installiert und natürlich für ihren Dienst angemeldet habe.)

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!

Now hat die generierte URL in meine Zwischenablage gelegt (während der Bereitstellung werden Sie auf eine schöne Statusseite weitergeleitet) und wenn sie bereitgestellt ist, kann ich meine Live-Site besuchen. Aber diese URL ist nicht das, was ich will. Ich möchte eine benutzerdefinierte URL verwenden.

Ich kann eine meiner Domains nehmen und sie mit dem DNS von ZEIT World einrichten, aber ich mag DNSimple (ref).

Ich kann meine Domain als externe Domain hinzufügen, nachdem ich meinem DNS einen TXT-Eintrag hinzugefügt habe, um zu bestätigen, dass ich der Eigentümer bin. Dann richte ich einen CNAME ein, um meine Subdomain auf alias.zeit.co.

zu verweisen
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]

Und das ist es. Es hat sogar ein nettes SSL-Zertifikat, das sie für mich beantragt haben. Es endet nicht bis zum Kestral-Webserver des Docker-Containers auf SSL, aber für die meisten Dinge, die nicht Banking sind, ist es in Ordnung.

Alles in allem ein schönes Erlebnis. Hier ist meine Hello World ASP.NE Core-App, die in ZEIT läuft und jetzt unter http://zeitdotnet.hanselman.com bereitgestellt wird (wenn Sie diese lange nach der Veröffentlichung besuchen, ist dieses Beispiel MÖGLICHERWEISE verschwunden.)

Ich lerne immer noch dazu (diese ganze Übung dauerte insgesamt ungefähr 30 Minuten und stellte Glenn Condron eine Docker-Frage), daher ist mir nicht klar, wie dies in einer großen Bereitstellung mit mehreren Containern funktionieren würde, aber solange Ihre Site unveränderlich ist ( Schreiben Sie nicht auf die lokale Festplatte des Containers!) ZEIT sagt, dass es Ihre einzelnen Container skaliert. Vielleicht kommt Docker-Compose-Unterstützung?

Sponsor: Wussten Sie, dass sich VSTS eng in Octopus Deploy integrieren lässt? Begleiten Sie Damian Brady und Brian A. Randell, wenn sie Ihnen zeigen, wie Sie Bereitstellungen von VSTS zu Octopus Deploy automatisieren, und demonstrieren Sie das neue VSTS Octopus Deploy-Dashboard-Widget. Jetzt anmelden!


Docker
  1. 26 kreative Open-Source-Apps zum Ausprobieren im Jahr 2022

  2. So stellen Sie Apps mit Rancher bereit

  3. 3 Strategien für automatisierte Produktionsbereitstellungen mit Docker

  4. Optimieren der Größen von ASP.NET Core Docker-Images

  5. Plattformübergreifende GUIs mit Open Source .NET unter Verwendung von Eto.Forms

.NET Core und Docker

Erstellen, Ausführen und Testen von .NET Core und ASP.NET Core 2.1 in Docker auf einem Raspberry Pi (ARM32)

Testen neuer .NET Core Alpine Docker-Images

.NET und Docker

Erkunden von ASP.NET Core mit Docker in Linux- und Windows-Containern

Veröffentlichen einer ASP.NET 5-App in Docker unter Linux mit Visual Studio