Tu primera experiencia con Node.js

1

¿Dónde aprender backend con Node.js actualizado?

2

Todo lo que aprenderás sobre backend con Node.js

3

¿Qué es Node.js?

4

¿Qué es Node.js y para qué sirve?

5

Diferencias entre Node.js y JavaScript

6

Resumen: Diferencias Nodejs y Javascript

7

Instalación de Node.js

8

Arquitectura orientada a eventos

9

Node.js para la web

Manejo y uso de Streams con Node.js

10

Introducción a streams

11

Readable y Writable streams

12

Duplex y Transforms streams

Uso de utilidades de Node.js

13

Sistema operativo y sistema de archivos

14

Administrar directorios y archivos

15

Consola, utilidades y debugging

16

Clusters y procesos hijos

Crea tu primer proyecto en Express.js

17

¿Qué es Express.js y para qué sirve?

18

Creando tu primer servidor con Express.js

19

Request y Response Objects

Aprende a crear un API con REST

20

Anatomía de una API Restful

21

Estructura de una película con Moockaru

22

Implementando un CRUD en Express.js

23

Métodos idempotentes del CRUD

24

Implementando una capa de servicios

Cómo conectarse con librerías externas en Express.js

25

Creación de una BD en MongoAtlas

26

Conexión a MongoAtlas una instancia de MongoDB

27

Conexión con Robot3T y MongoDB Compass a una BD

28

Implementación de las acciones de MongoDB

29

Conexión de nuestros servicios con MongoDB

Conoce como funcionan los Middleware en Express.js

30

¿Qué es un middleware? Capa de manejo de errores usando un middleware

31

Manejo de errores asíncronos y síncronos en Express

32

Capa de validación de datos usando un middleware

33

¿Qué es Joi y Boom?

34

Implementando Boom

35

Implementando Joi

36

Probar la validación de nuestros endpoints

37

Middlewares populares en Express.js

Implementa tests en Node.js

38

Creación de tests para nuestros endpoints

39

Creación de tests para nuestros servicios

40

Creación de tests para nuestras utilidades

41

Agregando un comando para coverage

42

Debugging e inspect

Despliega tu primera aplicación en Express.js

43

Considerando las mejores prácticas para el despliegue

44

Variables de entorno, CORS y HTTPS

45

¿Cómo implementar una capa de manejo de caché?

46

¿Cómo contener tu aplicación en Docker?

47

Despliegue en Now

Conclusiones

48

¿Qué aprendiste en este curso?

¿Cómo contener tu aplicación en Docker?

46/48

Lectura

Para contener nuestra aplicación en Docker y ejecutarla lo primero es asegurarnos que tenemos instalado Docker.

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 40

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, testers, como administradores de sistemas, en relación a las máquinas, a los entornos en sí donde se ejecutan las aplicaciones software, los procesos de despliegue, etc.
En el caso de los desarrolladores, el uso de Docker hace que puedan centrarse en desarrollar su código sin preocuparse de si dicho código funcionará en la máquina en la que se ejecutará.
Por ejemplo, sin utilizar Docker un posible escenario podría ser el siguiente (hay otras formas de solucionar este escenario, pero por poner un ejemplo claro):
– Pepe tiene en su ordenador instalado Java 8, y está programando una funcionalidad específica de la aplicación con algo que solo está disponible en esa versión de Java.
– José tiene instalado en su máquina Java 7, porque está en otro proyecto trabajando sobre otro código, pero Pepe quiere que José ejecute el código de su aplicación en su máquina. O José se instala Java 8, o la aplicación en su máquina fallará.
Este escenario desaparece con Docker. Para ejecutar la aplicación, Pepe se crea un contenedor de Docker con la aplicación, la versión 8 de Java y el resto de recursos necesarios, y se lo pasa a José.
José, teniendo Docker instalado en su ordenador, puede ejecutar la aplicación a través del contenedor, sin tener que instalar nada más.
Por eso Docker también es muy bueno para el testing, para tener entornos de pruebas. Por un lado, es muy sencillo crear y borrar un contenedor, además de que son muy ligeros, por lo que podemos ejecutar varios contenedores en una misma máquina (donde dicho contenedor tendría el entorno de nuestra aplicación: base de datos, servidor, librerías…). Por otro, un mismo contenedor funcionará en cualquier máquina Linux: un portátil, el ordenador de tu casa, máquinas alojadas en Amazon, tu propio servidor…
Esto además beneficia a la parte de sistemas, ya como los contenedores son más ligeros que las máquinas virtuales, se reduce el número de máquinas necesarias para tener un entorno.
Y lo que es mejor, Docker es open source.

Tomado de www.javiergarzas.com

Si el contenedor les corre, pero no pueden acceder a la api mediante http://localhost:3000, deténganlo y corran el comando run de la siguiente manera:

docker run -p 3000:3000 -d movies-api

Insisto esto debería estar en un video no en texto para eso mejor googleo

Instrucciones para la instalación de Docker en Ubuntu.

