7.1 Imagem Base
As imagens base têm um papel importante na criação de imagens Docker, porque elas fornecem o ponto de partida pra build e definem o ambiente em que sua aplicação vai rodar. Fazer a escolha certa e configurar as imagens base de forma adequada pode impactar muito a performance, tamanho e segurança da imagem final. Nessa aula, a gente vai ver como escolher e configurar imagens base pro Docker.
Imagem base (ou imagem de base) — é uma imagem Docker usada como a camada inicial pra criar uma nova imagem Docker. Ela pode incluir um sistema operacional mínimo, ferramentas e bibliotecas necessárias ou até ser vazia (imagem scratch). A escolha da imagem base define quais recursos e pacotes estarão disponíveis no seu container por padrão.
Escolhendo a imagem base
Na hora de escolher a imagem base, você tem que levar em conta alguns fatores:
- Tamanho da imagem: Imagens menores carregam mais rápido, ocupam menos espaço no disco e podem acelerar o deploy das aplicações.
- Suporte e atualizações: Usar imagens oficiais com atualizações regulares dá mais segurança, corrige vulnerabilidades e garante mais estabilidade.
- Compatibilidade: A imagem base precisa incluir as bibliotecas e dependências necessárias pra sua aplicação funcionar direitinho.
Imagens base populares
1. Alpine Linux
Uma imagem super leve, com cerca de 5 MB. Ela é perfeita pra aplicações que precisam de um sistema operacional mínimo. Mas os devs devem considerar que o Alpine não vem com várias bibliotecas padrão, então pode ser necessário configurar algumas coisas extras pra certos aplicativos.
FROM alpine:3.12
2. Debian/Ubuntu
Imagens mais completas, com um monte de ferramentas e bibliotecas. Elas são ideais pra aplicações mais complexas que precisam de um ambiente completo ou de uma biblioteca Linux padrão bem conhecida.
FROM ubuntu:20.04
3. Imagens Oficiais de Linguagens
Imagens oficiais pra linguagens de programação, tipo Node.js, Python, Ruby e outras. Essas imagens já vêm com o ambiente necessário pra desenvolver e rodar aplicações na linguagem correspondente, o que facilita a configuração.
FROM node:14
7.2 Configurando a imagem base
Depois de escolher a imagem base, é necessário configurá-la de acordo com os requisitos do seu aplicativo. A configuração inclui a instalação de pacotes necessários, a cópia dos arquivos do aplicativo e a configuração do ambiente.
Exemplo: Configuração da imagem base baseada no Alpine Linux
# Usando a imagem base Alpine Linux
FROM alpine:3.12
# Instalando os pacotes necessários
RUN apk add --no-cache python3 py3-pip
# Definindo o diretório de trabalho
WORKDIR /app
# Copiando os arquivos do aplicativo
COPY . .
# Instalando as dependências
RUN pip3 install -r requirements.txt
# Especificando o comando para iniciar o aplicativo
CMD ["python3", "app.py"]
Neste exemplo, a imagem base alpine:3.12 é usada, os pacotes necessários são instalados, os arquivos do aplicativo são copiados e as dependências são configuradas. O comando final alpine:3.12
especifica como executar o aplicativo.
Exemplo: Configuração da imagem base baseada no Ubuntu
# Usando a imagem base Ubuntu
FROM ubuntu:20.04
# Atualizando e instalando os pacotes necessários
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Definindo o diretório de trabalho
WORKDIR /app
# Copiando os arquivos do aplicativo
COPY . .
# Instalando as dependências
RUN pip3 install -r requirements.txt
# Especificando o comando para iniciar o aplicativo
CMD ["python3", "app.py"]
Este Dockerfile usa a imagem ubuntu:20.04 e instala Python e pip. Depois, ele copia os arquivos do aplicativo e configura as dependências, semelhante ao exemplo anterior.
7.3 Melhores práticas
Como escolher e configurar corretamente as imagens base:
1. Escolha imagens mínimas: comece com as menores imagens que atendem aos requisitos do seu aplicativo. Isso reduz o tamanho final da imagem e aumenta a segurança.
2. Não instale pacotes desnecessários: instale apenas as dependências realmente necessárias para seu aplicativo. Isso reduz o tamanho da imagem e diminui o número de possíveis vulnerabilidades.
3. Limpe o cache dos gerenciadores de pacotes: após instalar os pacotes, remova os arquivos temporários e o cache para deixar a imagem mais leve.
RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*
4. Use multi-stage build: isso permite dividir as etapas de compilação e execução, ajudando a criar imagens mais leves e seguras.
# Etapa de compilação
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Etapa final
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
5. Atualize regularmente as imagens: use versões recentes das imagens base para incluir as últimas correções de segurança e atualizações.
GO TO FULL VERSION