{"id":18244713,"url":"https://github.com/devdevi/docker_node_platzi","last_synced_at":"2025-04-08T18:48:18.139Z","repository":{"id":44478421,"uuid":"220486653","full_name":"devdevi/docker_node_platzi","owner":"devdevi","description":null,"archived":false,"fork":false,"pushed_at":"2022-12-10T08:16:58.000Z","size":181,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-14T14:53:33.918Z","etag":null,"topics":["docker","node"],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devdevi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-08T14:45:14.000Z","updated_at":"2019-11-08T17:27:32.000Z","dependencies_parsed_at":"2023-01-26T04:46:55.832Z","dependency_job_id":null,"html_url":"https://github.com/devdevi/docker_node_platzi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fdocker_node_platzi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fdocker_node_platzi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fdocker_node_platzi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fdocker_node_platzi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devdevi","download_url":"https://codeload.github.com/devdevi/docker_node_platzi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247909108,"owners_count":21016475,"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","node"],"created_at":"2024-11-05T09:17:24.428Z","updated_at":"2025-04-08T18:48:18.120Z","avatar_url":"https://github.com/devdevi.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Curso de Docker en Platzi\n\nÉsta es una aplicación de ejemplo para el curso de Docker de Platzi por Guido\nVilariño.\n\nEncuentra más información en https://platzi.com, suscríbete al curso y aprende\na usar Docker de manera profesional.\n\n\n### NETWORKING DOCKER: Colaboración entre contenedores\n``` \ndocker network ls\n```\n    crear una red agregamos el --flag attachable: Permite que contenedores en el futuro se conecten a esta red.\n```\ndocker network create --attachable \u003cname\u003e\n```\nCreamos los contenedores de base de datos\n```\ndocker run -d --name db mongo\n```\nconectamos el contenedor a la red\n```\ndocker network connect \u003credname\u003e db\n```\nMiramos que contenedores tenemos en nuestra red\n```\ndocker network inspect \u003credname\u003e\n```\nCorremos contenedor de la aplicación\n```\ndocker run  -d --name app - p 3000:3000 --env MONGO_URL=mongodb://db:27017/test \u003cimagename\u003e\n```\n--flag: --env : variable de entorno que recibe el index.js\nsi dos contenedores se están en el mismo networking pueden verse entre si utilizando como hostname el nombre del contenedor como\n\"la dirección de la computadora\"\n\n\n### DOCKER COMPOSE : TODO EN UNO\nnos permite describir de forma declarativa la arquitectura de nuestra aplicación,usando el composefile (docker-compose.yml)\nBorrarmos todos nuestros contendores\n```\ndocker rm -f $(docker ps -aq)\n```\n```\ndocker network rm \u003credname\u003e\n```\n*La sintaxis yml* es muy usada en el mundo de python,\npara describir como queremos que sea nuestra app. esto básicamente indica que debería soportar docker compose para construir nuestra app.\n\n\n```\nversion: \"3\"\n\nservices:\n  app:\n    image: platziapp\n    environment:\n      MONGO_URL: \"mongodb://db:27017/test\"\n    depends_on:\n      - db\n    ports:\n      - \"3000:3000\"\n\n  db:\n    image: mongo\n\n```\n- **services**: componentes que sirven a la totalidad de la aplicación\nlos servicios pueden tener mas de un contenedor\nen el ejemplo tenemos dos servicios:\napp y db\n- **image**: Los contenedores de este servicios van a ser iniciados a partir de la imagen mongo\n- **enviroment**: Variables de entorno\n- **depends_on**: Este servicio depende de otros servicios, quiere decir que. Inicia el servicio solo cuando el servicio del el cual depende esta inicializado.\ngarantiza que el componente esta creado pero no que esta corriendo, no es para controlar el orden en el cual inician los contenedores.\n\n```\ndocker-compose up\n```\nya no tenemos que crear una network docker-compose la crea y hace la conexión el mismo.\n```\ndocker-compose up -d\n```\ncorre el compose file pero no muestra el output\n```\ndocker-compose ps\n```\ndocker compose facilita el uso de docker, por defecto toma el nombre del directorio donde estamos parados y lo mismo pasa con el network\n```\n    Name                  Command               State           Ports\n------------------------------------------------------------------------------\ndocker_app_1   docker-entrypoint.sh npx n ...   Up      0.0.0.0:3000-\u003e3000/tcp\ndocker_db_1    docker-entrypoint.sh mongod      Up      27017/tcp\n\nNETWORK ID          NAME                DRIVER              SCOPE\n866bfe2347e0        bridge              bridge              local\n9603e0abcecb        docker_default      bridge              local\n```\n```\ndocker-compose logs app\n```\nVer los logs del servicio especifico\n```\ndocker-compose exec app bash\n```\ningresar al contenedor de la aplicación , nos ahorramos el comando -it\n```\nls -lac\n```\n```\ntotal 144\ndrwxr-xr-x   1 root root   4096 Nov  8 14:41 .\ndrwxr-xr-x   1 root root   4096 Nov  8 14:41 ..\n-rw-r--r--   1 root root   1072 Nov  8 14:41 LICENSE\ndrwxr-xr-x   2 root root   4096 Nov  8 14:41 build\n-rw-r--r--   1 root root    194 Nov  8 14:41 docker-compose.yml\n-rw-r--r--   1 root root    561 Nov  8 14:41 index.js\ndrwxr-xr-x 242 root root  12288 Nov  8 14:41 node_modules\n-rw-r--r--   1 root root 101113 Nov  8 14:41 package-lock.json\n-rw-r--r--   1 root root    663 Nov  8 14:41 package.json\ndrwxr-xr-x   2 root root   4096 Nov  8 14:41 test\n```\n**Eliminamos todos los servicios, todos los contenedores todo**\n```\ndocker-compose down\n```\n```\nStopping docker_app_1 ... done\nStopping docker_db_1  ... done\nRemoving docker_app_1 ... done\nRemoving docker_db_1  ... done\n```\n# Docker-compose como herramienta de desarrollo de sofware\nTrabajar como si estuviera trabajando nativo\n**build**: Docker es inteligente y si en ese contexto de build encuentra un Dockerfile lo va a usar\n```\nversion: \"3\"\n\nservices:\n  app:\n    build: .\n    environment:\n      MONGO_URL: \"mongodb://db:27017/test\"\n    depends_on:\n      - db\n    ports:\n      - \"3000:3000\"\n\n  db:\n    image: mongo\n```\n**hacer un flow**\n```\ndocker-compose logs -f app\n```\n```\napp_1  | [nodemon] 1.18.6\napp_1  | [nodemon] to restart at any time, enter `rs`\napp_1  | [nodemon] watching: *.*\napp_1  | [nodemon] starting `node index.js`\napp_1  | Server listening on port 3000!\napp_1  | [nodemon] 1.18.6\napp_1  | [nodemon] to restart at any time, enter `rs`\napp_1  | [nodemon] watching: *.*\napp_1  | [nodemon] starting `node index.js`\napp_1  | Server listening on port 3000!\n```\n```\n    volumes:\n      # donde estamos: a donde queremos ir\n      # Lo que queremos que sobre escriba\n      - .:/usr/src\n      # lo que queremos que no sobre escriba\n      - /usr/src/node_modules\n\n```\n**un servicio es uno o mas contenedores**\n### SIMULAR UN SERVICIO DE MULTIPLES CONTENEDORES CLUSTER\n\n```\ndocker-compose ps\n```\n```\n    Name                  Command               State           Ports\n------------------------------------------------------------------------------\ndocker_app_1   docker-entrypoint.sh npx n ...   Up      0.0.0.0:3000-\u003e3000/tcp\ndocker_db_1    docker-entrypoint.sh mongod      Up      27017/tcp\n```\n```\ndocker-compose scale app=4\nWARNING: The scale command is deprecated. Use the up command with the --scale flag instead.\nWARNING: The \"app\" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.\nStarting docker_app_1 ... done\nCreating docker_app_2 ... error\nCreating docker_app_3 ... error\nCreating docker_app_4 ... error\n\nERROR: for docker_app_4  Cannot start service app: driver failed programming external connectivity on endpoint docker_app_4 (c0e7f94c5d8f6bbff4d6ed47ad620809fa5fcd397afc206fafc7d167a2fb8a8e): Bind for 0.0.0.0:3000 failed: port is already allocated\n\nERROR: for docker_app_3  Cannot start service app: driver failed programming external connectivity on endpoint docker_app_3 (4acfc8eb10b4794aa1b40326767c046453d02a6fd636e73ffe60dce2633fce3d): Bind for 0.0.0.0:3000 failed: port is already allocated\n\nERROR: for docker_app_2  Cannot start service app: driver failed programming external connectivity on endpoint docker_app_2 (0d72167990e7fcf5a088b7d78ef585eff87d6da71b6e3b7e166e34a653daf42a): Bind for 0.0.0.0:3000 failed: port is already allocated\nERROR: Cannot start service app: driver failed programming external connectivity on endpoint docker_app_4 (c0e7f94c5d8f6bbff4d6ed47ad620809fa5fcd397afc206fafc7d167a2fb8a8e): Bind for 0.0.0.0:3000 failed: port is already allocated\n```\n- **PASA QUE EN NUESTRO PUERTO 3000 YA ESTA OCUPADO ENTOONCWES LO QUE HAGO ES ASIGNAR UN RANGO DE PUERTO ***\n```\n  ports:\n      - \"3000-3010:3000\"\n ```\n```\nStarting docker_app_1 ... done\nCreating docker_app_2 ... done\nCreating docker_app_3 ... done\nCreating docker_app_4 ... done\n```\n```\n    Name                  Command               State           Ports\n------------------------------------------------------------------------------\ndocker_app_1   docker-entrypoint.sh npx n ...   Up      0.0.0.0:3000-\u003e3000/tcp\ndocker_app_2   docker-entrypoint.sh npx n ...   Up      0.0.0.0:3003-\u003e3000/tcp\ndocker_app_3   docker-entrypoint.sh npx n ...   Up      0.0.0.0:3002-\u003e3000/tcp\ndocker_app_4   docker-entrypoint.sh npx n ...   Up      0.0.0.0:3001-\u003e3000/tcp\ndocker_db_1    docker-entrypoint.sh mongod      Up      27017/tcp\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevdevi%2Fdocker_node_platzi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevdevi%2Fdocker_node_platzi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevdevi%2Fdocker_node_platzi/lists"}