Configurando dockerFile para API com NodeJs e prisma
Vamos começar buscando uma imagem do node para que possamos utilizar os comando dentro do container Docker:
FROM node:16.15-alpine
O "FROM" no docker, serve para especificar qual imagem eu vou utilizar nesse conteiner, que no meu caso, é uma imagem do NodeJs na versão 16.15 que é uma das versões LTS. O -alpine eu gosto de utilizar, pois ele me traz uma imagem mais leve para ajudar quando subir o container.
Precisamos agora, dizer qual a pasta onde nosso projeto vai ficar, e configuramos assim:
WORKDIR /app
O "WORKDIR" é utilizado para definir a pasta onde o seu projeto vai estar, dentro do docker.
O próximo passo, é copiar alguns arquivos importantes para dentro da pasta que definimos no WORKDIR. São elas: Todos os arquivos package.json, tudo que estiver dentro da pasta prisma, e por fim, o tsconfig.json.
Para copiar esses arquivos, nós utilizamos o COPY da lista de comando do Docker, e a estrutura fica assim:
COPY [pasta ou arquivo] ./
O ./ se refere a pasta que definimos dentro do WORKDIR, e que estaremos enviado o arquivo para a pasta root do arquivo, no nosso caso, a pasta /app.
Para copiar todos os outros que foram citados acima, é só seguir o mesmo padrão:
COPY package.json ./
COPY package-lock.json ./
COPY tsconfig.json ./
COPY ./prisma ./prisma
Esse último caso específico onde eu faço a cópia de todos os arquivos dentro da pasta Prisma do meu projeto, e eu não só envio para dentro da pasta root, como também eu crio uma sub-pasta dentro do nosso "app", também chamado de prisma, para manter o padrão. Então quando o container for criado, dentro dele vai ter um caminho /app/prisma onde todos os arquivos que utilizo no meu projeto local, na minha pasta prisma, estarão disponíveis também, dentro do container docker.
Próximo passo é rodar um comando para o docker lançar no terminal, para que ele baixe todas as dependências do nosso projeto, e também copiar tudo que foi alterado após a instalação das dependências, para dentro da pasta do nosso container. Basta utilizar:
RUN npm install
O comando "RUN" é utilizado quando precisamos que o Docker rode um comando no terminal dentro do container.
COPY . ./
Note que eu estou utilizando o "." para informar que eu quero copiar tudo do meu projeto local, para dentro da nossa pasta do container.
Para finalizar, basta apenas mais um passo:
Precisamos agora startar o nosso projeto dentro do container do Docker, e para isso, vamos utilizar o comando "CMD". Diferente do "RUN" que é utilizado para rodar um comando no terminal para a construção da imagem, o comando "CMD" é utilizado para rodar um comando quando a imagem estiver carregada dentro do container. Vamos utilizar
CMD ["npm", "start"]
Note que a sintaxe é bem diferente do comando "RUN". Nesse caso eu preciso colocar cada parte do meu comando como uma lista, para que o Docker junte tudo no final.