intellij hub example java maven intellij-idea docker boot2docker

java - hub - Servidor de aplicaciones en Docker: despliegue de guerra con IntelliJ



intellij docker (1)

Hola queridos programadores,

Estoy buscando configurar mi desarrollo con contenedores Docker ya que actualmente estoy trabajando en Windows, mi configuración ahora es la siguiente:

  • Una imagen acoplable que incluye un jboss que se inicia y ya se está ejecutando

  • Un repo hg comprobado en mi sistema de archivos de Windows que se importa a IntelliJ

  • Una carpeta compartida que está asignada a la carpeta de despliegue en la imagen del acoplador

Cuando quiera desplegar mi guerra, dejaré que IntelliJ construya el artefacto como una guerra explosiva con el directorio de salida en $ THE_SHARED_FODLER / mywar.war. Luego tocaré un archivo en el mismo repositorio con mywar.war.deploy. Como esto se comparte en la carpeta de despliegue de la imagen de la ventana acoplable de jboss, el Jboss lanzado ahora despliega mi guerra.

Sin embargo, como todo lo que IntelliJ sabe es que he construido un artefacto para un sistema de archivos, no puedo obtener el buen apoyo que recibiría si hubiera desplegado la guerra de una manera normal (por ejemplo, tener un representante local). jboss y una configuración de ejecución jboss que desplegó el artefacto explosionado). El material frontend (html / css) siempre se puede resolver con grunt o similar, pero cuando se trata de jar-libs, la mejor solución que he encontrado hasta ahora es:

  • reconstruir el jar con maven y copiar eso en $ THE_SHARED_FOLDER / mywar.war / web-inf / lib /

  • toca un archivo mywar.war.redeploy

Sin embargo, esto hace que el tiempo de respuesta del cambio de código sea de unos 30 segundos o surge una pregunta bastante abierta: ¿Cuál es una buena forma de desarrollar hacia un servidor de aplicaciones que se ejecuta en una imagen de acoplador? ¿Como estás hoy? ¿Has probado algo similar y has decidido que los contenedores Docker no son el camino a seguir para esto?

Cualquier comentario sobre el tema es muy bienvenido :-)

Brgrgs stevie el televisor


Así es como he resuelto el problema que está surgiendo:

  • Suponiendo que está utilizando el complemento Intellij Docker , es compatible ya que Intellij 14.1
  • Estoy usando maven para copiar la guerra en un directorio llamado docker ubicado en mi proyecto de aplicación web.
  • El directorio docker contiene el Dockerfile Docker para construir la imagen Docker
  • En el archivo Docker copio el archivo de guerra empaquetado a la imagen del acoplador, creo un usuario de administración para acceder a la consola de administración en el puerto 9990 y cargue JBoss

  • Contenido de Dockerfile:

    FROM jboss/wildfly MAINTAINER [email protected]
    ADD your-awesome-app.war /opt/jboss/wildfly/standalone/deployments/
    RUN /opt/jboss/wildfly/bin/add-user.sh admin Admin#70365 --silent
    CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

  • Ahora necesita crear un archivo de configuración container_settings.json . Este archivo contiene los parámetros para ejecutar la imagen de Docker que ha creado:

    { "_comment" : "My service", "Image": "your-awesome-app-name", "HostConfig": { "PortBindings":{ "9990/tcp": [{ "HostIp": "0.0.0.0", "HostPort": "9990" }] }, "RestartPolicy": { "Name": "on-failure", "MaximumRetryCount": 5 } }

  • Abra Intellij Run/Debug Configurations y agregue un nuevo Docker Deployment como se describe aquí
  • La ruta a container_settings.json debe colocarse en el campo de Container settings en la interfaz de usuario
  • Una vez que hayas terminado. Puede ejecutar la configuración y construirá su contenedor Docker con la nueva su-awesome-app.war que acaba de construir.

Tenga en cuenta que después de crear su imagen Docker por primera vez, las ejecuciones de configuración sucesivas son mucho más rápidas ya que Docker almacena en caché los cambios de imagen.
Como el único cambio en su imagen Docker es el archivo war, las siguientes ejecuciones de configuración solo transferirán esta parte de la imagen.

En general, es importante poner el componente más cambiante al final en el archivo Docker ya que cada acción en el archivo Docker se almacena en caché.

Espero haber logrado ayudar.