Se puede utilizar Docker Compose para poder orquestar nuestros contenedores, en mi caso yo utilice este archivo de docker-compose.yml. Agregue un cliente de Mongo que podemos acceder desde el navegador, similar a MongoCompass o Robo3t sin necesidad de instalar software corre en nuestro contenedor.

Adicional a ello, debemos de crear un carpeta llamada docker-entrypoint-initdb.d/mongo-init.js esta carpeta tiene que estar a la misma altura que el archivo docker-compose.yml. El archivo js, contiene sintaxis para poder crear nuestra base de datos y un usuario para poder autenticarnos ya sea con el cliente de Mongo y poder conectarnos a nuestro API que es el fin de este curso.

Script js para crear db y usuario.

db = db.getSiblingDB('db_platzivideos');
db.createUser(
    {
        user: 'api_user',
        pwd: 'api1234',
        roles: [{ role: 'readWrite', db: 'db_platzivideos' }],
    },
);
db.createCollection('users');

Y el string de conección cambiaría al que tenemos para mongo atlas.

const MONGO_URI = `mongodb://${USER}:${PASSWORD}@${config.dbHost}/${DB_NAME}`;

En el archivo docker-compose.yml agregamos las variables de entorno a nuestro proyecto en node las que vamos a necesitar, host, user, password y db.

version: "3"

services: 
    web:
        container_name: movie_api
        restart: always
        build: .
        ports: 
            - "5000:3000"
        links: 
            - mongo
        volumes: 
            -   .:/srv/app
        environment: 
            - DB_HOST=mongo
            - DB_USER=api_user
            - DB_PASSWORD=api1234
	    - DB_NAME=db_platzivideos
    mongo:
        container_name: db_mongo
        image: mongo:latest
        restart: always
        environment:
            - MONGO_INITDB_ROOT_USERNAME=admin
            - MONGO_INITDB_ROOT_PASSWORD=pass
        ports:
            - 27017:27017
        volumes:
            - ./docker-entrypoint-initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
    db-client:
        container_name: db-client
        image: "mongoclient/mongoclient:4.0.0"
        restart: always
        ports: 
            - "3000:3000"
        environment: 
            - ROOT_URL= http://mongo:27017/admin

Luego de tener estos archivos, debemos de correr el comando docker-compose up -d, el flag -d significa que se ejecutara en background o como servicio en segundo plano y podras seguir utilizando tu terminal sin ningun problema.



para los que quieren saber que significa el codigo , en este video https://youtu.be/i7ABlHngi1Q minuto 24 aprox, se explica.

Algo a tener en cuenta mis estimados. Cuando vayan a ejecutar por primera vez, Docker en Windows verifica que se tenga habilitada la característica de Asistencia de Virtualización por Hardware. En el caso de que no la tengan deben habilitarla en el BIOS.

Ahora, el comando de ejecución no me funcionó:

docker run -d movies-api

Lo que hice fue correr este comando y sin problema

docker run -p 3000:3000 -d movies-api

Con eso funca!

Y para qué sirve Docker? estas lecturas sueltas son pésimas, para esto mejor googleo. Además varios usuarios tuvieron problemas

El archivo debe ser creado en la raíz de movies-api, y los comandos en el directorio correcto.

Hola Devs:
Para los que utilicen Linux, pueden acceder aqui y descargar docker dependiendo de su distro:
Click Aqui

Es buena práctica en docker crear un archivo con el nombre .dockerignore
Funciona como el .gitignore (ignora archivos o carpetas que desees)
Por ejemplo si agregan la carpeta node_modules en el dockerignore evitarán que sea incluida en el copiado en la imagen movies-api que van a crear. Por lo que la imagen sería mas ligera.

Para usuario no windows recomiendo Podman es la evolución de docker podman.io, se basa en docker y utiliza la misma suit de comandos

OJO el Dockerfile => va en la carpeta de movies_api
Pegamos el código:

FROM node:10-alpine
WORKDIR /srv/app
COPY . .
RUN npm install
EXPOSE 3000
ENV NODE_ENV=production
CMD ["node", "index.js"]

corremos el comando

docker build -t movies-api .

y hasta aquí todo OK

pero al correr el comando

docker run -d movies-api

no me funciona cuando voy a http://localhost:3000

Estupendo aunque estaría bien un poco de teoría acerca de Docker ya que no tengo mucho conocimiento acerca de para qué sirve realmente.

En cuanto al script del profesor funciona correctamente en mac excepto el de ejecutar la imagen, el script correcto para mac es el que han aportado mis compañeros:

docker run -p 3000:3000 -d movies-api

Ni siquiera dice donde va dockerfile

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.​
Wikipedia

Para instalar en WSL LINK

El último comando es mejor ejecutarlo de esta manera

docker run -p 3000:3000 -d movies-api

Osea, que para Linux no se puede instalar Docker???

The command ‘docker’ could not be found in this WSL 1 distro.
We recommend to convert this distro to WSL 2 and activate
the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.

