Cómo desplegar un proyecto WAR con SpringBoot en un contenedor Docker sobre EC2 de AWS

Como a la mayoría de nosotros nos gusta ir al grano, intentaré ser directo y claro:

  • Levantamos un EC2 (con Amazon Linux)
  • Descargamos el archivo PEM generado para poder conectarnos por consola.
  • Nos conectamos a la instancia levantada de la siguiente manera:
    • chmod 400 xxxxYYY.pem
    • ssh -i “xxxxYYY.pem” ec2-user@<<IP_PUBLICA_CON_DNS>>
  • Instalamos docker en la instancia:
    • sudo yum install -y docker
  • Arrancamos docker:
    • sudo service docker start  (inicia docker)
  • Definimos que arranque auto cuando iniciamos instancia:
    • sudo chkconfig docker on (auto arranque)
  • Descargamos la imagen de tomcat:
    • sudo docker pull tomcat
  • Comprobamos la imagen:
    • sudo docker images (comprobamos imagen)
  • Ejecutamos imagen de tomcat, mapeando puertos entre docker y ec2
    • sudo docker run -d -p 8080:8080 tomcat
  • Para comprobar que esta arrancada:
    • sudo docker ps 
  • Subimos el war del proyecto a un S3 por ejemplo, con IP pública.
  • Nos conectamos al tomcat del docker:
    • sudo docker exec -it DOCKERID /bin/bash
    • comprobamos el directorio de despliegue, por defecto:
      • /usr/local/tomcat/webapps
  • Aquí tenemos dos opciones:
    • Podemos hacer un wget del fichero war ahí mismo y se lanzará el autodeploy
    • Sobre la consola EC2, descargamos el war de la ip pública del S3 a un directorio dentro de home/ec2-user/spring-test (por ejemplo) del ec2: wget https://xxxxxYYYY.war
      • Ahora ejecutamos la imagen de tomcat mapeando puertos e indicando directorios de despliegue, nuestra imagen y el despliegue de tomcat:
      • sudo docker run -d -p 8080:8080 -v /home/ec2-user/spring-test:/usr/local/tomcat/webapps tomcat

Y listo! ya tendriamos desplegado el fichero war. Por otro lado si lo que queréis es construir y automatizar el proceso en una imagen de Docker:

  • Creamos un docker file definiendo nuestro enlace del war, la carpeta destino y tantos parámetros como queramos (ejemplo en consola linux)

cat > Dockerfile << EOF

FROM tomcat

# Deploy JavaEEDemo Application

ADD https://xxxxYYYY.war /usr/local/tomcat/webapps/

# Explicitly expose port 8080 (explicit is required by Elastic Beanstalk)

EXPOSE 8080

EOF

  • Generamos la imagen con la config del docker file
    • sudo docker build –tag=spring-boot-tomcat .
  • Ejecutamos la imagen con:
    • sudo docker run -d -p 8080:8080 –name spring-cron spring-boot-tomcat

 

NOTA: recordad que esta imagen siempre tendrá la misma version del war en el momento de lanzar el build (podríamos automatizar esto con un docker-compose.yml).

Saludos!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.