Saltar a contenido

Estructura con entornos

Ahora vemos el proyecto consola-control pero mantenido en dos entornos:

  • development
  • production

y su estructura quedaría de la siguiente forma:

consola-control/
├── common
│   └── docker-compose.yml
│   └── nginx.conf
├── development
│   ├── api
│   │   ├── Dockerfile
│   │   ├── package.json
│   │   └── src
│   │       └── index.js
│   └── docker-compose.yml
└── production
    ├── api
    │   ├── Dockerfile
    │   ├── package.json
    │   └── src
    │       └── index.js
    └── docker-compose.yml

Development

El common/docker-compose.yml levanta el proxy reverso solamente que es común a ambos entornos

web:
  image: nginx
  ports:
    - 8082:80
  volumes:
    - nginx.conf:/etc/nginx/nginx.conf

El development/docker-compose.yml extiende common, presenta el filesystem del host en el dentro del contenedor (para seguir desarrollando) y utiliza redis desde el host.

web:
  extends:
    file: ../common/docker-compose.yml
    service: web
  volumes_from: 
    - api
  links:
    - api:8080

api:
  build: api
  volumes:
    - .:/usr/src/app

Para crear la imagen el development/api/Dockerfile no copia los códigos dentro, ya que serán montados al lanzar el entorno.

FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
CMD [ "npm", "start" ]

Para lanzar el entorno, solamente ejecutar:

cd development
docker-compose up -d

Producción

El production/docker-compose.yml extiende common pero utiliza la imagen completa, además de tener el servicio redis:

services:
  frontend:
    extends:
      file: ../common/docker-compose.yml
      service: web
    build: api
    links:
      - backend:redis
    environment:
      - VAR1=value
    networks: 
      - consola-control
    depends_on:
      - backend
    restart: always

  backend:
    image: redis:3
    networks:
      - consola-control
    restart: always

networks:
   consola-control:

Y el archivo production/api/Dockerfile es el mismo del capítulo anterior, donde todo el código es COPY a la imagen antes de lanzarla.

FROM node:8
MAINTAINER Great Dev <gd@fix-it.com>
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "npm", "start" ]