{"id":1174,"date":"2026-03-11T15:20:25","date_gmt":"2026-03-11T18:20:25","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1174"},"modified":"2026-03-11T20:02:22","modified_gmt":"2026-03-11T23:02:22","slug":"docker-compose-guia-completa-multiples-contenedores","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/","title":{"rendered":"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano"},"content":{"rendered":"\n<p class=\"intro-destacado\">Ten\u00eda un script Bash con 8 comandos <code>docker run<\/code>. Cada vez que alguien del equipo necesitaba levantar el entorno de desarrollo, le mandaba el script por Slack y rezaba para que no hubiera cambiado nada desde la \u00faltima vez. Un d\u00eda un compa\u00f1ero me mostr\u00f3 su <code>docker-compose.yml<\/code>. Nunca m\u00e1s volv\u00ed al script.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es Docker Compose?<\/h2>\n\n\n\n<p>Docker Compose es una herramienta para definir y ejecutar aplicaciones multi-contenedor usando un archivo YAML. En lugar de recordar 8 comandos <code>docker run<\/code> con todos sus flags, defin\u00eds todos los servicios, redes y vol\u00famenes en un solo archivo versionado. Un comando levanta todo; otro lo baja.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El docker-compose.yml completo: .NET + PostgreSQL + Redis + Nginx<\/h2>\n\n\n\n<p>Este es el stack que uso como base en mis proyectos. Cada servicio tiene su rol claro:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">version: '3.8'\n\nservices:\n  # Proxy inverso - \u00fanico punto de entrada\n  nginx:\n    image: nginx:1.25-alpine\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\/nginx\/nginx.conf:\/etc\/nginx\/nginx.conf:ro\n      - .\/nginx\/certs:\/etc\/nginx\/certs:ro\n    depends_on:\n      - api\n    restart: unless-stopped\n\n  # API .NET 8\n  api:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    environment:\n      - ASPNETCORE_ENVIRONMENT=Production\n      - ConnectionStrings__Default=Host=postgres;Database=miapp;Username=app;Password=${DB_PASSWORD}\n      - Redis__ConnectionString=redis:6379\n    depends_on:\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_started\n    restart: unless-stopped\n    # Sin -p: solo accesible internamente a trav\u00e9s de nginx\n\n  # Base de datos PostgreSQL\n  postgres:\n    image: postgres:16-alpine\n    environment:\n      POSTGRES_DB: miapp\n      POSTGRES_USER: app\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - postgres-data:\/var\/lib\/postgresql\/data\n      - .\/sql\/init.sql:\/docker-entrypoint-initdb.d\/init.sql:ro\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U app -d miapp\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n    restart: unless-stopped\n\n  # Cache Redis\n  redis:\n    image: redis:7-alpine\n    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}\n    volumes:\n      - redis-data:\/data\n    restart: unless-stopped\n\nvolumes:\n  postgres-data:\n  redis-data:\n\nnetworks:\n  default:\n    name: miapp-network<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">El archivo .env: secretos fuera del YAML<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\"># .env (en .gitignore - nunca en el repo)\nDB_PASSWORD=password-super-seguro-aqui\nREDIS_PASSWORD=otro-password-seguro<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Los comandos que uso todos los d\u00edas<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\"># Levantar todo en background\ndocker compose up -d\n\n# Levantar y ver los logs mientras arranca\ndocker compose up\n\n# Levantar solo un servicio (y sus dependencias)\ndocker compose up -d api\n\n# Ver estado de los servicios\ndocker compose ps\n\n# Logs de todos los servicios\ndocker compose logs -f\n\n# Logs de un servicio espec\u00edfico\ndocker compose logs -f api\n\n# Ejecutar comando en un servicio\ndocker compose exec api bash\ndocker compose exec postgres psql -U app -d miapp\n\n# Bajar todo (mantiene vol\u00famenes)\ndocker compose down\n\n# Bajar y eliminar vol\u00famenes (\u00a1CUIDADO en producci\u00f3n!)\ndocker compose down -v\n\n# Rebuild y restart de un servicio\ndocker compose up -d --build api\n\n# Escalar un servicio (m\u00faltiples instancias)\ndocker compose up -d --scale api=3<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Health checks: que Compose espere a que los servicios est\u00e9n listos<\/h2>\n\n\n\n<p>Uno de los problemas cl\u00e1sicos: la API arranca antes que la base de datos y falla al conectar. La soluci\u00f3n est\u00e1 en los <code>healthcheck<\/code> y <code>depends_on<\/code> con condici\u00f3n, como hice en el ejemplo de Postgres. Compose espera hasta que el healthcheck pase antes de arrancar los servicios dependientes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\"># Verificar el healthcheck de un servicio\ndocker compose ps\n# NAME              STATUS\n# miapp-postgres-1  healthy   \u2190 Postgres super\u00f3 el healthcheck\n# miapp-api-1       running   \u2190 API arranc\u00f3 despu\u00e9s<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">El antes y el despu\u00e9s<\/h2>\n\n\n\n<p>Mi script Bash antes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\"># &#x274c; Lo que ten\u00eda antes (8 l\u00edneas que siempre ten\u00eda que recordar actualizar)\ndocker network create miapp\ndocker run -d --name postgres --network miapp -e POSTGRES_PASSWORD=... ...\ndocker run -d --name redis --network miapp ...\ndocker run -d --name api --network miapp -e DB_HOST=postgres ...\ndocker run -d --name nginx --network miapp -p 80:80 ...\n# etc...<\/code><\/pre>\n\n\n\n<p>Ahora:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\"># &#x2705; Todo el stack en un comando\ndocker compose up -d<\/code><\/pre>\n\n\n\n<p>El archivo est\u00e1 en el repo. Cualquier miembro del equipo puede clonar y levantar el entorno completo en un comando. Sin documentaci\u00f3n de \u00abc\u00f3mo levantar el entorno\u00bb. Sin scripts que se desactualizan. El <code>docker-compose.yml<\/code> <em>es<\/em> la documentaci\u00f3n.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><em>\u2190 <a href=\"https:\/\/maurobernal.com.ar\/blog\/blog\/kubernetes\/redes-docker-networking-bridge-host-contenedores-comunicacion\/\">Art\u00edculo anterior: Redes en Docker<\/a> | <strong>Serie Docker Completo<\/strong> | Pr\u00f3ximo: Entornos consistentes \u2192<\/em><\/p>\n\n\n<hr class=\"wp-block-separator\"\/>\n<p><em>\u2190 <a href=\"https:\/\/maurobernal.com.ar\/blog\/blog\/kubernetes\/redes-docker-networking-bridge-host-contenedores-comunicacion\/\">Art\u00edculo anterior: Redes en Docker: de &#8216;no puedo conectar mis contenedores&#8217; a entenderlo de verdad<\/a> | <strong>Serie Docker Completo<\/strong> | Pr\u00f3ximo: <a href=\"https:\/\/maurobernal.com.ar\/blog\/blog\/kubernetes\/docker-entornos-desarrollo-consistentes-dev-prod\/\">C\u00f3mo uso Docker para tener el mismo entorno en dev, test y producci\u00f3n \u2192<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo Docker Compose reemplaza scripts bash con 8 docker run. Stack completo con .NET, PostgreSQL, Redis y Nginx. Comandos, health checks y buenas pr\u00e1cticas reales.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[233],"tags":[260,241,242,240,259,256],"class_list":["post-1174","post","type-post","status-publish","format-standard","hentry","category-kubernetes","tag-compose","tag-contenedores","tag-devops","tag-docker","tag-docker-compose","tag-networking"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano &#183; devops Mauro Bernal<\/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:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo Docker Compose reemplaza scripts bash con 8 docker run. Stack completo con .NET, PostgreSQL, Redis y Nginx. Comandos, health checks y buenas pr\u00e1cticas reales.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-11T18:20:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-11T23:02:22+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano\",\"datePublished\":\"2026-03-11T18:20:25+00:00\",\"dateModified\":\"2026-03-11T23:02:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/\"},\"wordCount\":313,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"compose\",\"contenedores\",\"devops\",\"docker\",\"docker-compose\",\"networking\"],\"articleSection\":[\"Kubernetes\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/\",\"name\":\"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-11T18:20:25+00:00\",\"dateModified\":\"2026-03-11T23:02:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-compose-guia-completa-multiples-contenedores\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano &#183; devops Mauro Bernal","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:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/","og_locale":"es_ES","og_type":"article","og_title":"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano &#183; devops Mauro Bernal","og_description":"C\u00f3mo Docker Compose reemplaza scripts bash con 8 docker run. Stack completo con .NET, PostgreSQL, Redis y Nginx. Comandos, health checks y buenas pr\u00e1cticas reales.","og_url":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-11T18:20:25+00:00","article_modified_time":"2026-03-11T23:02:22+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano","datePublished":"2026-03-11T18:20:25+00:00","dateModified":"2026-03-11T23:02:22+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/"},"wordCount":313,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["compose","contenedores","devops","docker","docker-compose","networking"],"articleSection":["Kubernetes"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/","url":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/","name":"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-11T18:20:25+00:00","dateModified":"2026-03-11T23:02:22+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/docker-compose-guia-completa-multiples-contenedores\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Compose: el d\u00eda que dej\u00e9 de levantar contenedores a mano"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1174"}],"version-history":[{"count":4,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1174\/revisions"}],"predecessor-version":[{"id":1249,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1174\/revisions\/1249"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}