Esse post vai ser mais um exemplar explicativo do meu repositório Cinto de Utilidades Docker. Basicamente vamos utilizar o Docker para construir um ambiente de uma API REST utilizando NodeJS e MongoDB, com exemplos práticos de praticamente tudo que você precisa para construir um ambiente completo para seu Backend em Node e Mongo. Basicamente nosso diretório irá conter uma pasta app, onde iremos deixar o código da nossa API, uma Dockerfile para o container do Node e um docker-compose.yml que vai orquestrar nossa aplicação. Basicamente, a estrutura de diretório é esta:
Link dos Exemplos no Github
Node
Vamos containerizar uma API completa. Nesta caso, no diretório do projeto, vamos criar a pasta app, dentro dela devem existir dois arquivos, um package.json que irá guardar todos os componentes que iremos utilizar na nossa aplicação e o arquivo app.js, que irá conter todo o código da nossa aplicação necessariamente../app/app.js
Este é o Código da API que vamos trabalhar com o Docker. Pode parecer grande demais para um exemplo, mas é uma forma de mostrar o funcionamento de ponta a ponta de um código no Docker.
Basicmente é uma API Rest bem simples com um schema de tasklist já definido que vai gerenciar as informações do MongoDB. Usei essa API na POC do meu TCC na FATEC Itu. Pode ver aqui.
./app/package.json
Aqui iremos satisfazer todas as dependências do nosso projeto. Sem segredo por aqui.
Docker
Dockerfile
Veremos a Dockerfile, neste exemplo estaremos baixando uma máquina já preparada com o Node direto do Dockerhub. Pegaremos a versão Latest, que atualmente faz referência a versão 7.1 do Node, copiaremos o arquivo package.json do nosso projeto e irá instalar todas as dependências do mesmo globalmente, e vamos expor a porta 8080 para construção da nossa API e a porta 5858 para debug. FROM node:latest
RUN mkdir -p /usr/src/app
RUN npm install nodemon -g
WORKDIR /usr/src/app
COPY app/package.json /usr/src/app/package.json
RUN npm install -g
EXPOSE 8080
EXPOSE 5858
CMD ["npm", "start"]
Docker Compose
Usaremos o arquivo docker-compose.yml para baixar a versão 3.0 do Mongo, e liberar a porta 27017 do mesmo para a nossa máquina. Em seguida vamos criar/mapear o diretório data, que se não existir será criada no diretório do projeto para pasta /data/db de dentro do container. Essa pasta irá gravar o conteúdo das collections do Mongo, e mapeando para um diretório externo, irá garantir a persistência dos dados do mesmo.Em seguida iremos buildar nosso Dockerfile, mandando nosso local de build para a pasta local(.), customizando o comando de execução do container para satisfazer as dependências do projeto com o npm install e executar o nodeamon no nosso arquivo servidor do Node.
A pasta que vai ser mapeada para dentro do container é pasta app, que contém todo o nosso projeto do Node. Por ultimo, linkamos o serviço da nossa aplicação para se comunicar com o container do Mongo.
mongo:
image: mongo:3.0.4
ports:
- "27017:27017"
volumes:
- './data:/data/db'
application:
build: .
command: bash -c "npm install; nodemon app.js --color=always"
ports:
- "8080:8080"
- "5858:5858"
volumes:
- ./app:/usr/src/app
links:
- mongo
Testando
Para buildar nosso projeto, iremos utilizar o Docker Compose como de costume.
# docker-compose build
# docker-compose up
Agora com ajuda do Postman, ou qualquer cliente REST, podemos fazer requisições para todos os Endpoints da API, pra ver funcionando. Por exemplo, uma requisição POST para o endpoit /api/add com o conteúdo decricacao e concluido por POST, Ou pegar todos registros por GET via /api/all. Exemplificando, o comportamento é esse, mas você pode explorar todos os métodos da API pra ver que funciona. ;)
Espero ter ajudado ;)
Este comentário foi removido pelo autor.
ResponderExcluir