CursosEmpresasBlogLiveConfPrecios

Entendiendo el cache de layers para estructurar correctamente tus imágenes

Clase 18 de 25 • Fundamentos de Docker 2018

Contenido del curso

Introducción

  • 1
    Qué aprenderás sobre Docker

    Qué aprenderás sobre Docker

    03:11 min
  • 2
    Problemáticas del desarrollo de software profesional

    Problemáticas del desarrollo de software profesional

    06:49 min
  • 3
    Qué es Docker: containarization vs virtualization

    Qué es Docker: containarization vs virtualization

    00:00 min

Primeros pasos

  • 4
    Cómo instalar Docker

    Cómo instalar Docker

    10:13 min
  • 5
    Primeros pasos: Hola mundo y Docker Engine

    Primeros pasos: Hola mundo y Docker Engine

    03:44 min
  • 6
    Contenedores

    Contenedores

    04:54 min

Aprendiendo a usar los contenedores

  • 7
    Explorar el estado de docker

    Explorar el estado de docker

    08:42 min
  • 8
    El modo interactivo

    El modo interactivo

    08:04 min
  • 9
    Ciclo de vida de un contenedor

    Ciclo de vida de un contenedor

    07:34 min
  • 10
    Exponiendo contenedores al mundo exterior

    Exponiendo contenedores al mundo exterior

    08:20 min
  • 11
    Datos en Docker

    Datos en Docker

    10:34 min
  • 12
    Datos con Docker: Volumes

    Datos con Docker: Volumes

    08:51 min

Imágenes

  • 13
    Conceptos fundamentales de Docker: imágenes

    Conceptos fundamentales de Docker: imágenes

    09:54 min
  • 14
    Construyendo nuestras propias imágenes

    Construyendo nuestras propias imágenes

    09:34 min
  • 15
    Comprendiendo el sistema de capas

    Comprendiendo el sistema de capas

    07:54 min

Desarrollando con Docker

  • 16
    Usando docker para desarrollar aplicaciones

    Usando docker para desarrollar aplicaciones

    06:57 min
  • 17
    Reto

    Reto

    00:31 min
  • 18
    Entendiendo el cache de layers para estructurar correctamente tus imágenes

    Entendiendo el cache de layers para estructurar correctamente tus imágenes

    Viendo ahora
  • 19
    Docker networking: colaboración entre contenedores

    Docker networking: colaboración entre contenedores

    08:21 min

Docker compose

  • 20
    Docker-compose: la herramienta todo-en-uno

    Docker-compose: la herramienta todo-en-uno

    08:38 min
  • 21
    Trabajando con docker-compose

    Trabajando con docker-compose

    06:41 min
  • 22
    Docker-compose como herramienta de desarrollo

    Docker-compose como herramienta de desarrollo

    14:53 min

Docker Avanzado

  • 23
    Conceptos para imágenes productivas

    Conceptos para imágenes productivas

    11:17 min
  • 24
    Manejando docker desde un contenedor

    Manejando docker desde un contenedor

    09:41 min

