GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

ZEIT ahora implementa aplicaciones web ASP.NET Core de código abierto con Docker

ZEIT es un nuevo servicio en la nube y "ahora" es el nombre de su herramienta de implementación. ZEIT World es su servicio de DNS. Si se dirige a https://zeit.co/, verá un gif animado algo críptico que muestra lo increíblemente simple que es implementar una aplicación web con ZEIT ahora.

Puede crear una carpeta, poner un index.html (por ejemplo) en ella y simplemente ejecutar "ahora ." Obtendrá automáticamente un sitio web con un nombre autogenerado y estará activo. Es probablemente la implementación más rápida y fácil que he visto. ¿Recuerda cuando Heroku (luego Azure, luego literalmente todos) comenzó a usar git para la implementación? Claramente, poder escribir "ahora" y simplemente obtener un sitio web en Internet público fue el siguiente paso. (Luego, alguien inventará "up", que luego se reemplazará con solo presionar ENTER en una línea vacía!;))

Bromas aparte, ahora es limpio y fácil. Aprecio su fuerza de voluntad organizativa para crear una herramienta de línea de comandos elegante y simple. Sospecho que mantener las cosas simples es más difícil de lo que parece.

Todos sus ejemplos usan JavaScript y node.js, pero también son compatibles con Docker, lo que significa que son compatibles con ASP.NET Core de código abierto en .NET Core. ¿Pero saben que lo hacen?;) Vamos a averiguarlo.

Y lo que es más importante, ¿qué tan fácil es? ¿Puedo llevar un sitio del concepto a la producción en minutos? Maldita sea, puedo.

Primero, cree una aplicación ASP.NET Core rápida. Usaré la plantilla 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.

Haré una restauración dotnet rápida para obtener los paquetes para mi proyecto.

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\

Ahora necesito agregar un Dockerfile. Haré uno en la raíz que se vea así:

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

Tenga en cuenta que podría Haga que ZEIT cree mi aplicación para mí si utilizo el archivo aspnetcore Dockerfile que incluye el SDK de .NET Core, pero eso no solo prolongaría mi implementación, sino que también haría que mis imágenes acoplables fueran MUCHO más grandes. Quiero incluir SOLO el tiempo de ejecución de .NET Core en mi imagen, así que compilaré y publicaré localmente.

ZEIT ahora necesitará ver mi Dockerfile, y dado que quiero que mi aplicación incluya los archivos binarios (no quiero enviar mi fuente en la imagen de Docker a ZEIT), necesito marcar mi Dockerfile como "Contenido" y asegúrese de que se copie en la carpeta de publicación cuando se cree y publique mi aplicación.

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

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

Agregaré este archivo csproj de mi proyecto. Si estuviera usando Visual Studio, esto es lo mismo como hacer clic derecho en las Propiedades del Dockerfile, configurarlo en Contenido y luego "Copiar siempre en el directorio de salida".

Ahora compilaré y publicaré en una carpeta 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

Y finalmente, desde la carpeta .\bin\Debug\netcoreapp1.1\ ejecuto "ahora". (Tenga en cuenta que lo instalé ahora y me registré en su servicio, por supuesto).

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!

Ahora ha puesto la URL generada en mi portapapeles (durante la implementación, será redirigido a una hermosa página de estado) y cuando esté implementada, puedo visitar mi sitio en vivo. Pero, esa URL no es lo que quiero. Quiero usar una URL personalizada.

Puedo tomar uno de mis dominios y configurarlo con el DNS de ZEIT World pero me gusta DNSimple (ref).

Puedo agregar mi dominio como externo después de agregar un registro TXT a mi DNS para verificar que soy el propietario. Luego configuro un CNAME para apuntar mi subdominio a 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]

Y eso es. Incluso tiene un buen certificado SSL que me aplicaron. No termina en SSL hasta el servidor web Kestral del contenedor docker, pero para la mayoría de las cosas que no son bancarias estará bien.

en general, una experiencia encantadora. Aquí está mi aplicación Hello World ASP.NE Core ejecutándose en ZEIT e implementada ahora en http://zeitdotnet.hanselman.com (si está visitando esto mucho después de que se publicó, esta muestra PUEDE desaparecer).

Todavía estoy aprendiendo sobre esto (todo este ejercicio duró aproximadamente 30 minutos en total y le hice una pregunta a Glenn Condron), por lo que no tengo claro cómo funcionaría esto en una gran implementación de varios contenedores, pero siempre que su sitio sea inmutable ( ¡no escriba en el disco local del contenedor!) ZEIT dice que escalará sus contenedores individuales. ¿Quizás se acerca la compatibilidad con docker-compose?

Patrocinador: ¿Sabía que VSTS puede integrarse estrechamente con Octopus Deploy? Únase a Damian Brady y Brian A. Randell mientras le muestran cómo automatizar las implementaciones de VSTS a Octopus Deploy, y haga una demostración del nuevo widget de tablero VSTS Octopus Deploy. ¡Regístrese ahora!


Docker
  1. 26 aplicaciones creativas de código abierto para probar en 2022

  2. Cómo implementar aplicaciones con Rancher

  3. 3 estrategias para implementaciones de producción automatizadas con Docker

  4. Optimización de los tamaños de imagen de ASP.NET Core Docker

  5. Cómo escribir un demonio de Linux con .Net Core

.NET Core y Docker

Creación, ejecución y prueba de .NET Core y ASP.NET Core 2.1 en Docker en una Raspberry Pi (ARM32)

Probar nuevas imágenes de .NET Core Alpine Docker

.NET y Docker

Exploración de ASP.NET Core con Docker en contenedores de Linux y Windows

Publicación de una aplicación ASP.NET 5 en Docker en Linux con Visual Studio