la ventaja de usar docker es que puedes integrar otros codigos externos como proveedores de servicios a la aplicacion actual

Para los que usan Linux Fedora 31.

Tutorial instalar docker Fedora 31

  • Crear el archiv Dockerfile en la raiz del proyecto y agregar el contenido que dejo el profesor.

  • Ejecutar el comando para crear la imagen.

docker build -t movies-api .
  • Habilitar docker y levantar el servicio.
sudo systemctl start docker

sudo systemctl enable docker

  • Ejecutar la imagen
docker run -p 3000:3000 -d movies-api

Listo!

Para todos los que tengan Windows 10 Home Edition

En este video se explica cómo instalar Docker
https://www.youtube.com/watch?v=UqfWTPPlmIQ

También como indica Marco Antonio Luna Serrano el último comando para Windows funciona de la siguiente manera

docker run -p 3000:3000 -d movies-api

docker run -name api --rm -p 3000:3000 -d movies-api --> Recomiendo correrlo asi, con los siguientes flag adicionales:

  • p [puerto_maquina_anfitriona]:[puerto_contenedor] Asocia el el puerto local al puerto del contenedor para que sea visible para su máquiena. (Sin esto no se podra ver en el localhost)
  • name [alias] le asigna el alias que quieran al contenedor. En el ejemplo se llama api
  • --rm hace que el container se autoelimine al parar. Por cierto, para parar el contenedor puedes hacerlo con el siguiente comando docker stop [nombre-o-id-del-container].

Aqui un resumen del curso de docker por si les sirva

El archivo Dockerfile va en la raiz del proyecto

Utilizando docker-compose para tener la base de datos en un entorno local
solo se debe reemplazar los valores de :
- MONGO_USER=<user>
- MONGO_PASS=<pass>

version: '3'
services:
  database:
    image: 'mongo'
    container_name: 'mongo-container'
    environment: 
      - MONGO_INITDB_DATABASE=movies
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=root_pass
      - MONGO_USER=<user>
      - MONGO_PASS=<pass>
    volumes: 
      - ./mongo-volume:/data/db
    ports: 
      - '27017-27019:27017-27019'
  app:
    build: .
    container_name: 'movies-app-container'
    ports: 
      - '3000:3000'
    environment: 
      - DB_HOST=database
    depends_on: 
      - database

Para correr la base de datos y la aplicacion con docker-compose

docker-compose up

Desafortunadamente no se puede instalar Docket en windows 10 ya que requerimos tener activada la opción de virtualización (solo disponible en windows 10 pro), les dejo un link para quienes quieran comprar una licencia OEM (va quemado a la motherboard no la puedes compartir) http://www.cdkoffers.com/sk/windows10ProOem, usen el codigo tq20, o tc20 para obtener un descuento adicional, termine comprando a buen precio

Docker es genial; pero algo complejo. En platzi hay un curso de Docker y esta muy bueno. https://platzi.com/clases/docker/

Al parecer no es compatible con “windows 10 home” 😥

segui lo pasos, sin embargo usando windows 10 con un container de linux, si puedo entrar a localhost pero las rutas no funcionaron.

tengo un error, pero ya pude generar la imagen Docker, tengo el proceso corriendo, pero no puedo entrar a la api, a quien lo intente y le aparezca el mensaje

no matching manifest for windows/amd64 ...

lo solucione cambiando la configuración de “Switch to Linux containers”, dando clic derecho en el icono de Docker en la barra de tareas.

Después pude crear mi imagen, lanzarla, de hecho al listar las imágenes y tiene un código de proceso, pero al ir al localhost:3000, o a la api http://localhost:3000/api/movies no me abre nada, no aparece conexión, si alguien lo ha solucionado publicar por que según veo estamos estancados hasta aquí.

Saludo.

El archivo DockerFile va en la raiz del proyecto?

Si no tienen docker installado, sigan y verifiquen bien las instrucciones.
Yo no lo tenia instalado y tengo Windows 10 home, tuve que actualizar mi version de Windows 10 a la version mas reciente (version 2004 build 19041) y luego seguir los otros pasos. No tuve ningun problema en la instalacion.

No entiendo donde se escriben todos esos comandos despues de crear el archivo, alguien podría decirmelo?, porque este tutorial no explica nada de nada. gracias!.

Perdí toda la tarde tratando de instalar algo que ni se para que sirve, ni si va a ser necesario para terminar la aplicación en los cursos siguientes, y aún así no pude resolverlo.

¿Cuál es la ventaja de hacer esto? ósea tengo ganas de aprender Docker pero todavía no entiendo del todo el uso aparte de las versiones (he escuchado mucho que soluciona lo de “en mi máquina funcionaba”). entonces qué ventaja aparte de esa nos da montar nuestro backend en Docker?

Tengo un resumen del Curso de Docker en mi repositorio: https://github.com/Boogst/docker.

Gracias!! 😃

Gracias!