Docker - Tutorial Dockerfile
Anderson Irias - 19/09/2020
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.