SlideShare una empresa de Scribd logo
1 de 33
by @manufosela
V.E.No.M y Docker
El Stack para el
Desarrollo Simbionte
Un poco de historia
En 2009 irrumpen nodejs y mongodb.
En 2010 aparecen AngulaJS y Express.
Poco después aparecen MEAN o METEOR.
Los stacks de la década pasada, LAMP y WAMP junto con ExtJS y
jQuery, dan paso en esta década a los stacks de desarrollo javascript:
MEAN, METEOR, MERN
Justo llegando al final, con la irrupción de VueJS aparece el stack
VENoM
¿Preguntas?
⊗ Qué es
⊗ Para qué
⊗ Por qué
⊗ Qué se requiere
⊗ Qué desventajas tiene
⊗ Qué aporta en el mundo Cloud
¿Qué es?
V.E.No.M. es el acrónimo de VueJS Express
NodeJS y MongoDB
Es un stack completo de desarrollo de
aplicaciones web.
⊗ VueJS para el frontend
⊗ NodeJS con Express para el backend / API
⊗ MongoDB para la base de datos
Eso como base. Junto a ellos pueden aparecer
otras muchas dependencias.
¿Para qué?
Para tener un entorno isomórfico de
desarrollo javascript.
Para tener el control de lo que haces en
cliente y en servidor.
Para tener el control de tus datos.
¿Por qué?
⊗ Porque al tener un desarrollo isomórfico puedes reutilizar
clases, objetos, funciones e incluso dependencias… en front y
en back.
⊗ Porque conforme tu aplicación crezca tendrás el control para
implementar esas necesidades que van surgiendo
inevitablemente.
⊗ Porque la base de datos es tuya y tener los datos alojados en
sistemas de terceros supone asumir sus normas.
¿Qué “desventajas” tiene?
⊗ Requiere de conocimientos de front y back.
⊗ Tienes que ser Juan Palomo.
⊗ Como al personaje del comic, te acaba
poseyendo.
¿Podemos mejorar el stack?
Dockerizandolo, Porque así:
⊗ Mantiene las diferentes partes aisladas.
⊗ Entregas un desarrollo que garantizas que
funciona.
⊗ Es escalable.
Demo
time
¿Qué vamos a hacer?
1. ¡Vamos a usar VENoM!.
2. scaffolding de un proyecto por defecto de Vue.
3. Un servidor de un API Rest sencillo.
4. Un servidor de mongoDB como base de datos.
5. Docker para separar los entornos de desarrollo, api y base de
datos.
6. Docker-compose para orquestar todos los contenedores Docker.
Lo básico
1. Instalamos docker y docker-compose:
# sudo apt install docker docker-compose
2. Añadimos al usuario de ubuntu al grupo docker y reiniciamos
# sudo usermod -aG docker $USER
3. En https://hub.docker.com/ podemos buscar imagenes de docker ya
preparadas
4. Podemos comprobar qué imágenes tenemos con:
# docker images
Instalación de node y Vue
# sudo apt install nodejs
o bien
# curl -OJ
https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz
# tar -xvf node-v10.13.0-linux-x64.tar.xz
# sudo mv node-v10.13.0-linux-x64 /opt
# sudo chown $USER.$USER /opt/node-v10.13.0-linux-x64
# sudo ln -s /opt/node-v10.13.0-linux-x64 /opt/node
# export PATH=$PATH:/opt/node/bin/:/opt/node/lib/node_modules/
# npm install -g @vue/cli
# vue -V
Creamos workspaces.
Instalamos Express
# mkdir proyecto
# cd proyecto
# mkdir api
# cd api
# npm init -y
# npm install --save express body-parser method-override
Creamos proyecto en Vue
# cd ..
# npm install -g @vue/cli
# vue -V
# vue create front -d
# cd front
# npm run serve
Creamos Dockerfile.front para vue
# cd ..
Creamos y editamos Dockerfile.front
FROM node:8
WORKDIR /usr/src/app
EXPOSE 8080
CMD [ "npm", "run", “serve” ]
Construimos y ejecutamos
Docker para vue
Para construir la imagen de docker:
# docker build -f Dockerfile.front -t front-vue .
Para crear el contenedor a partir de esa imagen:
# docker run -d --name "front-vue-container" -p 8080:8080 -v
$(pwd)/front:/usr/src/app front-vue
Comprobamos:
# docker ps
# docker inspect front-vue
# docker logs front-vue
Creamos Dockerfile.front2 para vue
Podemos hacer que se instale Vue en el contenedor, para usar solamente
las carpetas con el código. Creamos y editamos el fichero
Dockerfile.front2:
FROM node:8
WORKDIR /usr/src/app
COPY front/package.json ./
COPY front/package-lock.json ./
RUN npm install
EXPOSE 8080
CMD [ "npm", "run", “serve” ]
Construimos y
ejecutamos Docker para
vuePara construir la imagen de docker:
# docker build -f Dockerfile.front2 -t front-vue2 .
Para crear el contenedor a partir de esa imagen:
# docker run -d --name "front-vue-container2" -p 8080:8080 -v
$(pwd)/front/public:/usr/src/app/public -v
$(pwd)/front/src:/usr/src/app/src front-vue2
Comprobamos:
# docker ps
# docker inspect front-vue
# docker logs front-vue
/proyecto/front
node_modules
public
src
/proyecto/front/public /proyecto/front/src
/proyecto/front/package.json
/proyecto/front/package-lock.json
front-vue front-vue2
localhost:8080localhost:8080
Construimos el api con
node y express
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', function(req, res) {
res.json({"hello": "express with mongo"});
});
app.get('/misdatos', function(req, res) {
res.json({"misdatos": "son estos"});
});
app.listen(PORT, function() {
console.log('Your node js server is running on PORT:', PORT);
});
Construimos el contenedor del
api
Vamos a crear un nuevo contenedor con node y express.
Creamos el fichero Dockerfile.api:
FROM node:8
WORKDIR /usr/src/app
COPY api/package.json ./
COPY api/package-lock.json ./
COPY api/index.js ./
RUN npm install
EXPOSE 3000
CMD [ "node", "index.js" ]
Construimos el contenedor del
api
Para construir la imagen de docker:
# docker build -f Dockerfile.api -t api-express .
Para crear el contenedor a partir de esa imagen:
# docker run -d --name "api-express-container" -p 3000:3000 api-express
Comprobamos:
# docker ps
# docker inspect api-express
# docker logs api-express
Construimos el
contenedor de mongo
Para la parte de mongo, como no vamos a configurar nada en nuestro
Dockerfile podemos hacer simplemente:
# docker pull mongo
Esto nos baja la imagen de mongodb que luego podremos usar para construir
nuestro contenedor.
Construimos el
contenedor de mongo
Para crear el contenedor a partir de esa imagen:
# docker run -d --name "mongo-container" -it mongo
Comprobamos:
# docker ps
# docker inspect mongo
# docker logs mongo
# mongo
>
Coordinamos todo con
docker-compose
MongoDBEntorno
Vue-cli
FRONT
Node +
Express
API
Configuración de Docker-compose
La configuración de docker-compose se hace mediante un fichero .yml
En este indicamos las build de los contenedores docker que vamos a usar y la relación
entre ellos.
Docker-compose.yml
version: "3"
services:
front-vue:
container_name: front-vue-container
build:
context: .
dockerfile: Dockerfile.front2
volumes:
- ./front/public:/usr/src/app/public
- ./front/src:/usr/src/app/src
ports:
- "8080:8080"
links:
- api-rest
api-rest:
container_name: api-rest-container
restart: always
build:
context: .
dockerfile: Dockerfile.api
ports:
- "3000:3000"
links:
- mongo
mongo:
container_name: mongo-container
image: mongo
volumes:
- ./mongo.db:/data/db
ports:
- "27017:27017"
Construimos el contenedor del
api y mongo
Lo primero nos aseguramos que no tenemos contenedores/imagenes creados.
Para generar los contenedores coordinados con docker-compose:
# docker-compose up -d
Comprobamos:
# docker-compose ps
Probamos a entrar en:
http://localhost:8080
http://localhost:3000
http://localhost:27017
Cuando terminemos nuestra app...
⊗ Al terminar deberemos cambiar el dockerfile de VUE para que clone
un repo y para que haga la build.
⊗ Y en vez de usar el servidor de vue-cli lo ideal sería usar un servidor
como NGINX
⊗ Si usamos el servidor NGINX podemos usar este para que haga de
proxy con nuestro servidor REST, de manera que todas las llamadas,
por ejemplo a /api, las encamine hacia el puerto 3000.
⊗ Lo que entregamos para subir a otros entornos pre-productivos es
un repo que contiene los ficheros Dockerfile y docker-
compones.yml
⊗ Con esto garantizamos que siempre, siempre, va a funcionar en
cualquier lado.
Se termino la frase “En mi local funciona”
Si funciona en tu Docker, siempre funciona
BONUS TRACK
Demo de una app completa.
He usado un fork del vue-pokedex de @rubnvp
(https://github.com/manufosela/vue-pokedex)
GRACIAS
@manufosela - manufosela@gmail.com

Más contenido relacionado

La actualidad más candente

Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSJan Sanchez
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaipquaip
 
Divide y vencerás con docker y core os
Divide y vencerás con docker y core osDivide y vencerás con docker y core os
Divide y vencerás con docker y core osDavid Luque Quintana
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasoshydras_cs
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Yaismel Miranda
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Christian Rodriguez
 
Presentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmPresentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmAlejandro Escanero Blanco
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a DockerOpen Canarias
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrolloAlejandro Hernández
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework SymfonyAlejandro Hernández
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresBel Rey
 

La actualidad más candente (20)

Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJS
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 
Divide y vencerás con docker y core os
Divide y vencerás con docker y core osDivide y vencerás con docker y core os
Divide y vencerás con docker y core os
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Conceptos avanzados en docker
Conceptos avanzados en dockerConceptos avanzados en docker
Conceptos avanzados en docker
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasos
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 
Presentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmPresentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarm
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrollo
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Dockers y wp
Dockers y wpDockers y wp
Dockers y wp
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework Symfony
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos Aires
 

Similar a Meetup V.E.No.M. y docker

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020BelnGonzlezGarca1
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
DockerparadesarrolloEric Zeidan
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemMario IC
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para DockerAngel Borroy López
 
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryDocker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryMario IC
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Plain Concepts
 
DockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdfDockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdfAngel Borroy López
 

Similar a Meetup V.E.No.M. y docker (20)

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Primeros pasos con Docker
Primeros pasos con DockerPrimeros pasos con Docker
Primeros pasos con Docker
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
Dockerparadesarrollo
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
Docker4developers Codemotion2016
Docker4developers Codemotion2016Docker4developers Codemotion2016
Docker4developers Codemotion2016
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker Ecosystem
 
Taller girona
Taller gironaTaller girona
Taller girona
 
Docker WordPress
Docker WordPressDocker WordPress
Docker WordPress
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para Docker
 
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryDocker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
 
DockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdfDockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdf
 
PDIDTI-S7.pptx
PDIDTI-S7.pptxPDIDTI-S7.pptx
PDIDTI-S7.pptx
 

Meetup V.E.No.M. y docker

  • 2. V.E.No.M y Docker El Stack para el Desarrollo Simbionte
  • 3. Un poco de historia En 2009 irrumpen nodejs y mongodb. En 2010 aparecen AngulaJS y Express. Poco después aparecen MEAN o METEOR. Los stacks de la década pasada, LAMP y WAMP junto con ExtJS y jQuery, dan paso en esta década a los stacks de desarrollo javascript: MEAN, METEOR, MERN Justo llegando al final, con la irrupción de VueJS aparece el stack VENoM
  • 4. ¿Preguntas? ⊗ Qué es ⊗ Para qué ⊗ Por qué ⊗ Qué se requiere ⊗ Qué desventajas tiene ⊗ Qué aporta en el mundo Cloud
  • 5. ¿Qué es? V.E.No.M. es el acrónimo de VueJS Express NodeJS y MongoDB Es un stack completo de desarrollo de aplicaciones web. ⊗ VueJS para el frontend ⊗ NodeJS con Express para el backend / API ⊗ MongoDB para la base de datos Eso como base. Junto a ellos pueden aparecer otras muchas dependencias.
  • 6. ¿Para qué? Para tener un entorno isomórfico de desarrollo javascript. Para tener el control de lo que haces en cliente y en servidor. Para tener el control de tus datos.
  • 7. ¿Por qué? ⊗ Porque al tener un desarrollo isomórfico puedes reutilizar clases, objetos, funciones e incluso dependencias… en front y en back. ⊗ Porque conforme tu aplicación crezca tendrás el control para implementar esas necesidades que van surgiendo inevitablemente. ⊗ Porque la base de datos es tuya y tener los datos alojados en sistemas de terceros supone asumir sus normas.
  • 8. ¿Qué “desventajas” tiene? ⊗ Requiere de conocimientos de front y back. ⊗ Tienes que ser Juan Palomo. ⊗ Como al personaje del comic, te acaba poseyendo.
  • 9. ¿Podemos mejorar el stack? Dockerizandolo, Porque así: ⊗ Mantiene las diferentes partes aisladas. ⊗ Entregas un desarrollo que garantizas que funciona. ⊗ Es escalable.
  • 11. ¿Qué vamos a hacer? 1. ¡Vamos a usar VENoM!. 2. scaffolding de un proyecto por defecto de Vue. 3. Un servidor de un API Rest sencillo. 4. Un servidor de mongoDB como base de datos. 5. Docker para separar los entornos de desarrollo, api y base de datos. 6. Docker-compose para orquestar todos los contenedores Docker.
  • 12. Lo básico 1. Instalamos docker y docker-compose: # sudo apt install docker docker-compose 2. Añadimos al usuario de ubuntu al grupo docker y reiniciamos # sudo usermod -aG docker $USER 3. En https://hub.docker.com/ podemos buscar imagenes de docker ya preparadas 4. Podemos comprobar qué imágenes tenemos con: # docker images
  • 13. Instalación de node y Vue # sudo apt install nodejs o bien # curl -OJ https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz # tar -xvf node-v10.13.0-linux-x64.tar.xz # sudo mv node-v10.13.0-linux-x64 /opt # sudo chown $USER.$USER /opt/node-v10.13.0-linux-x64 # sudo ln -s /opt/node-v10.13.0-linux-x64 /opt/node # export PATH=$PATH:/opt/node/bin/:/opt/node/lib/node_modules/ # npm install -g @vue/cli # vue -V
  • 14. Creamos workspaces. Instalamos Express # mkdir proyecto # cd proyecto # mkdir api # cd api # npm init -y # npm install --save express body-parser method-override
  • 15. Creamos proyecto en Vue # cd .. # npm install -g @vue/cli # vue -V # vue create front -d # cd front # npm run serve
  • 16. Creamos Dockerfile.front para vue # cd .. Creamos y editamos Dockerfile.front FROM node:8 WORKDIR /usr/src/app EXPOSE 8080 CMD [ "npm", "run", “serve” ]
  • 17. Construimos y ejecutamos Docker para vue Para construir la imagen de docker: # docker build -f Dockerfile.front -t front-vue . Para crear el contenedor a partir de esa imagen: # docker run -d --name "front-vue-container" -p 8080:8080 -v $(pwd)/front:/usr/src/app front-vue Comprobamos: # docker ps # docker inspect front-vue # docker logs front-vue
  • 18. Creamos Dockerfile.front2 para vue Podemos hacer que se instale Vue en el contenedor, para usar solamente las carpetas con el código. Creamos y editamos el fichero Dockerfile.front2: FROM node:8 WORKDIR /usr/src/app COPY front/package.json ./ COPY front/package-lock.json ./ RUN npm install EXPOSE 8080 CMD [ "npm", "run", “serve” ]
  • 19. Construimos y ejecutamos Docker para vuePara construir la imagen de docker: # docker build -f Dockerfile.front2 -t front-vue2 . Para crear el contenedor a partir de esa imagen: # docker run -d --name "front-vue-container2" -p 8080:8080 -v $(pwd)/front/public:/usr/src/app/public -v $(pwd)/front/src:/usr/src/app/src front-vue2 Comprobamos: # docker ps # docker inspect front-vue # docker logs front-vue
  • 21. Construimos el api con node y express const express = require('express'); const app = express(); const PORT = 3000; app.get('/', function(req, res) { res.json({"hello": "express with mongo"}); }); app.get('/misdatos', function(req, res) { res.json({"misdatos": "son estos"}); }); app.listen(PORT, function() { console.log('Your node js server is running on PORT:', PORT); });
  • 22. Construimos el contenedor del api Vamos a crear un nuevo contenedor con node y express. Creamos el fichero Dockerfile.api: FROM node:8 WORKDIR /usr/src/app COPY api/package.json ./ COPY api/package-lock.json ./ COPY api/index.js ./ RUN npm install EXPOSE 3000 CMD [ "node", "index.js" ]
  • 23. Construimos el contenedor del api Para construir la imagen de docker: # docker build -f Dockerfile.api -t api-express . Para crear el contenedor a partir de esa imagen: # docker run -d --name "api-express-container" -p 3000:3000 api-express Comprobamos: # docker ps # docker inspect api-express # docker logs api-express
  • 24. Construimos el contenedor de mongo Para la parte de mongo, como no vamos a configurar nada en nuestro Dockerfile podemos hacer simplemente: # docker pull mongo Esto nos baja la imagen de mongodb que luego podremos usar para construir nuestro contenedor.
  • 25. Construimos el contenedor de mongo Para crear el contenedor a partir de esa imagen: # docker run -d --name "mongo-container" -it mongo Comprobamos: # docker ps # docker inspect mongo # docker logs mongo # mongo >
  • 27. Configuración de Docker-compose La configuración de docker-compose se hace mediante un fichero .yml En este indicamos las build de los contenedores docker que vamos a usar y la relación entre ellos.
  • 28. Docker-compose.yml version: "3" services: front-vue: container_name: front-vue-container build: context: . dockerfile: Dockerfile.front2 volumes: - ./front/public:/usr/src/app/public - ./front/src:/usr/src/app/src ports: - "8080:8080" links: - api-rest api-rest: container_name: api-rest-container restart: always build: context: . dockerfile: Dockerfile.api ports: - "3000:3000" links: - mongo mongo: container_name: mongo-container image: mongo volumes: - ./mongo.db:/data/db ports: - "27017:27017"
  • 29. Construimos el contenedor del api y mongo Lo primero nos aseguramos que no tenemos contenedores/imagenes creados. Para generar los contenedores coordinados con docker-compose: # docker-compose up -d Comprobamos: # docker-compose ps Probamos a entrar en: http://localhost:8080 http://localhost:3000 http://localhost:27017
  • 30. Cuando terminemos nuestra app... ⊗ Al terminar deberemos cambiar el dockerfile de VUE para que clone un repo y para que haga la build. ⊗ Y en vez de usar el servidor de vue-cli lo ideal sería usar un servidor como NGINX ⊗ Si usamos el servidor NGINX podemos usar este para que haga de proxy con nuestro servidor REST, de manera que todas las llamadas, por ejemplo a /api, las encamine hacia el puerto 3000. ⊗ Lo que entregamos para subir a otros entornos pre-productivos es un repo que contiene los ficheros Dockerfile y docker- compones.yml ⊗ Con esto garantizamos que siempre, siempre, va a funcionar en cualquier lado.
  • 31. Se termino la frase “En mi local funciona” Si funciona en tu Docker, siempre funciona
  • 32. BONUS TRACK Demo de una app completa. He usado un fork del vue-pokedex de @rubnvp (https://github.com/manufosela/vue-pokedex)

Notas del editor

  1. Para el backend, lo complemento con Nginx Para la base de datos lo complemento con Mongoose
  2. Ya tenemos el entorno de desarrollo de la parte Front con Vue. Ahora preparemos el entorno para el api y la base de datos
  3. La base de datos vamos a montarla directamente con un contenedor, porque node, vue… lo uso no me importa tenerlos instalados en mi portatil. Pero una base datos mongo… no me apetece.
  4. Ya tenemos el entorno de desarrollo de la parte Front con Vue. Ahora preparemos el entorno para el api y la base de datos
  5. Ya tenemos el entorno de desarrollo de la parte Front con Vue. Ahora preparemos el entorno para el api y la base de datos
  6. Ya tenemos el entorno de desarrollo de la parte Front con Vue. Ahora preparemos el entorno para el api y la base de datos