• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página

En Guillem, formación online

Aprende a aprender

  • Home
  • Cursos
  • blog
  • Tutoriales

Introducción a Docker Compose

octubre 19, 2021 by enguillem@gmail.com

En este tutoriar crearemos la típica aplicación web que hace un recuento de visitas.

Construiremos esta aplicación con node js y redis.

Node js será la parte que servirá la aplicación web y redis lo utilizaremos como base de datos para hacer el recuento de vistitas.

Aplicación web

Primero vamos a construir la aplicación web.

Para ello crearemos el directori visistas con mkdir visitas y abriremos una instancia de visual studio code en este directorio para empezar a trabajar.

package.json

Creamos el ficher package.json con el siguiente contenido.

{
    "dependencies": {
        "express":"*",
        "redis": "2.8.0"
    },
    "scripts": {
        "start": "node index.js"
    }
}

index.js

Crearemos ahora el fichero con el que iniciarà nuestro servidor.

const express = require("express");
const redis = require("redis");
const app = express();
const client=redis.createClient();
client.set('visits',0);
app.get('/',(req,res)=>{
    client.get('visits',(err,visits)=>{
        res.send('Number of visits is'+visits);
        client.set('visits',parseInt(visits)+1);
    });
});
app.listen(8081,()=>{
    console.log('Escuchado puerto 8081');
});

Creando Dockerfile

Vamos a crear un dockerfile para la aplicación web, de momento no estará relacionado con redis.

FROM node:alpine
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
CMD ["npm","start"]

Como podéis ver es muy similar al de los tutoriales anteriores.

Constuir la imagen

Para construir la imagen ejecutamos docker build .

No olvidemos que podemos etiquetar esta imagen con

dooker build -t enguillem/visitas:latest . (usad vuestro usuario de dockerhub)

Ahora tendremos que pensar de que forma podemos poner en marcha todo esto con otro contenedor que funcione con redis

Contenedor para redi

Si tratamos de arrancar la imagen así como está recibiremos un error de conexión al servidor redis.

Podríamos pensar que ejecutando un contendor con redis descargado de dockerhub ya podríamo funcionar.

Si lo hacemos en otro terminal tendríamos un servidor de redis corriendo

Si ahora volvemos a la imagen montada con Dockerfile y la volvemos a ejectuar seguiremos teniendo el mismo error, no hay una conexión con este contenedor redis.

Obtenemos el mismo error

Estos dos contenedores están totalmente aislados, debemos realizar algún tipo de conexión entre ellos.

Para ello utilizaremos una herramienta para este tipo de conexiones, docker-compose

Que es docker compose

Es un cliente instalado juntamente con docker

Sirve para ejecutar múltiples contenedores al mismo tiempo

Nos permite automatizar la ejecución de ‘docker run’

Lo que haremos es coger las instrucciones de build i run:

docker build -t enguillem/visits:latest
docker tun -p 8080:8080 enguillem/visits
-----------------------------------------
Las integramos en un --->> docker-compose.yml (sintaxis especial) i el cliente docker-compose se encargará de empaquetarlo todo

Que incluirá nuestro docker-compose.yml

version: '3'
services:
  redis-server:
    image: 'redis'
  node-app:
    build: .
    ports:
      - "4001:8081"

Docker compose creará dos contenedore en una misma red, la relación de puertos solamente es para nuestra máquina principal.

Ahora tenemos que modificar el fichero index.js para indicar donde ir a buscar el servidor de redis.

const express = require("express");
const redis = require("redis");
const app = express();
const client=redis.createClient({
    host: 'redis-server',

    port: 6379
});
client.set('visits',0);
app.get('/',(req,res)=>{
    client.get('visits',(err,visits)=>{
        res.send('Number of visits is'+visits);
        client.set('visits',parseInt(visits)+1);
    });
});
app.listen(8081,()=>{
    console.log('Escuchado puerto 8081');
});

Ejecutar todos los contenedores

construir los contenedore

docker-compose up

Lo primero que hace docker-compose es crear una red

Podemos ver todo lo que crea docker-compose, y el mesaje final parece que todo está funcionando

Como hemos cambiado el puerto del cliente debemos ir a la siguiente url

Si actualizamos varias veces se incrementa el número de visitas

Detener contenedores

Ejecutar en background

docker-compose up -d

Parar contenedores

docker-compose down

Archivado en: docker

Footer

Design

With an emphasis on typography, white space, and mobile-optimized design, your website will look absolutely breathtaking.

Learn more about design.

Content

Our team will teach you the art of writing audience-focused content that will help you achieve the success you truly deserve.

Learn more about content.

Strategy

We help creative entrepreneurs build their digital business by focusing on three key elements of a successful online platform.

Learn more about strategy.

Copyright © 2022 · enguillem.com theme on Genesis Framework · WordPress · Iniciar sesión