Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 10, 2022 07:20 pm GMT

Dockerizando sua Aplicao

Container Docker

Docker uma ferramenta sensacional e a cada dia que me aprofundo um pouco mais venho me supreendendo, e baseado nisso gostaria de compartilhar o conhecimento que venho adquirindo. Com esse artigo espero ajudar voc colocar sua aplicaes em contineres e a gerenciar vrios deles utilizando o Docker Compose.

Por que utilizar Docker?

Sempre me perguntava isso. Achava to fcil instalar todas as dependncias do projeto em minha mquina que nunca havia pensado nas vantagens de utiliza-l, porm um script Docker resolve isso de forma muito mais rpida.

Imagina voc construindo uma aplicao utilizando vrios bancos de dados diferentes. Voc teria que instalar cada um deles em sua mquina para poder desenvolver o projeto, at ai parece tudo bem, mas se este projeto fosse desenvolvido por um time? Cada nova dependncia far com que todos os membros do time tenham que instal-las, se o time possuir SOs (Sistemas Operacionais) diferentes bem provvel que a forma de instalao seja diferente, isso vai dar trabalho, no? E ai vem o Docker, ele cria contineres para voc de forma que sua aplicao ser executada em um ambiente isolado, como se estivesses em outra mquina ou em um servidor.

Outra vantagem que voc no vai precisar instalar nada em sua mquina, apenas o Docker, isso evita poluir o seu ambiente com as instalaes de diversas aplicaes e caso instale alguma imagem que no queira voc pode exclui-la via interface.

Tanto o NodeJS, quanto o MongoDB, possuem imagens no Docker, assim como diversas outras tecnologias, voc pode encontrar imagens noDocker Hub, l existem centenas de milhares delas, mas vamos ao que interessa, como utilizar tudo isso?

Exemplo prtico

Para entendermos como utiliz-lo criei vamos usar como exemplo umapequena API em NodeJS. A Aplicao consiste em umCRUD, e nossa plicao far uso do MongoDB para armazenar nossos dados. Para esse tutorial voc vai precisar ter apenas o Docker e o Docker Compose instalados. (Sugiro que confira o modo de instalao do Docker para Ubuntu, Windows ou Mac e para instalar o Docker Compose em qualquer verso)

Vamos utilizar o Docker Compose para gerenciar nossos Contineres.

Dockerizando

Vamos comear configurando o continer de nossa aplicao Node.js, para isso vamos criar um arquivo com o nomeDockerfilena raiz da aplicao com o seguinte contedo:

FROM node:latestRUN mkdir -p /usr/src/appWORKDIR /usr/src/appCOPY package.json /usr/src/app/RUN npm installCOPY . /usr/src/app

Vamos entender o que esta acontecendo:

  • FROMserve para dizermos qual imagem vamos utilizar no nosso continer, nessa caso vamos utilizar do prprio NodeJS contendo a sua ultima verso.
  • RUN utilizado sempre que queremos executar um comando dentro do continer, criar uma pasta, baixar as dependncias do NPM, etc
  • WORKDIRdefine o diretrio de trabalho onde vamos manter nossa aplicao, a partir da declarao dele os comandosRUNeCMDsero executados no caminho definido atravs deste comando.
  • COPYserve para copiarmos nossas arquivos, dessa forma copiamos o nosso cdigo para o nossoWORKDIR.

Temos o nosso script para montar um continer Docker, mas nossa aplicao ainda no funciona, falta nosso banco de dados. Para ele vamos criar um novo continer, criaremos um arquivo chamadodocker-compose.ymlcom o seguinte contedo:

version: "2"services:  app:    container_name: "app"    restart: always    build: .    environment:      - MONGO_URI=mongodb://mongo/catstore      - PORT=3000      - NODE_ENV=production    ports:      - "3000:3000"    links:      - mongo    depends_on:      - mongo    command: npm start  mongo:    container_name: "mongo"    image: mongo    ports:      - "27017:27017"    command: mongod --smallfiles --logpath=/dev/null # --quiet

