{"id":24782218,"url":"https://github.com/pblnahu1/app-dockerized","last_synced_at":"2026-04-09T07:34:23.110Z","repository":{"id":274562877,"uuid":"923070990","full_name":"pblnahu1/app-dockerized","owner":"pblnahu1","description":"Aplicación React con Node para probar Docker","archived":false,"fork":false,"pushed_at":"2025-01-28T03:00:22.000Z","size":59,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-28T03:29:05.619Z","etag":null,"topics":["docker-compose","dockerfile","nodejs","react","typescript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pblnahu1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-27T15:42:08.000Z","updated_at":"2025-01-28T03:00:25.000Z","dependencies_parsed_at":"2025-01-28T03:29:08.161Z","dependency_job_id":"97ce2c5b-6213-4d5d-98de-b661798bd0b9","html_url":"https://github.com/pblnahu1/app-dockerized","commit_stats":null,"previous_names":["pblnahu1/app-dockerized"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pblnahu1%2Fapp-dockerized","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pblnahu1%2Fapp-dockerized/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pblnahu1%2Fapp-dockerized/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pblnahu1%2Fapp-dockerized/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pblnahu1","download_url":"https://codeload.github.com/pblnahu1/app-dockerized/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245214692,"owners_count":20578838,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-compose","dockerfile","nodejs","react","typescript"],"created_at":"2025-01-29T11:16:33.508Z","updated_at":"2025-12-30T23:28:45.819Z","avatar_url":"https://github.com/pblnahu1.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node APP - Dockerizado (básico)\n\nEl proyecto tiene dos partes\n- **Backend (server)**: Un servidor Node.js que muestra un mensaje si está corriendo en el puerto establecido.\n- **Frontend (client)**: Una aplicación frontend construida con React y TypeScript (un simple h1, no es la gran cosa).\n\nLa aplicación usa **Docker** para ejecutar ambos servicios (cliente y servidor) en contenedores.\n\n## Requisitos\n\nAntes de empezar, tenés que tener instalado:\n- **Node.js y npm**: [Descargar Node.js](https://nodejs.org/)\n- **Docker Compose** (incluye Docker Desktop): [Descargar Docker](http://www.docker.com/products/docker-desktop)\n- **Git**: Para clonar el repositorio.\n\n## Opción 1. Ejecutar con Docker\n\nPodés usar Docker para ejecutar ambos servicios a la vez en contenedores.\n\n### 1. Cloná el repositorio\n```bash\ngit clone https://github.com/pblnahu1/app-dockerized.git\ncd app-dockerized\n```\n\n### 2. Construir y Levantar los Contenedores\nUsa Docker Compose para construir las imágenes y levantar los contenedores del cliente y del servidor:\n```bash\ndocker-compose up --build\n```\nEsto:\n- Construirá las imagenes para el servidor y el cliente.\n- Levantará los contenedores para ambos servicios.\n\n### 3. Acceder a la aplicación\n- Cliente estará en `http://localhost:5173`\n- Servidor estará en `http://localhost:3000`\n\n### 4. Para detener los contenedores\n```bash\ndocker-compose down\n```\n\n### Debería verse algo así\n![Salida que debería verse en la terminal luego de ejecutar los comandos de Docker](ejecucion.png)\n\n### ¿Por qué `http://0.0.0.0:3000`?\nEn el contexto de contenedores como Docker, 0.0.0.0 significa que el servidor está escuchando en **todas las interfaces de red disponibles dentro del contenedor.**\n1. Flexibilidad en los contenedores:\n    - Cuando configurás un servidor para escuchar en `0.0.0.0`, le estás diciendo que acepte conexiones desde cualquier dirección IP que tenga acceso al contenedor.\n    - Esto es especialmente útil dentro de Docker porque el contenedor tiene su propia red interna.\n2. Mapeo de puertos:\n    - En Docker, mapeas puertos entre el contenedor y el host (por ejemplo, `3000:3000` en nuestro caso). Esto significa que las conexiones externas llegan al contenedor a través de ese puerto.\n    - Si el servidor solo escucha en `localhost` o `127.0.0.1` dentro del contenedor, **solo aceptará conexiones internas al contenedor**, y no se podrá acceder al servidor desde fuera (como desde el navegador).\n3. Comportamiento predeterminado de Node.js:\n    - Si no especificas `0.0.0.0` y usás `localhost` o `127.0.0.1`, Node.js estará disponible **solo dentro del contenedor**, lo que hará que no puedas acceder desde tu máquina anfitriona (host).\n4. ¿Cómo se traduce al usar el navegador?\n    - Aunque el servidor está configurado para escuchar en `0.0.0.0` dentro del contenedor, **Docker hace el trabajo de mapearlo al host.** Por eso, desde tu navegador siempre accedes al puerto:\n        - `http://localhost:3000`: Esto funciona porque Docker mapea el puerto `3000` del contenedor al puerto `3000` de tu host.\n    - Dentro del contenedor `0.0.0.0:3000` -\u003e Mapeo de Docker -\u003e Host: `localhost:3000`\n5. ¿Si uso `localhost` en vez de `0.0.0.0` en mi servidor?\n    - Si configurás tu servidor para que escuche solo en `localhost`:\n        - Dentro del contenedor: El servidor funcionará bien y responderá a las conexiones internas (por ejemplo, desde otro proceso en el mismo contenedor).\n        - Desde fuera del contenedor (por ejemplo, el navegador): **No funcionará**, porque el contenedor no permitirá conexiones externas hacia `localhost`.\n    - Por eso, siempre que trabajes con Docker, es mejor usar `0.0.0.0` para asegurarte de que el servidor está accesible desde fuera del contenedor.\n6. ¿Qué pasa si no uso Docker?\n    - Si no usás Docker y ejecutás tu servidor localmente:\n        - `localhost` o `127.0.0.1` funcionan perfectamente, ya que no necesitás preocuparte por redes internas de contenedores.\n\n### La red `app-network` y la configuración `0.0.0.0` trabajan en conjunto para permitir que los servicios dentro de los contenedores puedan comunicarse y también que el host pueda acceder a ellos.\n\n1. ¿Qué hace `app-network`?\nCuando definís la red `app-network` en tu archivo `docker-compose.yml`, estás creando una red de Docker específica donde los contenedores (en este caso, server y client) pueden comunicarse directamente entre sí, como si estuvieran conectados a una misma red local.\n**Ventajas de una red personalizada (app-network):**\n    - **Aislamiento**: Los servicios en `app-network` están aislados de otros contenedores que no forman parte de esta red.\n    - **Resolución de nombres**: Los contenedores pueden comunicarse entre sí usando los nombres de sus servicios (por ejemplo, el cliente puede comunicarse con el servidor simplemente usando `http://server:3000`).\n2. ¿Qué hace `0.0.0.0`?\nPor defecto, cuando un servidor (como Node.js) está configurado para escuchar en `0.0.0.0`, acepta conexiones desde cualquier interfaz de red que esté disponible:\n    - **Desde dentro del contenedor**: Esto permite que otros contenedores en la misma red (por ejemplo, client) puedan acceder al servidor.\n    - **Desde fuera del contenedor (el host)**: Cuando mapeas el puerto con Docker (por ejemplo, `3000:3000`), `0.0.0.0` asegura que el servidor acepte conexiones externas desde tu host.\n3. ¿Cómo trabajan `app-network` y `0.0.0.0` juntos?\n    - **Comunicación entre contenedores (red interna)**:\n        - Gracias a `app-network`, los contenedores pueden encontrarse usando los nombres de los servicios (server y client) en lugar de direcciones IP.\n        - Por ejemplo, el cliente puede acceder al servidor con http://server:3000.\n    - **Acceso desde el host**:\n        - 0.0.0.0 asegura que el servidor escuche en todas las interfaces de red, incluyendo la interfaz creada por Docker para mapear puertos.\n        - Así, podés acceder al servidor desde tu navegador en http://localhost:3000 (gracias al mapeo 3000:3000).\n4. **Conclusión**\n    - La red `app-network` asegura la comunicación interna entre contenedores de forma sencilla y controlada.\n    - `0.0.0.0` asegura que el servidor esté disponible tanto para otros contenedores como para tu computadora local.\n\nAmbas configuraciones se complementan y son esenciales para que el proyecto funcione de manera flexible dentro de Docker.\n\n\n## Opción 2. Ejecutar sin Docker (localmente)\nPodés ejecutarlo sin usar Docker pero debés tener abierta dos terminales para ambos servicios.\n\n### 1. Cloná el repositorio\n```bash\ngit clone https://github.com/pblnahu1/app-dockerized.git\ncd app-dockerized\n```\n\n### 2. Instalar dependencias para ambos servicios\n```bash\ncd server\nnpm install\n\ncd client \nnpm install\n```\n\no desde el root, se instalará todo con un solo comando (igual verificar):\n\n```bash\nnpm run install\n```\n\n### 3. Ejecución\n```bash\ncd server\nnpm run dev\n\ncd client\nnpm run dev\n```\n\n# Autor: [Pablo Torrez](https://github.com/pblnahu1)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpblnahu1%2Fapp-dockerized","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpblnahu1%2Fapp-dockerized","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpblnahu1%2Fapp-dockerized/lists"}