Otimizações a nível de aplicação
Para otimizar o tamanho das imagens Docker a nível de aplicação, é crucial identificar e remover qualquer componente ou dependência que não seja essencial para a execução da aplicação em produção. Isso pode ser alcançado por meio de várias práticas, como a utilização de comandos específicos durante o processo de construção da imagem.
Um exemplo claro disso é o uso de comandos como workspaces focus --production
ou npm-ci --production
para instalar apenas as dependências necessárias para a execução da aplicação em produção, excluindo assim as dependências de desenvolvimento que não são relevantes para o ambiente de produção. Essa abordagem reduz significativamente o número de pacotes e bibliotecas incluídos na imagem, resultando em uma imagem mais leve e eficiente.
Além disso, é importante considerar a organização dos estágios de construção da imagem. Em alguns casos, pode ser necessário criar estágios separados para diferentes partes do processo de construção, como configuração, compilação e produção. Isso permite otimizar cada estágio individualmente e reduzir o tamanho final da imagem.
Outra prática importante é limpar os artefatos temporários e caches gerados durante o processo de construção. Isso pode ser feito por meio de comandos como yarn cache clean
ou npm clean
, que removem arquivos desnecessários e reduzem ainda mais o tamanho da imagem final.
FROM node:18-alpine3.19 AS build
WORKDIR /usr/src/app
COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn ./.yarn
RUN yarn
COPY . .
RUN yarn run build
RUN yarn workspaces focus --production && yarn cache clean
FROM node:18-alpine3.19
COPY --from=build /usr/src/app/package.json ./package.json
COPY --from=build /usr/src/app/dist ./dist
COPY --from=build /usr/src/app/node_modules ./node_modules
EXPOSE 3000
CMD ["yarn", "run", "start:production"]
Nota
É importante ressaltar que a otimização do tamanho das imagens Docker não se resume apenas ao processo de construção da imagem, mas também envolve a escolha cuidadosa das bibliotecas e frameworks utilizados na aplicação. Optar por bibliotecas mais leves e eficientes pode ajudar a reduzir o tamanho da imagem e melhorar o desempenho da aplicação como um todo.
Em resumo, otimizar o tamanho das imagens Docker a nível de aplicação requer uma abordagem cuidadosa e estratégica, que envolve identificar e remover qualquer componente ou dependência desnecessária, organizar os estágios de construção da imagem de forma eficiente e escolher bibliotecas e frameworks leves e eficientes. Ao seguir estas práticas, é possível criar imagens Docker mais leves, eficientes e fáceis de gerenciar.