Docker Nights 1: DevOps, conceptos y aplicaciones

Votación app y docker-compose

Requisitos

Aplicación escrita en PHP y Redis para votar por el Bolívar y The Strongest.

$ cd votacion
$ docker-compose up -d

La aplicación se compilará y las imágenes se descargarán del Docker Hub. Visita la aplicación en http://localhost/.

Una vez que la aplicación este lista para ponerse en producción, la guardamos en Docker Hub:

$ docker-compose push

Terraform

Requisitos:

En la raíz del proyecto genera una llave SSH, nombrándola dockernights1:

$ ssh-keygen -t rsa -b 4096 -C "dockernights1"
Generating public/private rsa key pair.
Enter file in which to save the key (/path/.ssh/id_rsa): dockernights1

Ingresa a la carpeta terraform, ejecutando plan y llenando las variables con los keys y tu email:

$ cd terraform
$ terraform plan -out dockernights1
var.cloudflare_domain
  Enter a value:
...

Ejecuta la creación de la instancia:

$ terraform apply dockernights1

Terraform se encargará de subir la llave SSH, crear el servidor y añadir el registro con la IP al dominio web.tusitio.com.

Ansible

Requisitos:

Toma nota de la ip del servidor que se generó con terraform:

$ cd terraform
$ terraform show
# Busca el parámetro ipv4_address
...
ipv4_address = 123.456.789.00
...

Edita el archivo hosts de la carpeta ansible:

[la_ip_de_tu_servidor]
123.456.789.00

Ejecuta el playbook para instalar Docker y otras utilidades

$ cd ansible
$ ansible-playbook -i hosts install-docker.yml

Ansible agregará la llave GPG y el repositorio oficial de Docker, instalando todas las dependencias.

Requisitos

Ingresa a tu servidor via SSH y ambia a modo swarm usando tu ip pública:

# en la carpeta raiz de este repositorio
$ ssh -i dockernights1 root@<ip_publica>
$ docker swarm init --advertise-addr <ip_publica>

Corre el visualizador de Swarm:

$ docker service create \
  --name=viz \
  --publish=8080:8080/tcp \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  manomarks/visualizer

Crea una red de tipo overlay en Docker

$ docker network create -d overlay votacion

Crea el servicio redis adjuntándolo a la red votación:

docker service create --name redis --replicas 1 --network votacion redis:3.0-alpine

El servicio app corre con la imagen de la aplicación web:

docker service create --name app -p 80:3000 --network votacion dockerlapaz/votacion:1.0.0

Escala el servicio app a 5 replicas

docker service scale app=5

Obtener la versión de la aplicación:

while true; do curl http://ip_publica/version.php; sleep 1; done

Logspout

Logspout capturará los logs de la aplicación web y los enviará a Papertrail.

Crea una cuenta en Papertrail y obtiene la dirección de envío de logs (logs#.papertrailapp.com:PORT)

Dentro del servidor principal, crea el siguiente servicio reemplazando la dirección de logs al final del comando:

docker service create --name logspout --mode global --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock gliderlabs/logspout syslog://logs#.papertrailapp.com:PORT