{"id":2523,"date":"2017-02-03T18:46:36","date_gmt":"2017-02-03T18:46:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2523"},"modified":"2023-06-19T03:58:42","modified_gmt":"2023-06-19T10:58:42","slug":"microservice-using-docker-stack-deploy-wildfly-javaee-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/","title":{"rendered":"Microservicio usando Docker stack deploy - WildFly, Java EE y Couchbase"},"content":{"rendered":"<p>Hay mucho material sobre microservicios, s\u00f3lo <a href=\"https:\/\/lmgtfy.com\/?q=microservices\">buscar en google<\/a>\u00a1! Hice una presentaci\u00f3n sobre refactorizaci\u00f3n de monolito a microservicios en Devoxx B\u00e9lgica hace un par de a\u00f1os y tiene buenas cr\u00edticas:\n<\/p>\n<p>Este blog mostrar\u00e1 c\u00f3mo Docker simplifica la creaci\u00f3n y el cierre de un microservicio. Todo el c\u00f3digo utilizado en este blog est\u00e1 en\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/couchbase-javaee\">github.com\/arun-gupta\/couchbase-javaee<\/a>.<\/p>\n<h2>Definici\u00f3n de microservicios con Compose<\/h2>\n<p>Docker 1.13 introdujo un <a href=\"https:\/\/docs.docker.com\/compose\/compose-file\/#version-3\">v3 de Docker Compose<\/a>. Los cambios en la sintaxis son m\u00ednimos, pero la diferencia clave es la adici\u00f3n de <a href=\"https:\/\/docs.docker.com\/compose\/compose-file\/#\/deploy\">despliegue<\/a> atributo. Este atributo permite especificar r\u00e9plicas, rolling update y pol\u00edtica de reinicio para el contenedor. Nuestro microservicio iniciar\u00e1 un servidor de aplicaciones WldFly con una aplicaci\u00f3n Java EE pre-desplegada. Esta aplicaci\u00f3n hablar\u00e1 con una base de datos Couchbase para CRUD los datos de la aplicaci\u00f3n. Aqu\u00ed est\u00e1 la definici\u00f3n de Compose:<\/p>\n<pre class=\"lang:default decode:true\">\r\nversion: &apos;3&apos;\r\nservices:\r\n  web:\r\n    image: arungupta\/couchbase-javaee:travel\r\n    environment:\r\n      - COUCHBASE_URI=db\r\n    ports:\r\n      - 8080:8080\r\n      - 9990:9990\r\n    depends_on:\r\n      - db\r\n  db:\r\n    image: arungupta\/couchbase:travel\r\n    ports:\r\n      - 8091:8091\r\n      - 8092:8092 \r\n      - 8093:8093 \r\n      - 11210:11210<\/pre>\n<p>En este archivo Compose:<\/p>\n<ol>\n<li>En este Compose se definen dos servicios con el nombre <code>db<\/code> y <code>web<\/code> atributos<\/li>\n<li>Nombre de imagen para cada servicio definido mediante <code>imagen<\/code> atributo<\/li>\n<li>En <code>arungupta\/couchbase:viaje<\/code> inicia el servidor Couchbase, lo configura utilizando <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/rest-api\/rest-endpoints-all.html\">API REST de Couchbase<\/a>y cargas\u00a0<code>viaje-muestra<\/code> con ~32k documentos JSON.<\/li>\n<li>En <code>arungupta\/couchbase-javaee:travel<\/code> inicia WildFly y despliega el archivo WAR de la aplicaci\u00f3n creado a partir de <a href=\"https:\/\/github.com\/arun-gupta\/couchbase-javaee\">https:\/\/github.com\/arun-gupta\/couchbase-javaee<\/a>. Clona ese proyecto si quieres construir tu propia imagen.<\/li>\n<li><code>medio ambiente<\/code> define variables de entorno accesibles por la aplicaci\u00f3n desplegada en WildFly. <code>COUCHBASE_URI<\/code> se refiere al servicio de base de datos. Esto se utiliza en el c\u00f3digo de la aplicaci\u00f3n como se muestra en <a href=\"https:\/\/github.com\/arun-gupta\/couchbase-javaee\/blob\/master\/src\/main\/java\/org\/couchbase\/sample\/javaee\/Database.java\">https:\/\/github.com\/arun-gupta\/couchbase-javaee\/blob\/master\/src\/main\/java\/org\/couchbase\/sample\/javaee\/Database.java<\/a>.<\/li>\n<li>El reenv\u00edo de puertos se realiza mediante <code>puertos<\/code> atributo<\/li>\n<li>\n<div><code>depende_de<\/code> en el archivo de definici\u00f3n Compose garantiza el orden de inicio del contenedor. Pero las aplicaciones que se ejecutan dentro del contenedor deben garantizar el arranque a nivel de aplicaci\u00f3n. En nuestro caso, WildFly se inicia con bastante rapidez, pero la base de datos tarda unos segundos en iniciarse. Esto significa que la aplicaci\u00f3n Java EE desplegada en WildFly no puede comunicarse con la base de datos. Esto pone de manifiesto una pr\u00e1ctica recomendada al crear aplicaciones de microservicios: debe codificar de forma defensiva y asegurarse en la inicializaci\u00f3n de la aplicaci\u00f3n de que los microservicios de los que depende se han iniciado, sin asumir el orden de inicio. Esto se muestra en el c\u00f3digo de inicializaci\u00f3n de la base de datos en <a href=\"https:\/\/github.com\/arun-gupta\/couchbase-javaee\/blob\/master\/src\/main\/java\/org\/couchbase\/sample\/javaee\/Database.java\">https:\/\/github.com\/arun-gupta\/couchbase-javaee\/blob\/master\/src\/main\/java\/org\/couchbase\/sample\/javaee\/Database.java<\/a>. Realiza las siguientes comprobaciones:<\/p>\n<ol>\n<li>El cubo existe<\/li>\n<li>El servicio de consulta de Couchbase ya funciona<\/li>\n<li>El cubo de muestras est\u00e1 completamente cargado<\/li>\n<\/ol><\/div>\n<\/li>\n<\/ol>\n<p>Esta aplicaci\u00f3n puede iniciarse mediante <code>docker-compose up -d<\/code> en un \u00fanico host. O un cl\u00faster de motores Docker en modo enjambre utilizando <code>docker stack deploy<\/code> mando.<\/p>\n<h2>Configurar el modo enjambre de Docker<\/h2>\n<p>Inicialice el modo Enjambre utilizando el siguiente comando:<\/p>\n<pre>\r\ndocker swarm init<\/pre>\n<div>Esto inicia un Gestor de Enjambre. Por defecto, los nodos gestores son tambi\u00e9n trabajadores, pero pueden configurarse para ser s\u00f3lo gestores.<\/div>\n<div>Encuentre informaci\u00f3n sobre este cluster de un nodo utilizando el comando <code>informaci\u00f3n de docker<\/code> mando:<\/p>\n<pre class=\"lang:default decode:true\">\r\nContainers: 0\r\n Running: 0\r\n Paused: 0\r\n Stopped: 0\r\nImages: 17\r\nServer Version: 1.13.0\r\nStorage Driver: overlay2\r\n Backing Filesystem: extfs\r\n Supports d_type: true\r\n Native Overlay Diff: true\r\nLogging Driver: json-file\r\nCgroup Driver: cgroupfs\r\nPlugins:\r\n Volume: local\r\n Network: bridge host ipvlan macvlan null overlay\r\nSwarm: active\r\n NodeID: 92mydh0e09ba5hx3wtmcmvktz\r\n Is Manager: true\r\n ClusterID: v68ikyaff7rdxpaw1j0c9i60s\r\n Managers: 1\r\n Nodes: 1\r\n Orchestration:\r\n  Task History Retention Limit: 5\r\n Raft:\r\n  Snapshot Interval: 10000\r\n  Number of Old Snapshots to Retain: 0\r\n  Heartbeat Tick: 1\r\n  Election Tick: 3\r\n Dispatcher:\r\n  Heartbeat Period: 5 seconds\r\n CA Configuration:\r\n  Expiry Duration: 3 months\r\n Node Address: 192.168.65.2\r\n Manager Addresses:\r\n  192.168.65.2:2377\r\nRuntimes: runc\r\nDefault Runtime: runc\r\nInit Binary: docker-init\r\ncontainerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e\r\nrunc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e\r\ninit version: 949e6fa\r\nSecurity Options:\r\n seccomp\r\n  Profile: default\r\nKernel Version: 4.9.5-moby\r\nOperating System: Alpine Linux v3.5\r\nOSType: linux\r\nArchitecture: x86_64\r\nCPUs: 4\r\nTotal Memory: 1.952 GiB\r\nName: moby\r\nID: SGCM:KDRD:G3M7:PZHN:J4RL:VFFR:G2SR:EKD5:JV4J:RL3X:LF7T:XF6V\r\nDocker Root Dir: \/var\/lib\/docker\r\nDebug Mode (client): false\r\nDebug Mode (server): true\r\n File Descriptors: 31\r\n Goroutines: 124\r\n System Time: 2017-01-27T08:25:58.032295342Z\r\n EventsListeners: 1\r\nNo Proxy: *.local, 169.254\/16\r\nUsername: arungupta\r\nRegistry: https:\/\/index.docker.io\/v1\/\r\nExperimental: true\r\nInsecure Registries:\r\n 127.0.0.0\/8\r\nLive Restore Enabled: false<\/pre>\n<p>Este cluster tiene 1 nodo, y ese es el manager. Alternativamente, un cluster multi-host puede ser f\u00e1cilmente configurado usando <a href=\"https:\/\/github.com\/docker\/labs\/blob\/master\/developer-tools\/java\/chapters\/ch08-aws.adoc\">Docker para AWS<\/a>.<\/p>\n<h2>Despliegue de microservicios<\/h2>\n<p>El microservicio se puede iniciar como:<\/p>\n<pre class=\"lang:default decode:true\">\r\ndocker stack deploy --compose-file=docker-compose.yml webapp<\/pre>\n<p>Esto muestra la salida:<\/p><\/div>\n<pre class=\"lang:default decode:true\">\r\nCreating network webapp_default\r\nCreating service webapp_web\r\nCreating service webapp_db<\/pre>\n<div>Los servicios WildFly y Couchbase se inician en este nodo. Cada servicio tiene un \u00fanico contenedor. Si el modo Enjambre est\u00e1 habilitado en varios nodos, los contenedores se distribuir\u00e1n entre varios nodos.<\/div>\n<div>Se crea una nueva red superpuesta. Esto permite que varios contenedores en diferentes hosts se comuniquen entre s\u00ed.<\/div>\n<p>Compruebe que los servicios WildFly y Couchbase se est\u00e1n ejecutando mediante <code>docker service ls<\/code>:<\/p>\n<pre class=\"lang:default decode:true\">\r\nID            NAME        MODE        REPLICAS  IMAGE\r\na9pkiziw3vgw  webapp_db   replicated  1\/1       arungupta\/couchbase:travel\r\nhr5s6ue54kwj  webapp_web  replicated  1\/1       arungupta\/couchbase-javaee:travel<\/pre>\n<div>Los registros del servicio pueden consultarse mediante <code>docker service logs -f webapp_web<\/code>:<\/div>\n<div>\n<pre class=\"lang:default decode:true\">\r\nwebapp_web.1.wby0b04t7bap@moby    | =========================================================================\r\nwebapp_web.1.wby0b04t7bap@moby    |\r\nwebapp_web.1.wby0b04t7bap@moby    |   JBoss Bootstrap Environment\r\nwebapp_web.1.wby0b04t7bap@moby    |\r\nwebapp_web.1.wby0b04t7bap@moby    |   JBOSS_HOME: \/opt\/jboss\/wildfly\r\nwebapp_web.1.wby0b04t7bap@moby    |\r\nwebapp_web.1.wby0b04t7bap@moby    |   JAVA: \/usr\/lib\/jvm\/java\/bin\/java\r\nwebapp_web.1.wby0b04t7bap@moby    |\r\nwebapp_web.1.wby0b04t7bap@moby    |   JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true\r\nwebapp_web.1.wby0b04t7bap@moby    |\r\nwebapp_web.1.wby0b04t7bap@moby    | =========================================================================\r\n\r\n. . .\r\n\r\nwebapp_web.1.wby0b04t7bap@moby    | 23:14:15,811 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 34) WFLYSRV0010: Deployed \"airlines.war\" (runtime-name : \"airlines.war\")\r\nwebapp_web.1.wby0b04t7bap@moby    | 23:14:16,076 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on https:\/\/127.0.0.1:9990\/management\r\nwebapp_web.1.wby0b04t7bap@moby    | 23:14:16,077 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on https:\/\/127.0.0.1:9990\r\nwebapp_web.1.wby0b04t7bap@moby    | 23:14:16,077 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 98623ms - Started 443 of 691 services (404 services are lazy, passive or on-demand)<\/pre>\n<p>Aseg\u00farese de esperar a que aparezca la \u00faltima declaraci\u00f3n de registro.<\/p><\/div>\n<h2>Microservicio de acceso<\/h2>\n<p>Obtener 10 aerol\u00edneas del microservicio:<\/p>\n<pre class=\"lang:default decode:true\">\r\ncurl -v https:\/\/localhost:8080\/airlines\/resources\/airline<\/pre>\n<p>Esto muestra los resultados como:<\/p>\n<pre class=\"lang:default decode:true\">\r\n*   Trying ::1...\r\n* Connected to localhost (::1) port 8080 (#0)\r\n&gt; GET \/airlines\/resources\/airline HTTP\/1.1\r\n&gt; Host: localhost:8080\r\n&gt; User-Agent: curl\/7.43.0\r\n&gt; Accept: *\/*\r\n&gt; \r\n&lt; HTTP\/1.1 200 OK\r\n&lt; Connection: keep-alive\r\n&lt; X-Powered-By: Undertow\/1\r\n&lt; Server: WildFly\/10\r\n&lt; Content-Type: application\/octet-stream\r\n&lt; Content-Length: 1402\r\n&lt; Date: Fri, 03 Feb 2017 17:02:45 GMT\r\n&lt; \r\n* Connection #0 to host localhost left intact\r\n[{&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United States&quot;,&quot;iata&quot;:&quot;Q5&quot;,&quot;callsign&quot;:&quot;MILE-AIR&quot;,&quot;name&quot;:&quot;40-Mile Air&quot;,&quot;icao&quot;:&quot;MLA&quot;,&quot;id&quot;:10,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United States&quot;,&quot;iata&quot;:&quot;TQ&quot;,&quot;callsign&quot;:&quot;TXW&quot;,&quot;name&quot;:&quot;Texas Wings&quot;,&quot;icao&quot;:&quot;TXW&quot;,&quot;id&quot;:10123,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United States&quot;,&quot;iata&quot;:&quot;A1&quot;,&quot;callsign&quot;:&quot;atifly&quot;,&quot;name&quot;:&quot;Atifly&quot;,&quot;icao&quot;:&quot;A1F&quot;,&quot;id&quot;:10226,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United Kingdom&quot;,&quot;iata&quot;:null,&quot;callsign&quot;:null,&quot;name&quot;:&quot;Jc royal.britannica&quot;,&quot;icao&quot;:&quot;JRB&quot;,&quot;id&quot;:10642,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United States&quot;,&quot;iata&quot;:&quot;ZQ&quot;,&quot;callsign&quot;:&quot;LOCAIR&quot;,&quot;name&quot;:&quot;Locair&quot;,&quot;icao&quot;:&quot;LOC&quot;,&quot;id&quot;:10748,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United States&quot;,&quot;iata&quot;:&quot;K5&quot;,&quot;callsign&quot;:&quot;SASQUATCH&quot;,&quot;name&quot;:&quot;SeaPort Airlines&quot;,&quot;icao&quot;:&quot;SQH&quot;,&quot;id&quot;:10765,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United States&quot;,&quot;iata&quot;:&quot;KO&quot;,&quot;callsign&quot;:&quot;ACE AIR&quot;,&quot;name&quot;:&quot;Alaska Central Express&quot;,&quot;icao&quot;:&quot;AER&quot;,&quot;id&quot;:109,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;United Kingdom&quot;,&quot;iata&quot;:&quot;5W&quot;,&quot;callsign&quot;:&quot;FLYSTAR&quot;,&quot;name&quot;:&quot;Astraeus&quot;,&quot;icao&quot;:&quot;AEU&quot;,&quot;id&quot;:112,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;France&quot;,&quot;iata&quot;:&quot;UU&quot;,&quot;callsign&quot;:&quot;REUNION&quot;,&quot;name&quot;:&quot;Air Austral&quot;,&quot;icao&quot;:&quot;REU&quot;,&quot;id&quot;:1191,&quot;type&quot;:&quot;airline&quot;}}, {&quot;travel-sample&quot;:{&quot;country&quot;:&quot;France&quot;,&quot;iata&quot;:&quot;A5&quot;,&quot;callsign&quot;:&quot;AIRLINAIR&quot;,&quot;name&quot;:&quot;Airlinair&quot;,&quot;icao&quot;:&quot;RLA&quot;,&quot;id&quot;:1203,&quot;type&quot;:&quot;airline&quot;}}]<\/pre>\n<p><a href=\"https:\/\/github.com\/docker\/labs\/tree\/master\/developer-tools\/java\">Taller sobre Docker para desarrolladores Java<\/a> es un laboratorio pr\u00e1ctico a su propio ritmo y le permite iniciarse en Docker f\u00e1cilmente. Consigue un \u00fanico recurso:<\/p>\n<pre class=\"lang:default decode:true\">\r\ncurl -v https:\/\/localhost:8080\/airlines\/resources\/airline\/137<\/pre>\n<p>Crea un nuevo recurso:<\/p>\n<pre class=\"lang:default decode:true\">\r\ncurl -v -H \"Content-Type: application\/json\" -X POST -d &apos;{\"country\":\"France\",\"iata\":\"A5\",\"callsign\":\"AIRLINAIR\",\"name\":\"Airlinair\",\"icao\":\"RLA\",\"type\":\"airline\"}&apos; https:\/\/localhost:8080\/airlines\/resources\/airline<\/pre>\n<p>Actualizar un recurso:<\/p>\n<pre class=\"lang:default decode:true\">\r\ncurl -v -H \"Content-Type: application\/json\" -X PUT -d &apos;{\"country\":\"France\",\"iata\":\"A5\",\"callsign\":\"AIRLINAIR\",\"name\":\"Airlin Air\",\"icao\":\"RLA\",\"type\":\"airline\",\"id\": \"19810\"}&apos; https:\/\/localhost:8080\/airlines\/resources\/airline\/19810\r\n<\/pre>\n<p>Borrar un recurso:<\/p>\n<pre class=\"lang:default decode:true\">\r\ncurl -v -X DELETE https:\/\/localhost:8080\/airlines\/resources\/airline\/19810<\/pre>\n<p>Los resultados detallados de cada uno de estos comandos se encuentran en\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/couchbase-javaee\">github.com\/arun-gupta\/couchbase-javaee<\/a>.<\/p>\n<h2>Eliminar microservicio<\/h2>\n<p>El microservicio puede eliminarse mediante el comando\u00a0<span class=\"s1\"><code>docker stack rm webapp<\/code>:<\/span><\/p>\n<pre class=\"lang:default decode:true\">\r\nRemoving service webapp_web\r\nRemoving service webapp_db\r\nRemoving network webapp_default<\/pre>\n<p>\u00bfQuieres empezar a usar Couchbase? Mira en <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/getting-started\/starter-kits.html\">Kits de inicio de Couchbase<\/a>. \u00bfQuieres saber m\u00e1s sobre c\u00f3mo ejecutar Couchbase en contenedores?<\/p>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/es\/containers\/\">Couchbase en contenedores<\/a><\/li>\n<li><a href=\"https:\/\/forums.couchbase.com\/\">Foros de Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/developer.couchbase.com\/\">Portal para desarrolladores de Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/twitter.com\/couchbasedev\">@couchhasedev<\/a> y <a href=\"https:\/\/twitter.com\/couchbase\">@couchbase<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>There is plenty of material on\u00a0microservices, just google it! I gave a presentation on\u00a0refactoring monolith to microservices at Devoxx Belgium a couple of years back and it has\u00a0good reviews: This blog will show how\u00a0Docker simplifies creation and shutting down of [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[],"ppma_author":[8933],"class_list":["post-2523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Microservice using Docker stack deploy - WildFly, Java EE and Couchbase - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microservice using Docker stack deploy - WildFly, Java EE and Couchbase\" \/>\n<meta property=\"og:description\" content=\"There is plenty of material on\u00a0microservices, just google it! I gave a presentation on\u00a0refactoring monolith to microservices at Devoxx Belgium a couple of years back and it has\u00a0good reviews: This blog will show how\u00a0Docker simplifies creation and shutting down of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-03T18:46:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-19T10:58:42+00:00\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Microservice using Docker stack deploy &#8211; WildFly, Java EE and Couchbase\",\"datePublished\":\"2017-02-03T18:46:36+00:00\",\"dateModified\":\"2023-06-19T10:58:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\"},\"wordCount\":669,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\",\"name\":\"Microservice using Docker stack deploy - WildFly, Java EE and Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-02-03T18:46:36+00:00\",\"dateModified\":\"2023-06-19T10:58:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microservice using Docker stack deploy &#8211; WildFly, Java EE and Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Microservice using Docker stack deploy - WildFly, Java EE and Couchbase - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"Microservice using Docker stack deploy - WildFly, Java EE and Couchbase","og_description":"There is plenty of material on\u00a0microservices, just google it! I gave a presentation on\u00a0refactoring monolith to microservices at Devoxx Belgium a couple of years back and it has\u00a0good reviews: This blog will show how\u00a0Docker simplifies creation and shutting down of [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-02-03T18:46:36+00:00","article_modified_time":"2023-06-19T10:58:42+00:00","author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Microservice using Docker stack deploy &#8211; WildFly, Java EE and Couchbase","datePublished":"2017-02-03T18:46:36+00:00","dateModified":"2023-06-19T10:58:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/"},"wordCount":669,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/","name":"Microservice using Docker stack deploy - WildFly, Java EE and Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-02-03T18:46:36+00:00","dateModified":"2023-06-19T10:58:42+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/microservice-using-docker-stack-deploy-wildfly-javaee-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Microservice using Docker stack deploy &#8211; WildFly, Java EE and Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta es vicepresidente de promoci\u00f3n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m\u00e1s de 10 a\u00f1os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa\u00f1as de marketing y programas. Anteriormente dirigi\u00f3 equipos de ingenier\u00eda en Sun y es miembro fundador del equipo Java EE. Gupta es autor de m\u00e1s de 2.000 entradas de blog sobre tecnolog\u00eda. Tiene una amplia experiencia como conferenciante en m\u00e1s de 40 pa\u00edses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a\u00f1os consecutivos. Gupta tambi\u00e9n fund\u00f3 el cap\u00edtulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci\u00f3n tecnol\u00f3gica entre los ni\u00f1os. Autor de varios libros sobre tecnolog\u00eda, \u00e1vido corredor, trotamundos, campe\u00f3n de Java, l\u00edder de JUG, miembro del Dream Team de NetBeans y capit\u00e1n de Docker, es f\u00e1cilmente accesible en @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","author_category":"","last_name":"Gupta","first_name":"Arun","job_title":"","user_url":"","description":"Arun Gupta es vicepresidente de promoci\u00f3n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m\u00e1s de 10 a\u00f1os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa\u00f1as de marketing y programas. Anteriormente dirigi\u00f3 equipos de ingenier\u00eda en Sun y es miembro fundador del equipo Java EE.\r\n\r\nGupta es autor de m\u00e1s de 2.000 entradas de blog sobre tecnolog\u00eda. Tiene una amplia experiencia como conferenciante en m\u00e1s de 40 pa\u00edses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a\u00f1os consecutivos. Gupta tambi\u00e9n fund\u00f3 el cap\u00edtulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci\u00f3n tecnol\u00f3gica entre los ni\u00f1os. Autor de varios libros sobre tecnolog\u00eda, \u00e1vido corredor, trotamundos, campe\u00f3n de Java, l\u00edder de JUG, miembro del Dream Team de NetBeans y capit\u00e1n de Docker, es f\u00e1cilmente accesible en @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2523"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2523\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2523"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}