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