Para quem caiu de paraquedas neste artigo e não sabe o que é Docker, no artigo O que é Docker? Virtualização e Container eu faço uma básica explicação teórica sobre o Docker. Agora vamos ver na prática como realizar o deploy, e rodar uma aplicação em Node.js utilizando o Docker.
Neste artigo estou utilizando o sistema operacional Linux Lubuntu. Primeiramente realize a instalação do Docker caso não o possua. Para instalação veja no site oficial do Docker um passo a passo de como instalar e configurar o Docker em seu sistema operacional.
Após realizar a instalação do Docker, pelo terminal Linux vamos realizar o download da imagem do Node.js. Uma imagem Docker é um template utilizado para a criação de um container. Nela temos todos os arquivos e softwares, necessários para o funcionamento de nosso container. O Docker hub é um repositório onde existem várias imagens já prontas, que podem ser utilizadas na criação dos containers. Vamos utilizar a imagem oficial do Node.js como base, para criarmos nossa própria imagem de nossa aplicação. Utilize o comando abaixo para download da imagem do Node.js:
docker pull node
Após o download para visualizar as imagens disponíveis em nossa máquina utilize o comando:
docker images
Aplicação Node.js
Para exemplificar este artigo, vamos utilizar a aplicação criada no artigo: API HTTP+REST – Conceito e exemplo em Node.js. Realize o download ou clone a aplicação no meu GitHub: https://github.com/andersonirias/api-http-rest. Depois acesse o diretório raiz da aplicação onde vamos criar o arquivo Dockerfile.
Dockerfile
O Dockerfile é o arquivo que utilizamos, para colocar os comandos utilizados no processo de criação de uma nova imagem Docker. Crie um arquivo chamado Dockerfile e insira o conteúdo abaixo no mesmo.
FROM node # Diretório da aplicação WORKDIR /usr/src/app # Realiza a cópia do arquivo package que contém as dependências do projeto COPY package*.json ./ # Realiza a instalação das dependências do projeto RUN npm install # Realiza a cópia dos arquivos do projeto COPY app.js . COPY usuarios.json . EXPOSE 9090 CMD [ "node", "app.js" ]
O Dockerfile possui vários comandos que podem ser utilizados na criação da imagem, em nosso exemplo utilizamos os comandos:
- FROM – Inicia um novo estágio de construção é define uma imagem base para as próximas instruções.
- WORKDIR – Define o diretório onde está a aplicação.
- COPY – Copia arquivos para a imagem.
- RUN – Executa o comando e confirma os resultados.
- EXPOSE – Informa ao Docker quais portas a aplicação utiliza.
- CMD – Executa um comando na inicialização do conteiner.
Agora para criarmos nossa imagem, estando no mesmo diretório onde se encontra o Dockerfile na raiz do projeto utilizamos o comando:
docker build -t api-http-rest .
Substitua o api-http-rest pelo nome que deseja para a imagem. Uma observação não se esqueça do . no final do comando, ele indica que o arquivo Dockerfile que será utilizado para a construção da imagem, está no diretório onde o comando foi executado. Utilize o comando abaixo para visualizar a nova imagem que foi criada:
docker images
Criando um container Docker
Utilize o comando docker run para criar e dar start ao novo container com base na imagem que criamos:
docker run -p 9090:9090 --name node_api -d api-http-rest
No comando docker run acima, utilizamos as seguintes opções:
- -p – Realiza o redirecionamento de uma porta pública da máquina host para uma porta privada dentro do container.
- –name – Nomeia um container.
- -d – Detached. Os containers iniciados no modo detached, são encerrados quando seu processo raiz utilizado na execução do container é encerrado. Ou seja o container é atrelado ao seu processo raiz no caso de nosso exemplo ao comando node app.js.
No final do comando temos o nome da imagem utilizada para a criação do container. Para visualizar o novo container criado utilize o comando:
docker ps
Para visualizar as informações que nossa aplicação imprime no console utilize o comando:
docker logs node_api
Substitua node_api pelo nome do container. No artigo API HTTP+REST – Conceito e exemplo em Node.js é descrito como podemos realizar um teste completo de nossa aplicação. Mas caso deseje realizar apenas um teste rápido, utilize o curl ou mesmo abra em seu navegador de internet http://localhost:9090/api?usuario_id=1.
curl -i http://localhost:9090/api?usuario_id=1
Assim concluímos este tutorial básico de utilização do Docker. Para mais informações sobre comandos veja no site oficial do Docker.
Artigo sensacional, meu irmão! Estava precisando mesmo de uma explicação dessas. Valeu! Sucesso!