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 llamadodocker
ubicado en mi proyecto de aplicación web. - El directorio
docker
contiene elDockerfile
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 JBossContenido 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 nuevoDocker Deployment
como se describe aquí - La ruta a
container_settings.json
debe colocarse en el campo deContainer 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.