GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

ZEIT déploie désormais des applications Web open source ASP.NET Core avec Docker

ZEIT est un nouveau service cloud et "maintenant" est le nom de leur outil de déploiement. ZEIT World est leur service DNS. Si vous vous dirigez vers https://zeit.co/, vous verrez un gif animé quelque peu énigmatique qui montre à quel point il est presque impossible de déployer une application Web avec ZEIT maintenant.

Vous pouvez créer un dossier, y mettre un index.html (par exemple) et simplement exécuter "maintenant . " Vous obtiendrez automatiquement un site Web avec un nom généré automatiquement et il sera en ligne. C'est probablement le déploiement le plus rapide et le plus simple que j'aie jamais vu. Vous vous souvenez quand Heroku (alors Azure, puis littéralement tout le monde) a commencé à utiliser git pour le déploiement ? De toute évidence, être capable de taper "maintenant" et d'obtenir un site Web sur l'Internet public était la prochaine étape. (Quelqu'un fera ensuite "inventer" qui sera ensuite remplacé en appuyant simplement sur ENTRÉE sur une ligne vide ! ;) )

Blague à part, maintenant est propre et facile. J'apprécie leur volonté organisationnelle de créer un outil de ligne de commande élégant et simple. Je soupçonne qu'il est plus difficile qu'il n'y paraît de garder les choses simples.

Tous leurs exemples utilisent JavaScript et node.js, mais ils prennent également en charge Docker, ce qui signifie qu'ils prennent en charge ASP.NET Core open source sur .NET Core ! Mais savent-ils qu'ils le font ?;) Découvrons.

Et plus important encore, est-ce facile ? Puis-je faire passer un site du concept à la production en quelques minutes ? Bon sang, je peux.

Tout d'abord, créez une application ASP.NET Core rapide. J'utiliserai le modèle MVC avec Bootstrap.

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

Je vais faire une restauration rapide de dotnet pour obtenir les packages pour mon projet.

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\

Maintenant, je dois ajouter un Dockerfile. Je vais en créer un à la racine qui ressemble à ceci :

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

Notez que je pourrais avoir ZEIT construire mon application pour moi si j'utilisais le Dockerfile aspnetcore qui inclut le SDK .NET Core, mais cela rendrait non seulement mon déploiement plus long, mais cela rendrait également mes images docker BEAUCOUP plus grandes. Je veux inclure JUSTE le runtime .NET Core dans mon image, donc je vais construire et publier localement.

ZEIT va maintenant avoir besoin de voir mon Dockerfile, et puisque je veux que mon application inclue les binaires (je ne veux pas expédier ma source dans l'image Docker jusqu'à ZEIT), je dois marquer mon Dockerfile comme "Contenu" et assurez-vous qu'il est copié dans le dossier de publication lorsque mon application est créée et publiée.

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

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

Je vais ajouter ce fichier csproj de mon projet. Si j'utilisais Visual Studio, c'est le même en faisant un clic droit sur les propriétés du Dockerfile, en le définissant sur Contenu, puis sur "Toujours copier dans le répertoire de sortie".

Je vais maintenant créer et publier dans un dossier avec une seule commande :

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

Et enfin, à partir du dossier .\bin\Debug\netcoreapp1.1\, je lance "maintenant". (Notez que j'ai installé maintenant et que je me suis inscrit à leur service, bien sûr.)

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!

Maintenant, j'ai mis l'URL générée dans mon presse-papiers (pendant le déploiement, vous serez redirigé vers une belle page d'état) et une fois déployé, je peux visiter mon site en direct. Mais, cette URL n'est pas ce que je veux. Je souhaite utiliser une URL personnalisée.

Je peux prendre un de mes domaines et le configurer avec le DNS de ZEIT World mais j'aime DNSimple (réf).

Je peux ajouter mon domaine en tant que domaine externe après avoir ajouté un enregistrement TXT à mon DNS pour vérifier qu'il m'appartient. Ensuite, j'ai configuré un CNAME pour faire pointer mon sous-domaine vers 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]

Et c'est tout. Il a même un joli certificat SSL qu'ils ont appliqué pour moi. Il ne se termine pas en SSL jusqu'au serveur Web Kestral du conteneur docker, mais pour la plupart des choses qui ne sont pas bancaires, tout ira bien.

Dans l'ensemble, une belle expérience. Voici mon application Hello World ASP.NE Core exécutée dans ZEIT et déployée avec maintenant sur http://zeitdotnet.hanselman.com (si vous visitez ce site longtemps après sa publication, cet exemple PEUT avoir disparu.)

J'apprends encore à ce sujet (tout cet exercice a duré environ 30 minutes au total et a posé une question à Glenn Condron) donc je ne sais pas comment cela fonctionnerait dans un grand déploiement multi-conteneurs, mais tant que votre site est immuable ( n'écrivez pas sur le disque local du conteneur !) ZEIT indique qu'il mettra à l'échelle vos conteneurs individuels. Peut-être que la prise en charge de docker-compose arrive ?

Parrain : Saviez-vous que VSTS peut s'intégrer étroitement à Octopus Deploy ? Rejoignez Damian Brady et Brian A. Randell alors qu'ils vous montrent comment automatiser les déploiements de VSTS à Octopus Deploy, et faites une démonstration du nouveau widget de tableau de bord VSTS Octopus Deploy. Inscrivez-vous maintenant !


Docker
  1. 26 applications créatives open source à essayer en 2022

  2. Comment déployer des applications avec Rancher

  3. 3 stratégies pour les déploiements de production automatisés avec Docker

  4. Optimisation des tailles d'image Docker ASP.NET Core

  5. Comment écrire un démon Linux avec .Net Core

.NET Core et Docker

Création, exécution et test de .NET Core et ASP.NET Core 2.1 dans Docker sur un Raspberry Pi (ARM32)

Essayer de nouvelles images Docker Alpine .NET Core

.NET et Docker

Explorer ASP.NET Core avec Docker dans les conteneurs Linux et Windows

Publication d'une application ASP.NET 5 sur Docker sous Linux avec Visual Studio