sábado, 31 de enero de 2015

Tienda online en ASP.NET 5 sobre Docker

Intro

Entusiasmado con la posibilidad que brinda ASP.NET 5 de correr mis sitios web sobre distintas plataformas, me puse a averiguar y escribir un resumen de como levantar un sitio y correrlo sobre Docker dentro de una VM Ubuntu de Microsoft Azure... la sorpresa fue que no te lleva mas de 10 minutos, y funciona de maravillas.


Requisitos

  • Suscripción de Microsoft Azure.
  • Una VM Ubuntu Trusty 14.04 como mínimo, con el puerto 80 habilitado.
  • Estar registrado en Docker.com si queremos salvar allí la nueva imagen creada.

Contenido

  1. Preparar el contenido de la nueva imagen.
  2. Construir la imagen Docker con nuestra aplicación.
  3. Levantar un nuevo container con nuestra imagen.
  4. Salvar nuestra imagen en Docker Hub.

Docker 1. Preparar los componentes de la nueva imagen

La imagen Docker que vamos a crear para correr nuestra aplicación MVC MusicStore estará basada en la microsoft/aspnet publicado por Microsoft meses atrás que, si bien aún está en preview, sirve perfectamente para nuestro propósito.

Actualizamos nuestro Ubuntu; instalamos Docker según se explica en docs.docker.com/installation/ubuntulinux; y también nos aseguramos de contar con Git:
sudo apt-get update
sudo apt-get install docker.io
sudo apt-get install git-core

Por último clonamos en la carpeta local storeapp el proyecto MVC MusicStore de GitHub, con el comando:
git clone http://github.com/aspnet/MusicStore storeapp

Git clone
Git clone

2. Construir la imagen Docker de nuestra aplicación

Nos movemos a la carpeta storeapp/src/MusicStore y ahí creamos el archivo Dockerfile que usaremos para configurar nuestra imagen. Podes crear el archivo con nano o el editor que prefieras:
cd storeapp/src/MusicStore
nano Dockerfile

Copia el siguiente contenido dentro del archivo Dockerfile (las lineas que comienzan con # son comentarios):
# Base image
FROM microsoft/aspnet

# Copy project folder into image and restore Nuget packages
COPY . /app
WORKDIR /app
RUN ["kpm", "restore"]

# Run de web site
EXPOSE 5004
ENTRYPOINT ["k", "kestrel"]

..y creamos la imagen usando el comando:
sudo docker build -t storeapp .

Esto demora un poco, paciencia.

3. Levantar un nuevo container con nuestra imagen

Podemos ver las imágenes en nuestro sistema mediante el comando Docker images, luego levantamos nuestra imagen en un nuevo container con run, y por ultimo listamos los containers con el comando ps:
sudo docker images
sudo docker run -t -d -p 80:5004 --restart=on-failure:10 storeapp
sudo docker ps -a

Creando el Docker container con nuestra imagen

Y ya tenemos nuestra imagen corriendo en un container de Docker en nuestra VM, publicado en el puerto 80 de Ubuntu (no olvides configurar el endpoint en Azure).

4. Salvar nuestra imagen en Docker Hub

Ahora si queremos salvar la imagen en Docker Hub para utilizarla desde cualquier otra VM, o publicarla para la comunidad, podemos agregarle un tag y hacerle un push (previamente tenemos que registrarnos en Docker.com).

Tanto el image id (934e56caf9b8), como el nombre de la cuenta registrada (seketman), deben cambiarse por los valores que corresponden:
sudo docker tag 934e56caf9b8 seketman/storeapp:demo
sudo docker push seketman/storeapp:demo

Nuestro sitio funcionando

Pueden ver este sitio corriendo en soundstore.cloudapp.net

Mucha de la info mostrada se basa en el post Running ASP.NET 5 applications in Linux Containers with Docker de Ahmet Alp Balkan.

2 comentarios: