Desarrollo de aplicaciones con Docker

Vamos a ver un ejemplo de cómo desarrollar una aplicación en Node.js con Docker.

Este sería el development.Dockerfile para crear la imagen de nuestra app:

FROM node:8

COPY ["package.json", "package-lock.json", "/usr/src/"]

WORKDIR /usr/src

RUN npm install --only=production

COPY [".", "/usr/src/"]

RUN npm install --only=development

EXPOSE 3000

CMD ["npx", "nodemon", "index.js"]

Y el production.Dockerfile:

FROM node:10 as builder

COPY ["package.json", "package-lock.json", "/usr/src/"]

WORKDIR /usr/src

RUN npm install --only=production

COPY [".", "/usr/src/"]

RUN npm install --only=development

RUN npm run test

# Productive image
FROM node:10

COPY ["package.json", "package-lock.json", "/usr/src/"]

WORKDIR /usr/src

RUN npm install --only=production

COPY --from=builder ["/usr/src/index.js", "/usr/src/"]

EXPOSE 3000

CMD ["node", "index.js"]

Cuando tengamos listos nuestros archivos Dockerfile, creamos la imagen:

docker build -t node_app -f <dockerfile> .

Y después creamos el contenedor:

docker run --name <app-name> --rm -p 3000:3000 -v $(pwd):/usr/src node_app

Docker Compose

Otra forma mucho más rápida de manejar los contenedores de una aplicación es utilizando Docker Compose, mediante el archivo docker-compose.yml:

version: "3"

services:
    app:
    build: .
    environment:
        MONGO_URL: "mongodb://db:27017/test"
    depends_on:
        - db
    ports:
        - "3000:3000"
    volumes:
        - ".:/usr/src"
        - "/usr/src/node_modules"
    db:
    image: mongo

Une vez lo tengamos listo y queramos crear los servicios correspondientes:

docker-compose up