Funciona da seguinte forma:

  • versionserve apenas para dizermos qual a verso do Docker Compose estamos utilizando.
  • servicesso os nossos contineres,app nossa aplicao em NodeJS e temos mais um chamadomongoque o nosso banco de dados.
  • container_nameserve para darmos um nome ao nosso continer, umalias.
  • restartdizemos quando queremos reiniciar nossa aplicao, com oalwaysdizemos que sempre, o padro noque faz com que o continer no reinicie em nenhuma circunstncia.
  • builddefinimos onde se encontra oDockerfiledo continer*.*
  • enviroment onde listamos as variveis de ambiente do continer, por exemplo a URI de acesso ao nosso banco, aqui temos um detalhe importante, a URI deve conter o nome do continer onde esta o banco, para o nosso script mongo, fica assim:mongodb://mongo/catstore.
  • portscolocamos as portas que queremos expor do nosso continer, primeiro vem a porta do nosso continer e depois a do host, nesse caso nossa prpria mquina, dessa forma a nossaappsera acessvel na porta3000de nossa mquina.
  • linksdefinimos a quais servios nosso continer estar ligado.
  • depends_ondizemos que o nosso continer depende de outro, assim quando subirmos ele suas dependncias sero levantadas primeiro.
  • imagepodemos definir qual imagem vamos utilizar no servio, para o nosso serviomongovamos utilizar a imagem tambm chamamongo.
  • commanddizemos qual comando vamos executar ao subir aquele servio.

Agora que entendemos cada linha vamos botar tudo isso para funcionar, com o comandodocker-compose build appvamos construir nosso servioapp*e como ele depende do serviomongo*esse sera priorizado e executando primeiro, nessa hora que sera feito o download das imagens e a execuo nosso script.

Quando os servios estiverem prontos utilizamos o comandodocker-compose up apppara inicializar nossa aplicao, nesse momento que a instruoCMDcontendo onpm start executada.

Assim que terminar de utilizar os contineres o comandodocker-compose downvai parar e remover todos, caso deseja apenas parar-los use odocker-composestop.

Ambiente de desenvolvimento

Da forma que criamos nosso continer, sempre que alterarmos algum cdigo vamos executar obuild Onodemonpode nos ajudar, ele uma ferramente que sobe o nossa aplicao em Node e a qualquer alterao em algum arquivo reinicia o servidor para ns.

Isso pode dar um pouco de dor de cabea, no basta apenas executar a aplicao comnodemon, existem alguns detalhes que vamos ver abaixo, vamos adicionar ento o nosso novo servioapp-dev:

app-dev:    container_name: "app-dev"    restart: always    build: .    environment:      - MONGO_URI=mongodb://mongo/catstore      - PORT=3001      - NODE_ENV=developer    ports:      - "3001:3001"      - "5555:5555"    links:      - mongo    depends_on:      - mongo    command: node_modules/.bin/nodemon -L --inspect=5555 index.js    volumes:      - ./:/usr/src/app

Nessa configurao adicionamos o campovolumes, ele necessrio para dizermos onde o nosso source se encontra no HOST, funciona assim primeiro o caminho do HOST, no caso.e depois o caminho no continer que /usr/src/appseparados por:,outro detalhe o uso daflag-Lpara habilitar o modolegacydonodemon, dessa forma a pesquisa por mudanas de arquivos sera feita outra forma.

Agora basta executardocker-compose builde depoisdocker-compose up app-devpara levantarmos nossa aplicao para desenvolvimento, tente mudar algo no cdigo e veja sua aplicao reiniciar.

Consideraes

Assim temos nossa aplicao em NodeJS dockerizada, criamos um continer para o nosso ambiente de desenvolvimento*,isolamos o que comum nos contineres em nossoDockerfilee o que diferente deixamos em nossodocker-compose.yml.*

Aqui utilizamos umastackNodeJS + MongoDB mais isso no impede voc de utilizar outras tecnologias, fato que o Docker uma ferramenta incrvel onde facilita bastante o desenvolvimento e cria uma certa camada de segurana, por exemplo pense que est aprendendo sobre Postgres voc vai precisar somente baixar a imagem oficial e inicia-l que vai estar disponivel no seu localhost para configurar no seu SGBD favorito preparado em minutos (ou at segundos) e caso no queria utilizar a imagem mais voc pode para-l ou simplesmente excluir. Sugiro muito que o Docker esteja nos seus planos de estudos e para isso a documentao dele te direciona de uma forma incrvel.

Fontes onde pesquisei esse contedo:


Original Link: https://dev.to/jhonywalkeer/dockerizando-sua-aplicacao-2d24

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To