@@ -6,9 +6,13 @@ https://code.visualstudio.com/docs/containers/overview
66cd 01-contenedores/contenedores-iii/hello-world
77
88# Ejecutar la app sin contenerizar
9+ # 1. Instalar las dependencias de la aplicación
910npm install
11+ # 2. Ejecutar ESLint
1012npm run test
13+ # 3. Ejecutar la app
1114node server.js
15+ # 4. Ejecutar la app usando Nodemon
1216npm run start-dev
1317
1418# Para crear el archivo Dockerfile y .dockerignore que vimos en la parte teórica, puedes hacerlo con la extensión de Docker de manera sencilla.
@@ -32,28 +36,53 @@ cat Dockerfile
3236cat .dockerignore
3337
3438# Generar la imagen en base al Dockerfile
35- docker build --tag= hello-world .
39+ docker build -t hello-world:prod .
3640
37- # Comprobamos las imágenes que ahora tenemos disponibles, así como el peso de hello-world
41+ # Ejecutar un nuevo contenedor usando tu nueva imagen:
42+ docker run -p 4000:3000 hello-world:prod
43+
44+ # Hacer lo mismo con la extensión de Visual Studio Code
45+ # 1. Generar la imagen
46+ # 2. Ejecutar un contenedor en base a la imagen
47+ # 3. Abrir el navegador usando la extensión
48+ # 4. Engancharse al terminal del contenedor
49+
50+ # El por qué del multi-stage
51+
52+ # Comprobamos las imágenes que ahora tenemos disponibles, así como el peso de helloworld
3853docker images
3954
4055# Ver el historico generado para la imagen
41- docker history hello-world # Los que tienen valor 0B son metadatos
56+ docker history helloworld # Los que tienen valor 0B son metadatos
4257
43- # Ejecutar un nuevo contenedor usando tu nueva imagen:
44- docker run -p 4000:3000 hello-world
4558
4659# Modifica el Dockerfile para ejecutar el test con eslint:
47- # FROM node:12.18-alpine
48- # LABEL maintainer="Gisela Torres"
49- # # ENV NODE_ENV production
60+ # FROM node:14-alpine
61+
62+ # LABEL maintainer="Gisela Torres <gisela.torres@returngis.net>"
63+
64+ # # ENV NODE_ENV=production
65+
5066# WORKDIR /usr/src/app
67+
5168# COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
69+
70+ # # RUN npm install --production --silent && mv node_modules ../
5271# RUN npm install
72+
5373# COPY . .
54- # RUN npm run test
74+ # #Ejecuta los tests de eslint
75+ # RUN npm test
76+
5577# EXPOSE 3000
78+
79+ # RUN chown -R node /usr/src/app
80+
81+ # USER node
82+
5683# CMD ["npm", "start"]
84+ docker build --tag=helloworld . -f Dockerfile.dev
85+
5786
5887# Si vuelves a generar tu imagen, después de que arregles los errores que reporta eslint, comprobarás que ha engordado
5988docker images
@@ -66,13 +95,14 @@ docker images
6695# La idea es simple: crea imagenes adicionales con las herramientas que necesitas (compiladores, linters, herramientas de testing, etc.) pero que no son necesarias para producción
6796# El objetivo final es tener una imagen productiva lo más slim posible y segura.
6897# Mismo ejemplo con multi-stages
69- docker build hello-world -t multi-stage -f Dockerfile.multistages
70- docker run -p 5000:3000 multi-stage
98+ DOCKER_BUILDKIT=0 docker build -t hello-world:multi-stage . -f Dockerfile.multistages
99+
100+ #
71101
72102docker images
73103
74- # Si comparas con la versión de la misma aplicación sin multi-stages, la diferencia es notable
75- docker build hello-world -t no-multi-stage -f Dockerfile.no.multistages --no-cache
104+ # El resultado de hello-world:prod y hello-world:multi-stage son iguales, pero hello-world: multi-stage es más eficiente.
105+
76106
77107
78108# ### Ejemplo de contenerización de una aplicación en un entorno .NET #####
0 commit comments