Header Ads Widget

Ticker

6/recent/ticker-posts

Conceptos básicos de Docker: Docker compose

 Docker Compose es una herramienta que le permite ejecutar aplicaciones de varios contenedores. Con compose podemos usar archivos yaml para configurar los servicios de nuestra aplicación y luego usando un solo comando crear e iniciar todos los servicios configurados. Utilizo mucho esta herramienta cuando se trata de desarrollo local en un entorno de microservicios. También es liviano y solo requiere un pequeño esfuerzo. En lugar de administrar cómo ejecutar cada servicio durante el desarrollo, puede tener el entorno y los servicios necesarios preconfigurados y concentrarse en el servicio que desarrolla actualmente.

Con docker compose podemos configurar una red para nuestros servicios, volúmenes, puntos de montaje, variables ambientales casi todo.
Para mostrar esto, vamos a resolver un problema. Nuestro objetivo sería extraer datos de mongodb utilizando grafana. Grafana no tiene soporte listo para usar para MongoDB, por lo tanto, tendremos que usar un complemento .

Primer paso crearemos nuestras redes. No es necesario crear una red ya que sus servicios, una vez iniciados, se unirán a la red predeterminada. Haremos una demostración del uso de redes personalizadas. Tendremos una red para servicios backend y una red para servicios frontend. Aparentemente, la configuración de la red puede ser más avanzada y especificar controladores de red personalizados o incluso configurar direcciones estáticas .

1
2
3
4
5
6
7
8
version: '3.5'
 
networks:
  frontend:
    name: frontend-network
  backend:
    name: backend-network
    internal: true

La red de backend será interna, por lo que no habrá conectividad saliente a los contenedores adjuntos.

Luego configuraremos nuestra instancia de mongodb.

01
02
03
04
05
06
07
08
09
10
11
12
13
version: '3.5'
 
services:
  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    volumes:
      - ${DB_PATH}:/data/db
    networks:
      - backend

Como ves, especificamos un volumen. Los volúmenes también se pueden especificar por separado y adjuntarlos a un servicio.
También usamos variables ambientales para la cuenta raíz, es posible que también haya notado que la contraseña se proporcionará a través de variables ambientales, es decir. MONGO_USER = root MONGO_PASSWORD = root docker-compose -f stack.yaml up. Lo mismo se aplica también a la ruta del volumen. Puede tener una configuración más avanzada para los volúmenes en su configuración de redacción y hacer referencia a ellos desde su servicio.

Nuestro próximo objetivo es configurar el servidor proxy que estará en el medio de nuestro servidor grafana y mongodb. Dado que necesita un Dockerfile personalizado para crearlo, lo haremos a través de docker-compose. Compose tiene la capacidad de activar un servicio especificando el archivo docker.

Así que comencemos con el Dockerfile.

01
02
03
04
05
06
07
08
09
10
11
FROM node
 
WORKDIR /usr/src/mongografanaproxy
 
COPY . /usr/src/mongografanaproxy
 
EXPOSE 3333
 
RUN cd /usr/src/mongografanaproxy
RUN npm install
ENTRYPOINT ["npm","run","server"]

Entonces agreguemoslo para componer

01
02
03
04
05
06
07
08
09
10
version: '3.5'
 
services:
  mongo-proxy:
    build:
      context: .
      dockerfile: ProxyDockerfile
    restart: always
    networks:
      - backend

Y lo mismo se hará con la imagen de Grafana que queramos utilizar. En lugar de usar una imagen grafana lista, crearemos una con el complemento preinstalado.

1
2
3
4
5
FROM grafana/grafana
 
COPY . /var/lib/grafana/plugins/mongodb-grafana
 
EXPOSE 3000
01
02
03
04
05
06
07
08
09
10
11
12
13
version: '3.5'
 
services:
  grafana:
    build:
      context: .
      dockerfile: GrafanaDockerfile
    restart: always
    ports:
      - 3000:3000
    networks:
      - backend
      - frontend

Vamos a envolverlos todos juntos

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: '3.5'
 
services:
  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    volumes:
      - ${DB_PATH}:/data/db
    networks:
      - backend
  mongo-proxy:
    build:
      context: .
      dockerfile: ProxyDockerfile
    restart: always
    networks:
      - backend
  grafana:
    build:
      context: .
      dockerfile: GrafanaDockerfile
    restart: always
    ports:
      - 3000:3000
    networks:
      - backend
      - frontend
networks:
  frontend:
    name: frontend-network
  backend:
    name: backend-network
    internal: true

Así que vamos a ejecutarlos todos juntos.

1
2
docker-compose -f stack.yaml build
MONGO_USER=root MONGO_PASSWORD=root DB_PATH=~/grafana-mongo  docker-compose -f stack.yaml up

Lo anterior se puede encontrar en github .

También puede encontrar útiles las imágenes de Docker , los contenedores de Docker y las publicaciones de registro de Docker .

Publicar un comentario

0 Comentarios