Melhores práticas do Docker: Reduza o tamanho da imagem + perguntas comuns da entrevista
Ao trabalhar com imagens do Docker na produção, o tamanho é muito importante. Imagens de Large significam tempos de construção mais longos, implantações mais lentas e custos de armazenamento ainda mais altos em registros de contêineres, como o GCP Artifact Registry ou o Docker Hub. Em um de nossos projetos, o tamanho da imagem cresceu além de 1,9 GB e o otimizamos até apenas 495 MB – uma redução de 75%. Aqui está como fizemos isso. Bônus: compartilharam perguntas e respostas comuns de preparação inteira no final. 🔹 Por que o tamanho da imagem do docker é importante ⏱ Builds mais rápido e os pipelines de CI/CD 📦 Menos uso de armazenamento em registros 🚀 implantações e escalamento mais rápidos 💰 custos mais baixos de nuvem 🔒 Surface menor de ataque 🔹 Nosso ponto de partida começamos com este dockerfile básico: do Google/Cloud-SDK: Workdir/App cópia mais recente. . Execute o PIP Install -R requisitos.txt cmd [“python3”, “app.py”]
Digite Modo de tela cheia de saída do modo de tela cheia ❌ Problemas com essa abordagem Google/Cloud-SDK: mais recente é ~ 3 GB 😱 Copiar tudo ao mesmo instalou apenas o que precisamos. ✅ Dockerfile otimizado do Python: 3.12-Slim WorkDir /App # Instale o Gcloud SDK (em vez de usar 3 GB do Google /Cloud-SDK Image) Execute APT-Get Update && \ apt-get Install -y apt-transport-https caercertificates gnupg curl && \ oto “Deb [signed-by=/usr/share/keyrings/cloud.google.gpg] cloud-sdk main” | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \ curl -fsSL /doc/apt-key.gpg | gpg –dearmor -o /usr/share/keyrings/cloud.google.gpg && \ apt-get update && \ apt-get install -y google-cloud-sdk && \ rm -rf/var/lib/apt/lists/* # Requisitos de cópia primeiro (para cache) Requisitos de cópia.txt [“python3”, “app.py”]
Digite o modo de saída do modo de tela cheia 🔹 Por que isso funciona com imagem base fina e fina: 3.12-SLIM é apenas 124 MB vs Google/Cloud-SDK: mais recente em ~ 3 GB. Adicionamos apenas as ferramentas do Gcloud de que precisamos (Gsutil, Gcloud SQL, etc.). Requisitos de cópia em camadas favoráveis ao cache.TXT Primeiro → Instalação PIP é armazenada em cache até que as dependências mudem. As alterações do código do aplicativo não acionam a dependência de reinstalação. .dockerignore otimizationa .dockerignore O arquivo impede que arquivos desnecessários sejam copiados na imagem: __pycache __/ *.pyc *.pyo *.pyd .python .git .vscode .ds_store Entre no modo de tela completa Saia do modo de tela completa, isso mantém os arquivos desnecessários da imagem. Nenhuma instalação de pip pip cache-não-cache-DIR evita deixar centenas de MB em rodas em cache. APT Cleanup RM -rf/var/lib/apt/lists/* mantém as camadas magras. 📊 Antes de vs vs após o tamanho da versão Notas Testv1.5.0 1,96 GB Google completo/nuvem-SDK, sem limpeza v1.6.9 1,36 Gb Base fina, otimização parcial Testv1.4.1 495 Mb Base slim + cache de cache + .Dockerignore + limpeza 💡 Resultado: 75% de tamanho de tamanho 🚀 3x mais de cache +. Perguntas sobre otimização de imagens do Docker Se você estiver se preparando para entrevistas do DevOps/SRE, espere perguntas como: Q1. Como você reduz o tamanho da imagem do Docker? Use imagens base finas. Compilações com vários estágios. .dockerignore. Remover dependências no tempo de construção. Caches limpos (pip, apt). Q2. Por que copiar requisitos.txt separadamente antes do código do aplicativo? Para alavancar o cache de camada do Docker → Reinstalar apenas os deícidos quando os requisitos mudarem. Q3. Qual é o papel de .dockerignore? Impede que arquivos desnecessários (como .git, logs, caches) sejam copiados → imagem menor e mais limpa. Q4. Quando você deve usar construções em vários estágios? Ao compilar dependências (vá, Java, C extensões). Primeiro estágio: construa artefatos. Segundo estágio: copie apenas binários/libs em uma imagem mínima de tempo de execução. Q5. Por que não usar o Google/Cloud-SDK: mais recente diretamente? É enorme (~ 3 GB). A instalação apenas exigia componentes gcloud no Python: Slim mantém a imagem muito menor. 🚀 Pensamentos finais Otimizando o Dockerfiles não é apenas a economia de espaço – afeta a velocidade de IC/CD, a produtividade do desenvolvedor e os custos da nuvem. Ao combinar imagens finas, cache de camadas, .dockerignore e instalações mínimas, você pode cortar dramaticamente os tamanhos de imagem.
Fonte