Implementación de una aplicación GlassFish en la plataforma de Docker: una ruta de migración a Amazon Linux 2 - AWS Elastic Beanstalk

Implementación de una aplicación GlassFish en la plataforma de Docker: una ruta de migración a Amazon Linux 2

El objetivo de este tutorial es proporcionar a los clientes que utilizan la plataforma de GlassFish de Docker preconfigurada (basada en la AMI de Amazon) una ruta de migración a Amazon Linux 2. Puede migrar su aplicación GlassFish a Amazon Linux 2 implementando GlassFish y su código de aplicación a una imagen de Amazon Linux 2 Docker.

El tutorial lo guía en el uso de la plataforma Docker AWS Elastic Beanstalk para implementar una aplicación basada en el servidor de aplicaciones Java EE de GlassFish en un entorno de Elastic Beanstalk.

Demostramos dos enfoques para construir una imagen de Docker:

  • Sencillo: proporcione el código fuente de su aplicación de GlassFish y permita que Elastic Beanstalk construya y ejecute una imagen de Docker como parte del aprovisionamiento de su entorno. Esto es fácil de configurar, a costa de un mayor tiempo de aprovisionamiento de instancias.

  • Avanzado: cree una imagen de Docker personalizada que contenga el código de la aplicación y las dependencias, y proporciónela a Elastic Beanstalk para usarla en su entorno. Este enfoque es un poco más complejo y reduce el tiempo de aprovisionamiento de las instancias en su entorno.

Prerequisites

En este tutorial, se da por sentado que usted posee algunos conocimientos sobre las operaciones básicas de la interfaz de la línea de comandos de Elastic Beanstalk (CLI de EB) y Docker. Si aún no lo ha hecho, siga las instrucciones que se indican en Introducción a Elastic Beanstalk para lanzar su primer entorno de Elastic Beanstalk. En este tutorial se utiliza la CLI de EB, pero también puede crear entornos y cargar aplicaciones mediante la consola de Elastic Beanstalk.

Para realizar este tutorial, también necesitará los siguientes componentes de Docker:

  • Una instalación local activa de Docker. Para obtener más información, consulte Descripción de Docker en la página de documentos de Docker.

  • Acceso a Docker Hub. Deberá crear un ID de Docker para poder acceder a Docker Hub. Para obtener más información, consulte Compartir la aplicación en la página de documentos de Docker.

Para obtener más información acerca de la configuración de los entornos Docker en las plataformas Elastic Beanstalk, consulte Configuración de Docker en este mismo capítulo.

Ejemplo sencillo: proporcione su código de aplicación

Esta es una manera fácil de implementar su aplicación de GlassFish. Proporciona el código fuente de la aplicación junto con el Dockerfile incluido en este tutorial. Elastic Beanstalk crea una imagen Docker que incluye su aplicación y la pila de software GlassFish. A continuación, Elastic Beanstalk ejecuta la imagen en las instancias de su entorno.

Un problema de este enfoque es que Elastic Beanstalk crea la imagen de Docker localmente cada vez que crea una instancia para su entorno. La creación de la imagen aumenta el tiempo de aprovisionamiento de instancias. Este impacto no se limita a la creación inicial del entorno, sino que también ocurre durante las acciones de escalado ascendente.