Cierre

  • 25
    Cierre del curso

    Cierre del curso

    01:19 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Comentarios

      TeamQA

      TeamQA

      student•
      hace 7 años
        Julio Hernandez Gorocica

        Julio Hernandez Gorocica

        student•
        hace 7 años
        Moisés Cedeño

        Moisés Cedeño

        student•
        hace 7 años
      Carlos Andrés Charris S

      Carlos Andrés Charris S

      student•
      hace 7 años
      Leonidas Menendez

      Leonidas Menendez

      student•
      hace 7 años
        Mau Munguia

        Mau Munguia

        student•
        hace 7 años
        Jorge Cardoso

        Jorge Cardoso

        student•
        hace 7 años
      Oscar Rodrigo Leon Mojica

      Oscar Rodrigo Leon Mojica

      student•
      hace 6 años
        JOSE LUIS AVALOS IZAGUIRRE

        JOSE LUIS AVALOS IZAGUIRRE

        student•
        hace 6 años
        Oscar Rodrigo Leon Mojica

        Oscar Rodrigo Leon Mojica

        student•
        hace 6 años
      Kirlled Anderson Araque

      Kirlled Anderson Araque

      student•
      hace 7 años
        Freddy Dagner Encinas Manjon

        Freddy Dagner Encinas Manjon

        student•
        hace 7 años
        Freddy Dagner Encinas Manjon

        Freddy Dagner Encinas Manjon

        student•
        hace 7 años
      Creck Brayan Mauri Pastor Paredes

      Creck Brayan Mauri Pastor Paredes

      student•
      hace 7 años
        Leylon Ocaña Sanchez

        Leylon Ocaña Sanchez

        student•
        hace 7 años
      Emanuel Alejandro Mamani

      Emanuel Alejandro Mamani

      student•
      hace 7 años
      Luis Felipe Vanegas Pill

      Luis Felipe Vanegas Pill

      student•
      hace 6 años
        Raúl Bauzan Robles

        Raúl Bauzan Robles

        student•
        hace 6 años
        Rodolfo Ferreira Casetti

        Rodolfo Ferreira Casetti

        student•
        hace 6 años
      Axel David Espinosa Meneses

      Axel David Espinosa Meneses

      student•
      hace 6 años
        Jhonatan Holguín

        Jhonatan Holguín

        student•
        hace 6 años
      Christian Ruiz

      Christian Ruiz

      student•
      hace 6 años
      José Emanuel Osorio Vázquez

      José Emanuel Osorio Vázquez

      student•
      hace 6 años
        Super team

        Super team

        student•
        hace 6 años
        Ivan Dario Quintero Rios

        Ivan Dario Quintero Rios

        student•
        hace 5 años
      Hinder Adrian Alvarez Perlaza

      Hinder Adrian Alvarez Perlaza

      student•
      hace 6 años
        William Schnaider Torres Bermon

        William Schnaider Torres Bermon

        student•
        hace 6 años
      Nicolás Neira Navarrete

      Nicolás Neira Navarrete

      student•
      hace 6 años
      Usuario anónimo

      Usuario anónimo

      user•
      hace 7 años
        Carlos Javier Bazan Huaman

        Carlos Javier Bazan Huaman

        student•
        hace 6 años
      Felipe Jurado Murillo

      Felipe Jurado Murillo

      student•
      hace 6 años
      Rafael Martínez

      Rafael Martínez

      student•
      hace 6 años
      Ever Alfredo Sorto Ayala

      Ever Alfredo Sorto Ayala

      student•
      hace 5 años
        Fernando Hernandez

        Fernando Hernandez

        student•
        hace 5 años
        Carmen Santiago

        Carmen Santiago

        student•
        hace 5 años
      Ever Alfredo Sorto Ayala

      Ever Alfredo Sorto Ayala

      student•
      hace 5 años
        Roger Carlos Ariel Alba

        Roger Carlos Ariel Alba

        student•
        hace 5 años
      Alejandro Valenzuela

      Alejandro Valenzuela

      student•
      hace 6 años
        Gonzalo Amador Hernández

        Gonzalo Amador Hernández

        student•
        hace 5 años
      Don riata Sabrozon

      Don riata Sabrozon

      student•
      hace 6 años
        Juan Castro

        Juan Castro

        teacher•
        hace 6 años

      si alguien tiene un problema con este tipo error [nodemon] starting node index.js internal/modules/cjs/loader.js:638 throw err; ^ la solucion que realice fueron las siguientes instrucciones 1 - npm install 2 - npm audit fix 3 - docker build -t ubuntu:platzi . 4 - docker run --rm -p 3000:3000 -v ${PWD}:/usr/src platziapp esta manera me funciono el servicio

      Mismo error, si me sirvió. ¡Muchas gracias!

      Muchas gracias, me funcionó con tus pasos.

      para mejorar el cache y la velocidad de construcción de nuestra imagen es recomendable saber organizar y distribuir el comando copy

      FROM node:10 COPY ["package.json", "package-lock.json", "/usr/src/"] # [<ubicacion de los archivos a copiar>, <destino donde van a quedar los archivos copiados>] WORKDIR /usr/src # es similar al comando cd, WORKDIR <entrar en la siguiente ruta> RUN npm install # RUN ejecuta el comando npm install COPY [".", "/usr/src/"] # [<ubicacion de los archivos a copiar>, <destino donde van a quedar los archivos copiados>] EXPOSE 3000 # le indica al contenedor el puerto por el cual va a salir o exponer el contenedor, es el mismo puerto por donde esta escuchando node CMD ["npx","nodemon", "index.js"] # ejecuta el comando node index.js el cual levanta el servidor de express # npx es una herramienta de cli que nos permite ejecutar paquetes de npm de forma mucho más sencilla # nodemon es el paquete que nos va apermitir bajr y subir el server de manera automatica apenas exita un cambio en los archivos # index.js es el archivo que levanta el servidor de express

      El error: Error: Cannot find module 'express’ U otro error de dependencias lo resolvi asi:

      Al momento de bajar el proyecto, debido al gitignore el proyecto no tenia la carpetas de los modulos de node. Debido a esto cuando se ejecuta el contenedor la primera vez y al no haber cambios en el package.json y package-lock.json, nunca se ejecutara el npm install.

      Puesto que lo que hize fue correr de manera interativa el contenedor -it Esto me permitio ejecutar el comando npm install y debido a que el volumen esta apunto a la carpeta del codigo fuente del host se engeraran todos los modulos necesarios. Una vez esto, se puede descartar dicho contender y ejecutar de nuevo el contenedor con la opcion --rm (para borrar), no iterativo (sin la opcion it)

      Saludos

      Gracias me sirvió mucho, sólo para poner los pasos.

      Primero ejecuten:

      sudo docker run -it --rm -p 3000:3000 -v /ruta/donde/estan/docker:/usr/src platziapp bash

      Estando dentro del bash:

      npm install exit

      Y por último ejecuten el comando que pone el profe:

      sudo docker run --rm -p 3000:3000 -v /ruta/donde/estan/docker:/usr/src platziapp

      De nuevo, muchas gracias

      Gracias por la clarificacion @code57 and @vinsmokemau por los pasos en code markup. Tengo algunas perguntas:

      1. Que exactamente se esta removiendo con la flag --rm ?

      2. Entiendo que el -p 3000:3000 esta mapping los puertos fuera de docker. Pero no entiendo que tiene que ver el directorio /usr/src en todo esto. Que es lo que pasa ahi?

      3. En la parte de -v /ruta/donde/estan/docker:/usr/src platziapp despues de el : se refiere a algun directorio magico dentro de Docker? (/usr/src)

      si al correr el contenedor con un volumen tipo bind te dio este error

      vagrant@lion-server:~/platzi-docker$ docker run --rm -p 3000:3000 -v /home/vagrant/platzi-docker:/usr/src platziapp internal/modules/cjs/loader.js:638 throw err; ^ Error: Cannot find module '/root/.npm/_npx/1/lib/node_modules/nodemon/bin/postinstall' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3) [nodemon] 2.0.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node index.js` internal/modules/cjs/loader.js:638 throw err; ^ Error: Cannot find module 'express' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Module.require (internal/modules/cjs/loader.js:692:17) at require (internal/modules/cjs/helpers.js:25:18) at Object.<anonymous> (/usr/src/index.js:1:17) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3)

      es porque no se instalaron las dependencias de node antes ejecuta el contenedor, corre el comando:

      npm install

      parece que al ejecutar el contenedo con -v sobreescrie el conteniido de la carpeta /usr/src con lo que se encuentre en la carpeta host

      Hola disculpa, me podrias indicar en que momento exactamente correr el comando npm install, tengo el mismo error que mencionas en tu comentario pero no se exactamente en que momento correr dico comando, gracias de antemano por tu ayuda.

      @joseluisavalosizaguirre ejecuta el comando antes de correr el contenedor

      Si están en windows y tienen problemas con la recarga automática por parte de nodemon usen --legacy-watch
      Dockerfile:

      CMD ["npx", "nodemon", "--legacy-watch", "index.js"]

      Estoy corriendo docker sobre windows estoy ejecutando sobre Linux container. La ultima parte no me funciona, cuando hago el cambio no se reinicia el container. Mi configuracion es la siguiente: ++DOCKER FILE++ FROM node:10 COPY ["package.json", "package-lock.json", "/usr/src/"] WORKDIR /usr/src RUN npm install COPY [".", "/usr/src/"] EXPOSE 3000 CMD ["npx", "nodemon", "index.js"]

      El monitor no detecta el cambio

      D:\DoKR\EJEMPLO1>docker run --rm -p 3000:3000 -v D:\DoKR\EJEMPLO1:\usr\src platziapp [nodemon] 1.18.6 [nodemon] to restart at any time, enter rs [nodemon] watching: . [nodemon] starting node index.js Server listening on port 3000!

      HELP ME!!!!

      A pesar de ello no funciona...

      Para los que tengan el error
      npm ERR! code E404
      npm ERR! 404 Not Found: flatmap-stream@0.1.1
      solo cambien en su package.json el nodemon a latest

      "devDependencies": { ... "nodemon": "latest" }

      Muchas gracias, por el aporte ya no tengo problemas.

      Para la gente que use Windows pueden reemplazar

      C:/ruta/donde/estan/docker por ${PWD}

      es una variable global que se puede usar en el shell de Windows para no estar siempre colocando el directorio completo.

      quedaria algo asi

      docker run --rm -p 3000:3000 -v ${PWD}:/usr/src platziapp

      Espero les sirva!

      Tuve el error

      C:\docker&gt;docker run --rm -p 3000:3000 -v /c/docker:/usr/src platziapp internal/modules/cjs/loader.js:638 throw err; ^ Error: Cannot find module '/root/.npm/_npx/1/lib/node_modules/nodemon/bin/postinstall' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3) [nodemon] 2.0.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node index.js` internal/modules/cjs/loader.js:638 throw err; ^ Error: Cannot find module 'express' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Module.require (internal/modules/cjs/loader.js:692:17) at require (internal/modules/cjs/helpers.js:25:18) at Object.&lt;anonymous&gt; (/usr/src/index.js:1:17) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) [nodemon] app crashed - waiting for file changes before starting...``` luego ejecute

      docker run --rm -p 3000:3000 -v /c/docker:/usr/src platziapp npm install

      seguia sin funcionar pero la consola sugeria utilizar el audit fix y con ello si funciono

      C:\docker>docker run --rm -p 3000:3000 -v /c/docker:/usr/src platziapp npm audit fixnpm + mongodb@3.5.5 added 2 packages from 2 contributors, removed 3 packages and updated 9 packages in 37.451s WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents): npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: no such file or directory, rename ‘/usr/src/node_modules/.staging/fsevents-8761505b/node_modules/signal-exit’ -> ‘/usr/src/node_modules/.staging/signal-exit-a0d7e7f7’

      fixed 135 of 137 vulnerabilities in 2399 scanned packages 1 vulnerability required manual review and could not be updated 1 package update for 1 vulnerability involved breaking changes (use npm audit fix --force to install breaking changes; or refer to npm audit for steps to fix these manually)

      Y ahora si funciono!!!! Espero te sea útil

      C:\docker>docker run --rm -p 3000:3000 -v /c/docker:/usr/src platziapp [nodemon] 1.18.6 [nodemon] to restart at any time, enter rs [nodemon] watching: . [nodemon] starting node index.js Server listening on port 3000!

      A mi me ha funcionado con C:\docker>docker run --rm -p 3000:3000 -v /c/docker:/usr/src platziapp npm audit fix npm + mongodb@3.5.5

      De todos los comentarios éste fue el que solucionó el problema. Gracias!

      En esa clase me surgió el mismo problema de las dependencias como a todos, lo que yo realice fue que al momento de correr el contenedor, en lugar de instalar directamente con npm install las librerias inicie el bash.

      docker run -p 3000:3000 -v /your/directory:/usr/src -it nodeapp bash

      Una vez dentro del contenedor corrí el comando

      npm install

      Me salí del contenedor, como al momento de salirse del contenedor se apaga. Lo inicie con:

      docker restart [id de mi contenedor]

      ahora entre de nuevo a mi contenedor usando el comando

      docker exec -it [id-mi-contenedor] bash

      dentro del bash lo que hice fue correr nodemon:

      npx nodemon index.js

      Y ahora el contenedor ya esta escuchando por cualquier cambio.

      Gracias compañero funciono.

      Windows 10

      Docker file

      FROM node:10 COPY ["package.json","package-lock.json", "/usr/src/"] # [<ubicacion de los archivos a copiar>, <destino donde van a quedar los archivos copiados>] WORKDIR /usr/src # es similar al comando cd, WORKDIR <entrar en la siguiente ruta> RUN npm install --force # RUN ejecuta el comando npm install RUN npm audit fix COPY [".", "/usr/src/"] # [<ubicacion de los archivos a copiar>, <destino donde van a quedar los archivos copiados>] EXPOSE 3000 # le indica al contenedor el puerto por el cual va a salir o exponer el contenedor, es el mismo puerto por donde esta escuchando node CMD ["npx", "nodemon", "--legacy-watch", "index.js"] # ejecuta el comando node index.js el cual levanta el servidor de express # npx es una herramienta de cli que nos permite ejecutar paquetes de npm de forma mucho más sencilla # nodemon es el paquete que nos va apermitir bajr y subir el server de manera automatica apenas exita un cambio en los archivos # index.js es el archivo que levanta el servidor de express

      Comando:

      PS D:\Proyectos\DockerApp> docker build -t platziapp -f Dockerfile .

      Siguiente comando:

      PS D:\Proyectos\DockerApp> docker run --rm -p 3000:3000 -v D:\Proyectos\DockerApp:/usr/src platziapp

      Docker en Windows Si no recarga nodemon automáticamente, usen la solución de Christian

      En la parte de: CMD ["npx", "nodemon", "index.js"] usen:

      CMD ["npx", "nodemon", "--legacy-watch", "index.js"]

      Busque por todos lados y esta era la parte que estaba fallando :')

      Aun no me funciona la recarga ... alguno otra idea ?

      El caso del vídeo (en donde de usa nodemon) funciona, pero, en el caso de una aplicación con Java que está en un container com archivos .properties y .xml de configuración... ¿Cómo hago para que se actualice la imagen en tiempo real si cambio algo en la configuración de alguno de esos archivos?

      Para estos casos lo que he realizado es integrar Jenkins para construir un CI/CD. De tal modo que los cambios realizados sobre el repositorio de la aplicación activen la compilación y despliegue del código.

      No es una solución propíamente del contexto Docker pero en la CI/CD todas las aplicaciones Java se encuentran dockerizadas.

      pro tip: por si les falla en el paso de hacer el vinculo con el pc host, ejecuten 'npm install' en el path del proyecto.

      en linux: ubunto se inicia todo bien pero cada que hago cambios en el index la información no se actualiza y en el navegador no cambia hasta que no corro un build nuevo y ejecuto el run. yo utilizo una instancia de aws de ubuntu

      Hola puedes modificar tu dockerfile asi: CMD["npx", "nodemon", "--legacy-watch", "index.js"] con este cambio levantas el container como indica el profesor y ya reconoce los cambios. Saludos.

      Cuando ejecutamos: docker build -t platziapp . Observamos que aparece “Using cache”, esto significa, cómo cada capa es inmutable, cómo docker sabe cual es el comando que genero cada capa. Pero en cada capa, usa lo que hizo las capas anteriores.

      Cambiamos el mensaje de salida de la aplicación en el archivo “index.js”, y sí volvemos a ejecutar el comando, vemos que debe hacer todo de nuevo, porque al más minimo cambio de los bits, las capas deben volver a hacerse.

      ¿Qué podemos hacer para que no nos demande tanto tiempo en cada build? En el dockerfile lo modificamos así:

      dockerfile.png

      En el primer COPY voy a colocar únicamente aquellas cosas que afecten al comando npm install, y en node son ; package.json, y package-lock.json.

      En el segundo copy sí tal cual como estaba, porque él reconoce que ya se copiaron unos archivos y copia el resto.

      Esto nos ayuda mucho cuando estamos desarrollando, para que las dependencias solo se descarguen en una ocasión, y no nos consuma tanto tiempo en los builds.

      Cómo actualizar el contenido de un contenedor sin tener que estar dándole build? En el dockerfile, en vez de utilizar en el CMD, node utilizaremos nodemon, lo cual sirve monitorear mis archivos de javascript de mi servidor de node, y cuando los detecta se actualizar.

      CMD ["npx", "nodemon", "index.js"]

      Le damos en build, y ahora cómo queremos que node se reinice cuando cambiamos algo en nuestro nodejs, entonces vamos a montar los archivos.

      docker run --rm -p 3000:3000 -v /home/felipe/Documentos/curso-docker/docker:/usr/src platziapp Abrimos el navegador : localhost:3000 y vemos que está correcto. PERO, ahora modificamos el archivo de index.js y GUARDAMOS, y observamos que en la consola automáticamente se actualizan y abrimos el navegador y está todo correcto.

      si alguien tiene un problema con este tipo error [nodemon] starting node index.js internal/modules/cjs/loader.js:638 throw err; ^ la solucion que realice fueron las siguientes instrucciones 1 - npm install 2 - npm audit fix

      Y vuelven a hacer docker build y el docker run. esta manera me funciono el servicio

      1. A mí me funcionó de esta manera. > Dockerfile
      FROM node:10 COPY [&quot;package.json&quot;, &quot;package-lock.json&quot;, &quot;/usr/src/&quot;] WORKDIR /usr/src COPY [&quot;.&quot;, &quot;/usr/src/&quot;] EXPOSE 3000 CMD [&quot;npx&quot;,&quot;nodemon&quot;, &quot;-L&quot;, &quot;app/index.js&quot;] RUN npm install -g -f RUN npm audit fix
      1. Hacer Build docker build -t platziapp .

      2. Hacer Run docker run --rm -p 3000:3000 -v pwd[tab] platziapp

      me explicarían que hace la lnea docker run --rm -p 3000:3000 -v /User/gvilarino/Dev/git/docker:/user/src platzi

      Hola @eversorto.

      Creo que el comando por el que preguntas es: (Sin --rm )

      docker run -p 3000:3000 -v /User/gvilarino/Dev/git/docker:/user/src platzi
      • docker run: Permite iniciar un contenedor.

      • -p: Bandera para exponer los puertos utilizados por un contenedor

      • 3000:3000: Este par mapea el puerto del contenedor al puerto de la maquina huésped:

      • -v : bandera para montar volúmenes

      • /User/gvilarino/Dev/git/docker:/user/src platzi : Directorio de tu contenedor mapeado a un directorio de tu maquina huésped.

        Espero te sea de utilidad:

      Referencias:

      • Docker Run
      • Docker rm

      Complementando la respuesta que ya existe a esta pregunta.

      El flag --rm le dice al contenedor que se destruya cuando el proceso principal pare. Lo que normalmente sucede es que sólo se duerme el contenedor, dejando de esta forma paso a volver a ejecutarlo. Pero en un entorno de pruebas, aprendizaje, etc. Esto sólo nos ocaciona que se llenen de contenedores parados, así que ese flag los elimina en lugar de dejarlos durmiendo.

      Puedes ver más de esta información en la documentación que ya pasó el amigo @fernandofh y con el comando man en la consola.

      man docker run --rm

      man stands for manual.

      Si gustas aprender más sobre man y estas utilidades de la consola. Puedes ver el curso de introducción a la terminal y linea de comandos.

      npx?

      Sí,

      Es una herramienta para ejecutar paquetes de NPM

      Puedes leer más aquí.

      Y puedes tomar la versión más reciente de ese curso aquí.

      Buenas comunidad, consulta quiero crear un contenedor, en este caso con Nodejs y Postgres, y dentro de este crear un proyecto de express por ejemplo. Y que se refleje en la carpeta alfitriona cuando creo un archivo o carpeta dentro del contenedor. Estoy tratando y no se refleja en mi carpeta dnd tengo Dockerfile y docker-compose.yml estos son mis archivos: Dockerfile:

      Snap 2020-06-04 at 23.42.37.png

      docker-compose.yml:

      Snap 2020-06-04 at 23.44.58.png

      Porque mi idea es tener un entorno de desarrollo donde simplemente corra el contenedor y dentro de este crear proyectos necesarios. Desde ya muchas gracias.! Alejandro

      yo te recomendaria trabajar con el feature de vscode llamado developing in containers https://code.visualstudio.com/docs/remote/containers

      ¿Cuándo y para que usaría el flag de --rm o -d?

      El flag -rm se utiliza para ReMover contenedores: https://linuxize.com/post/how-to-remove-docker-images-containers-volumes-and-networks/.

      El flag -d te lo explico aquí: https://platzi.com/comentario/824612/.