Skip to content

Commit 2580354

Browse files
committed
Revisado el ejemplo de Node.js con VS Code
1 parent 21dcdc0 commit 2580354

11 files changed

Lines changed: 1212 additions & 1061 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ wwwroot
99
dist/
1010

1111
# vs code
12+
.vscode
1213
.DS_Store
1314

1415
# exercise solution

01-contenedores/contenedores-iii/Dockerfile.no.multistages

Lines changed: 0 additions & 10 deletions
This file was deleted.

01-contenedores/contenedores-iii/contenedores-iii.sh

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@ https://code.visualstudio.com/docs/containers/overview
66
cd 01-contenedores/contenedores-iii/hello-world
77

88
#Ejecutar la app sin contenerizar
9+
#1. Instalar las dependencias de la aplicación
910
npm install
11+
#2. Ejecutar ESLint
1012
npm run test
13+
#3. Ejecutar la app
1114
node server.js
15+
#4. Ejecutar la app usando Nodemon
1216
npm 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
3236
cat .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
3853
docker 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
5988
docker 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

72102
docker 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 #####
Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1 @@
1-
**/.classpath
2-
**/.dockerignore
3-
**/.env
4-
**/.git
5-
**/.gitignore
6-
**/.project
7-
**/.settings
8-
**/.toolstarget
9-
**/.vs
10-
**/.vscode
11-
**/*.*proj.user
12-
**/*.dbmdl
13-
**/*.jfm
14-
**/azds.yaml
15-
**/charts
16-
**/docker-compose*
17-
**/Dockerfile*
18-
**/node_modules
19-
**/npm-debug.log
20-
**/obj
21-
**/secrets.dev.yaml
22-
**/values.dev.yaml
23-
README.md
1+
node_modules

01-contenedores/contenedores-iii/hello-world/.eslintrc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module.exports = {
99
"ecmaVersion": 12
1010
},
1111
"rules": {
12-
"semi" : ["error","always"],
13-
"quotes": ["error", "double"],
12+
// "semi" : ["error","always"],
13+
// "quotes": ["error", "double"],
1414
"no-debugger": ["error"],
1515
"no-console": ["warn"]
1616
},

01-contenedores/contenedores-iii/hello-world/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

01-contenedores/contenedores-iii/hello-world/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ WORKDIR /app
88
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
99

1010
#Instalo las dependencias de mi aplicación, ejecutando el comando npm install
11-
RUN npm install --silent --production && mv node_modules ../
11+
RUN npm install
1212

1313
#Copio el resto de los archivos en el directorio /app
1414
COPY . .
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#Esta es la imagen que utilizaré como base de mi imagen
2+
FROM node:14-alpine
3+
4+
# ENV NODE_ENV production
5+
6+
#Establezco la ruta /app como directorio de trabajo para alojar mi aplicación, instalar dependencias, etc.
7+
WORKDIR /app
8+
9+
#Copio los archivos package.json y package-lock,son(el asterisco si exsite) en el raíz de mi directorio de trabajo, /app.
10+
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
11+
12+
#Instalo las dependencias de mi aplicación, ejecutando el comando npm install
13+
# RUN npm install --silent --production && mv node_modules ../
14+
RUN npm install
15+
16+
#Copio el resto de los archivos en el directorio /app
17+
COPY . .
18+
19+
RUN npm run test
20+
21+
#Añado como metadato el puerto por el que escucha mi aplicación
22+
EXPOSE 3000
23+
24+
#Añado otro metadato más que es qué comando se ejecutará cuando se genere un contenedor de esta imagen
25+
CMD ["npm", "start"]

01-contenedores/contenedores-iii/Dockerfile.multistages renamed to 01-contenedores/contenedores-iii/hello-world/Dockerfile.multistages

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# ---- Base Node ----
2-
FROM node:12.18-alpine AS base
3-
#Add some labels
4-
LABEL maintainer="Gisela Torres"
2+
FROM node:14-alpine AS base
53
# set working directory
64
WORKDIR /app
75

@@ -16,7 +14,7 @@ COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
1614
# run linters, setup and tests
1715
FROM dependencies AS test
1816
# Install ALL node_modules, including 'devDependencies'
19-
RUN npm install --silent
17+
RUN npm install
2018
COPY . .
2119
RUN npm run test
2220

@@ -27,7 +25,7 @@ FROM base AS release
2725
#Add environment variables
2826
ENV NODE_ENV production
2927
# copy production node_modules
30-
COPY --from=dependencies /app/package.json ./
28+
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"] --from=dependencies
3129
#Install app dependencies
3230
RUN npm install --silent --production && mv node_modules ../
3331
# copy app sources

0 commit comments

Comments
 (0)