Para lanzar un entorno con una aplicación de GlassFish de ejemplo

  1. Descargue el docker-glassfish-al2-v1.zip de ejemplo y, a continuación, expanda el archivo .zip en un directorio del entorno de desarrollo.

    ~$ curl https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/samples/docker-glassfish-al2-v1.zip --output docker-glassfish-al2-v1.zip ~$ mkdir glassfish-example ~$ cd glassfish-example ~/glassfish-example$ unzip ../docker-glassfish-al2-v1.zip

    La estructura de directorios debe ser similar a la siguiente.

    ~/glassfish-example |-- Dockerfile |-- Dockerrun.aws.json |-- glassfish-start.sh |-- index.jsp |-- META-INF | |-- LICENSE.txt | |-- MANIFEST.MF | `-- NOTICE.txt |-- robots.txt `-- WEB-INF `-- web.xml

    Los siguientes archivos son clave para crear y ejecutar un contenedor de Docker en su entorno:

    • Dockerfile: proporciona instrucciones que Docker utiliza para crear una imagen con la aplicación y las dependencias requeridas.

    • glassfish-start.sh: un script de shell que ejecuta la imagen de Docker para iniciar la aplicación.

    • Dockerrun.aws.json: proporciona una clave de registro para incluir las solicitudes de archivo de registro de inicio de sesión del servidor de aplicaciones de GlassFish. Si no está interesado en los registros de GlassFish, puede omitir este archivo.

  2. Configure el directorio local para su implementación en Elastic Beanstalk.

    ~/glassfish-example$ eb init -p docker glassfish-example
  3. (Opcional) Utilice el comando eb local run para crear y ejecutar el contenedor de forma local.

    ~/glassfish-example$ eb local run --port 8080
    nota

    Para obtener más información acerca del comando eb local, consulte eb local. El comando no es compatible con Windows. Si lo prefiere, puede crear y ejecutar el contenedor con los comandos docker build y docker run. Para obtener más información, consulte la documentación de Docker.

  4. (Opcional) Aunque el contenedor se está ejecutando, utilice el comando eb local open para ver la aplicación en un navegador web. Si lo prefiere, abra http://localhost:8080/ en un navegador web.

    ~/glassfish-example$ eb local open
  5. Use el comando eb create para crear un entorno e implementar su aplicación.

    ~/glassfish-example$ eb create glassfish-example-env
  6. Una vez que se lanza el entorno, utilice el comando eb open para verlo en un explorador Web.

    ~/glassfish-example$ eb open

Cuando termine de trabajar con el ejemplo, termine el entorno y elimine los recursos relacionados.

~/glassfish-example$ eb terminate --all

Ejemplo avanzado: proporcione una imagen de Docker predefinida

Esta es una forma más avanzada de implementar su aplicación de GlassFish. Basándose en el primer ejemplo, se crea una imagen de Docker que contiene el código de la aplicación y la pila de software de GlassFish, y se envía a Docker Hub. Después de realizar este paso único, puede lanzar entornos de Elastic Beanstalk basados en la imagen personalizada.

Cuando lanza un entorno y proporciona la imagen de Docker, las instancias del entorno descargan y usan esta imagen directamente y no necesitan crear una imagen de Docker. Por lo tanto, se reduce el tiempo de aprovisionamiento de instancias.

Notes
  • Los siguientes pasos crearán una imagen de Docker disponible públicamente.

  • Utilizará los comandos Docker de su instalación local de Docker, junto con las credenciales de Docker Hub. Para obtener más información, consulte la sección Prerequisites anterior.

Para lanzar un entorno con una imagen de Docker de aplicación de GlassFish prediseñada

  1. Descargue y expanda el ejemplo docker-glassfish-al2-v1.zip como en el ejemplo sencillo anterior. Si ha completado dicho ejemplo, puede usar el directorio que ya tiene.

  2. Cree una imagen de Docker y envíela a Docker Hub. Ingrese su ID de Docker en docker-id para iniciar sesión en Docker Hub.

    ~/glassfish-example$ docker build -t docker-id/beanstalk-glassfish-example:latest . ~/glassfish-example$ docker push docker-id/beanstalk-glassfish-example:latest
    nota

    Antes de enviar la imagen, es posible que deba ejecutar docker login. Se le pedirán las credenciales de Docker Hub si ejecuta el comando sin parámetros.

  3. Cree un directorio adicional.

    ~$ mkdir glassfish-prebuilt ~$ cd glassfish-prebuilt
  4. Copie el siguiente ejemplo en un archivo denominado Dockerrun.aws.json.

    ejemplo ~/glassfish-prebuilt/Dockerrun.aws.json

    { "AWSEBDockerrunVersion": "1", "Image": { "Name": "docker-username/beanstalk-glassfish-example" }, "Ports": [ { "ContainerPort": 8080, "HostPort": 8080 } ], "Logging": "/usr/local/glassfish5/glassfish/domains/domain1/logs" }
  5. Configure el directorio local para su implementación en Elastic Beanstalk.

    ~/glassfish-prebuilt$ eb init -p docker glassfish-prebuilt$
  6. (Opcional) Utilice el comando eb local run para ejecutar el contenedor localmente.

    ~/glassfish-prebuilt$ eb local run --port 8080
  7. (Opcional) Aunque el contenedor se está ejecutando, utilice el comando eb local open para ver la aplicación en un navegador web. Si lo prefiere, abra http://localhost:8080/ en un navegador web.

    ~/glassfish-prebuilt$ eb local open
  8. Utilice el comando eb create para crear un entorno e implementar la imagen de Docker.

    ~/glassfish-prebuilt$ eb create glassfish-prebuilt-env
  9. Una vez que se lanza el entorno, utilice el comando eb open para verlo en un explorador Web.

    ~/glassfish-prebuilt$ eb open

Cuando termine de trabajar con el ejemplo, termine el entorno y elimine los recursos relacionados.

~/glassfish-prebuilt$ eb terminate --all